Dynamic E911 for Microsoft Teams integration and testing guide


Lauren Brockman


Click here to find out if your E911 endpoints are compliant with RAY BAUM’s Act


Bandwidth’s Dynamic E911 for Microsoft Teams Direct Routing provides emergency call routing and location capabilities based on the location of the user at the time of the 911 call. While the majority of the configuration and location management is performed within Microsoft Teams, Bandwidth provides the critical interconnectivity into public safety. Bandwidth routes the emergency call to the appropriate Public Safety Answering Point (PSAP) and makes the location information available to the 911 operator.

This guide is intended for enterprises planning to setup and configure the emergency calling features with Microsoft Teams Phone System where Direct Routing is deployed and where Bandwidth is the Emergency Services Routing Provider (ESRP).

Bandwidth’s E911 Dynamic Location Routing (DLR) solution powers our Microsoft Teams implementation for 911 call routing. Our E911 DLR support content is an important resource for any Teams enterprise implementing Bandwidth’s E911 service. However, it'll differ slightly from some of the instructions provided in this guide, which is geared towards the Microsoft Teams platform.

The terminology and steps outlined here attempt to bridge the gap between the Microsoft Dynamic E911 solution and Bandwidth’s handling of Teams location information for the purposes of emergency call routing. This isn't intended to replace Microsoft’s online documentation and, where appropriate, we’ve linked to those materials and online resources for more information. We’ve attempted, in most cases, to provide the configuration examples using both the Teams Admin Center and PowerShell.

This guide is written for a:

  • IT/Network Director, Manager, or Administrator
  • Systems Engineer
  • UC/Voice Manager
  • Teams Project Manager

Additional Resources

Key Terminology

Dispatchable Location

Dispatchable location describes both a civic address plus more specific information, such as building, floor, suite, room number, etc. By accurately populating Address Line 1 and Address Line 2 fields “necessary to adequately identify the location of the calling party”, enterprises can comply with the dispatchable location requirements for RAY BAUM’s Act (see Emergency Location and Place)

Dynamic Location Routing (DLR)

Bandwidth term to describe the ability to route emergency 911 calls based on pairing a user’s location with a provisioned network location at the time of a 911 call.

Emergency Address

Microsoft defines Emergency Address as: “a Civic Address—the physical or street address of a place of business for your organization.” Microsoft creates a CivicAddressID which is how the address will be referred to in PowerShell.

Emergency Calling Policy

Instructions for the simultaneous notification of a security team or front desk attendant at the time of a 911 call. Emergency notifications are a requirement for Kari’s Law

Emergency Call Routing Policy

The instructions for the handling of 911 calls (in the U.S. and Canada). You can create different policies for different users, e.g., a policy for U.S.-based users versus UK-based users.

Emergency Location

Microsoft defines Emergency Location as: 

“A location is a Civic Address—with an optional place. If your business has more than one physical location, it's likely that you'll need more than one emergency location.

When you create an emergency address, a unique LocationID is automatically created for this address. If you add a place to an emergency address—for example, if you add a floor to a building address—a Location ID is created for the combination of the emergency address and place. In this example, there will be two Location IDs: one for the Civic Address; one for the joined Civic Address and associated place.

When you assign an emergency location to a user or site, it's this unique location ID that's associated with the user or site.”

An enterprise with more than one office or branch location will have several Emergency Locations. An Emergency Location typically includes a verified Civic Address plus an additional Place to narrow down the physical location of the caller. 

Note: Bandwidth also uses the term Location ID to describe the address used for taxation purposes in the Bandwidth Dashboard (see Provisioning Endpoints with Bandwidth).

Location-Based Routing  

Provides instructions for routing calls into the PSTN based on the user’s location (non-emergency voice traffic). Location-Based Routing can be toggled on and off for each network site. It doesn't need to be enabled for Dynamic Location Routing for Microsoft Teams. 

Location Information Service (LIS)

A database within Teams which is queried for location information at the time of an emergency call.  

Network Region

Microsoft defines Network Region as:

“A network region contains a collection of network sites. It interconnects various parts of a network across multiple geographic areas. For example, if your organization has many sites located in India, you may choose to designate "India" as a network region. Each network site must be associated with a network region.

The same network regions are shared by Location-Based Routing for Direct Routing and enhanced emergency services. If you already created network regions for one feature, you don't have to create new network regions for the other feature."

Network Site

Microsoft defines Network Site as:

“A network site represents a location where your organization has a physical venue, such as an office, a set of buildings, or a campus. Network sites are defined as a collection of IP subnets. Each network site must be associated with a network region.

You can also use network sites to enable and configure emergency calling.”

Network Subnet

Microsoft defines Network Subnet as:

“Each subnet must be associated with a specific network site. A client's location is determined based on the network subnet and the associated network site. You can associate multiple subnets with the same network site but you can't associate multiple sites with the same subnet.

Subnet information is used to determine the network site on which an endpoint is located when a new session is initiated. When the location of each party in a session is known, the cloud voice feature can apply that information to determine how to handle call setup or routing.

For each network site, work with your network admin to determine which IP subnets are assigned to each network site. For example, the New York site in the North America region can be assigned the following IP subnets:,,, If Bob, who usually works in Detroit, travels to the New York office for training, turns on his computer and connects to the network, his computer will get an IP address in one of the four ranges that are allocated for New York, for example,”


Microsoft defines place as:  

“Typically a floor, building, wing, or office number. Place is associated with an emergency address to give a more exact location within a building. You can have an unlimited number of places associated with an emergency address. For example, if your organization has multiple buildings, you might want to include place information for each building and for every floor within each building.” Provisioning this information helps enterprises comply with RAY BAUM’s Act requirements for “dispatchable location.”  

Presence Information Data Format-Location Object (PIDF-LO)

PIDF-LO is the HTTP, XML tag format of the location information within a 911 call. PIDF-LO includes a “location object” that supports the dynamic capabilities within Teams.  

Trusted IP Address

Microsoft defines a Trusted IP Address as: “The internet external IP addresses of the enterprise network. They determine whether the user's endpoint is inside the corporate network before checking for a specific site match.”

Additional Resources

Configuring Emergency Calling

Step 1: Provisioning Endpoints with Bandwidth

Important: In this section, we use Bandwidth-specific terminology, e.g., Sub-account, endpoints, Location, etc. These terms and descriptions shouldn't be confused with Microsoft-specific terms discussed in subsequent sections.  

911 call routing policies and the location information that is displayed to public safety is managed wholly within the Microsoft Teams environment. However, user endpoints (or 911-enabled telephone numbers) must also be provisioned within the Bandwidth Dashboard for both call routing and billing purposes.

At 911 call time, the Emergency Location from Microsoft Teams is provided to Bandwidth with an assigned EndpointID (the SIP endpoint making the 911 service request). The Microsoft Teams Emergency Location address is used for routing the call to the PSAP however, at call time, Bandwidth appends additional information required by public safety including a callback number and a callback name.

In addition, if Bandwidth is the chosen provider for both voice and E911 services, we're capable of collecting and remitting taxes for 911-enabled telephone numbers provisioned with us. For more information about 911 taxation considerations, please request a copy of Bandwidth’s Microsoft Teams Application Notes from your Account Manager.

Bandwidth Account Set Up and Adding Phone Numbers

To initiate the process for inputting 911-enabled endpoints/phone numbers, Bandwidth’s onboarding team will activate Bandwidth’s E911 Dynamic Location for Microsoft Teams Direct Routing in your account. You may provision both Bandwidth-provided numbers and non-Bandwidth numbers.

If you're using Bandwidth phone numbers, you must create a Sub-account and Location in the Bandwidth Dashboard. Please note the Sub-account address doesn't pertain to 911 call routing, and is used strictly for administrative purposes.

To add a 911 endpoint:

  1. Log into the Bandwidth Dashboard.
  2. In the top navigation bar, click Emergency.
  3. Select Dynamic Endpoints and click Add.
  4. Create an Endpoint ID, which is used to identify the endpoint making the 911 service request. Note: An Endpoint ID is limited to 30 characters and can only include letters and numbers.
  5. Select your Preferred Language (English or French).
  6. Enter a Caller Name, which is the name of a contact who the Public Safety Access Point (PSAP) can call when notified of an emergency.
  7. Enter a Callback Number, which is the phone number where the caller can be reached.              Note: A Callback Number is limited to 10 digits in the Bandwidth Dashboard. 
  8. Search for an existing or add a new Billing Geolocation, which is needed for taxation purposes.
  9. Click Add Endpoint.

Adding Endpoints

Important: The identifier in the SIP INVITE must match exactly what’s in the Bandwidth Dashboard. You can use alphanumeric characters (A-Z, a-z, 0-9), however special characters (*, $, #, etc.) are not supported. While you can send us 10-digit numbers, we recommend using the 11-digit (E.164) format since this is what Microsoft Teams defaults to. For example, if your SBC is sending an 11-digit number in the From header, we recommend also using that 11-digit number for the Endpoint ID in the Bandwidth Dashboard.

To add 911 endpoints in bulk:  

  1. Select Dynamic Endpoints and click Add.
  2. Click Template CSV to download our sample CSV file where you can enter your endpoints.
  3. Once you've filled out and saved it, click Import Endpoints.
  4. Enter a Customer Order ID. Although this is optional, we highly recommend adding it so that you can use it later for personal reference.
  5. Drag and drop the CSV file or click Browse to search for it on your computer.
  6. Click Add Endpoints.

Importing Endpoints

To remove 911 endpoint(s):

  1. Select Dynamic Endpoints. 
  2. Check the box(es) next to the endpoint(s) you'd like to delete. If you'd like to remove all of your endpoints, check the box in the top left corner of the table. 
  3. Click Delete. A countdown will appear at the top of the page. If you change your mind, you'll have 5 seconds to click Cancel before the endpoint gets deleted.

Deleting Endpoints

Step 2: Configuring a Trusted IP Address

The Trusted IP Address is the primary data point used by Teams to determine the location of an emergency caller. Once a 911 call is identified as originating from a Trusted IP Address within the corporate network, Teams queries the LIS database for the Emergency Location. At the time of a 911 call, the Emergency Location is used to route the call and is presented to the PSAP. 

  1. In the Teams Admin Center, click Locations and select Network Topology.
  2. Click Trusted IPs. You'll need to enter a Trusted IP for IPv6 (preferred) or IPv4. This will represent the public IP (egress IP address) of the business Internet.
  3. Add a new Network Region. If you already created a Network Region for the U.S. and Canada-based PSTN access, you can skip this step.
  4. Add a new Network Site and assign to a Network Region. The Network Site is also where the Emergency Calling and Call Routing policies are configured. 
  5. Add your subnets to the Network Site (see Defining Network Elements (WiFi Access Points and Subnets)).  

You can also set up a trusted IP address in PowerShell by running:  

New-CsTenantTrustedIPAddress -Description "YOUR LOCATION" 
-IPAddress -MaskBits 32

Additional Resources

Step 3: Creating a Civic Address

Creating a Civic Address in the Teams Admin Center

  1. In the Teams Admin Center, click Locations and select Emergency addresses. Civic Addresses created in the Teams admin portal will automatically assign a geo-coordinate (latitude/longitude). For this reason, it has an advantage over PowerShell.
  2. Click +Add and enter the information that will be displayed to public safety:
    • The name for the location, e.g., company name
    • The street number and name

Addresses are validated in real-time. Teams creates a CivicAddressID, LocationID, and populates the latitude/longitude of the address in Teams.

Once a Civic Address has been created and validated within Teams, the address can't be modified, though you'll be able to add a Place (see Add a Place to a Civic Address). Any other changes require deleting the entire Civic Address, then creating a new one.

In this example, we created an Emergency Location called Your Company Name

Adding a Place to a Civic Address

Again, a Place is additional location information for a Civic Address such as a floor, suite, quadrant, room, cubicle, etc. It provides a more refined, accurate address to public safety. Note that Microsoft Teams creates two Location IDs: one for the Civic Address and one for the pairing of a Civic Address with a Place.

  1. In the Teams Admin Center, click Locations and select Emergency Addresses.
  2. Click on the address you want to update, select Edit, and then click Add.
  3. Enter the new Place. If an emergency address was already assigned to a user and needs to be assigned to a specific Place, you'll need to remove the association and re-enter it which allows you to select the Civic Address and the Place without using PowerShell.

Creating a Civic Address with PowerShell

Initial address validation is performed automatically within Teams by Azure Maps during setup of Emergency Addresses. If a match is found, the corresponding geo coordinates (latitude/longitude or X,Y) are automatically calculated. If a match is not found, Teams provides the ability to create an Emergency Address through manual entry or by using a PIN drop feature.

In PowerShell, run:

New-CsOnlineLisCivicAddress -HouseNumber 1234 -StreetName MAIN 
-StreetSuffix STREET
-City RALEIGH -StateOrProvince NC -PostalCode
27613 -CountryOrRegion US -Description
PRIMARY -CompanyName
COMPANY NAME -Latitude 99.9999 -Longitude 99.9999

To confirm the Emergency Locations in Powershell, run:


Note that the return string displays the LocationID and the CivicAddressID highlighted below. These will be needed to configure a Place and to set up E911 Dynamic Location Routing with Bandwidth (see Provisioning Endpoints in the Bandwidth Dashboard).

RunspaceId               : d5967d5c-9934-4ed5-a8f2-219281ebad91
TenantId                 : 4e2d9304-f99e-48ca-8205-e06b175e5423
LocationId               : 0700bb34-5b4d-49e2-81ed-cac0956aed4e
CivicAddressId           : e4ad15c2-0791-411c-98d8-f4580370ce1d
Location                 :
CompanyName              : YOUR COMPANY NAME
CompanyTaxId             :
HouseNumber              : 1234
HouseNumberSuffix        :
PreDirectional           :
StreetName               : MAIN STREET
StreetSuffix             :
PostDirectional          :
City                     : CITY
CityAlias                :
PostalCode               : ZIP
StateOrProvince          : NC
CountryOrRegion          : US
Description              :
ValidationStatus         : Validated
NumberOfVoiceUsers       : 0
NumberOfTelephoneNumbers : 0
Latitude                 : 00.00000
Longitude                : -00.00000
Confidence               :
Elin                     :
ResultSize               : 0
NumberOfResultsToSkip    : 0
Verb                     :
CorrelationId            :
Force                    : False

Note: The Location field in the example above is currently blank. This field should include the Place information.

Adding a Place with PowerShell

In this example, we’ll create Room 999 as a new Place.

When configuring places, the PowerShell refers to the Civic Address plus Place as a new and distinct LocationID. The following string ties the Place to the CivicAddressID:

$Room999 - New-CsOnlineLisLocation -CivicAddressiD CIVIC 
ADDRESS ID -Location Room 999

To confirm Location IDs have been created, run:


Powershell will return the following with Location ID. Remember, Teams will create one LocationID for each Civic Address, and another if that Civic Address is paired with a Place.

In PowerShell, run: 

New-CsOnlineLisLocation -CivicAddressId CIVIC ADDRESSID 
-Location YOURLOCATION -Latitude xx.xxxxx -Longitude xx.xxxx

New-CsOnlineLisLocation -CivicAddressId
e4ad15c2-0791-411c-98d8-f4580370ce1d -Location ‘ROOM 999’
-Latitude 99.99999 -Longitude 99.99999

You can view Place information in the Teams admin portal. 

Step 4: Defining Network Elements (WiFi Access Points and Subnets)

Once Emergency Locations and Places are established, network elements such as WiFi access points and subnets (Microsoft has indicated support for Ethernet switches/ports will be available soon) can be mapped to them. Note that you can add subnets using the Teams Admin Center, but not WiFi access points (although this functionality is coming soon).

Creating a Subnet in Teams Admin Portal

  1. In the Teams Admin Center, click Locations and select Networks & locations.
  2. Add the Subnet and assign it to the Emergency Location (Civic Address) created Step 2.

Provisioning WiFi Access Points

To provision WiFi access points, you'll need the BSSID from the router. This is sometimes the same as the MAC address, but not in all cases. 5G and 2.4G wireless APs tend to have different BSSIDs for each band. BSSIDs will need to be added for all bands that may be joined by your users.

To locate the BSSIDs, open a DOS window and enter:

netsh wlan show interfaces 

The command will return:

Pro Tip: Windows will return the BSSID in this format: xx:xx:xx:xx:xx:xx. However, Microsoft Teams needs it to be entered as: xx-xx-xx-xx-xx-xx.

Associating WiFi Access Points with a Location  

Note: The use of Ethernet switches/ports are not currently supported in Teams, but Microsoft has indicated in their online documentation that this ability is pending. Once subnets, WiFi access points, switches/ports are created, the Teams admin portal will show them as Places in Emergency Locations. 

To define network locations using WiFi access points, run:

Set-CsOnlineLisWirelessAccesspoint -Description LOCATION 

To confirm the correct configuration, run:


PowerShell will return: 

Pro Tip: If a user is connected to both a subnet and WiFi access point, the default Emergency Address will be based on the WiFi access point. Note that WiFi access points may take longer to appear within Teams admin portal than IP addresses or subnets. 

Important: While the Trusted IP addresses of the enterprise are whitelisted within Teams, most work-at-home users are subject to occasional dynamic IP address changes by their ISP. Because of this, setting up the user’s home network as a Trusted IP address is not recommended. For these users, 911 calls made through Microsoft Teams will be routed to Bandwidth’s nationwide Emergency Call Center (ECC) for call processing.

Additional Resources

Step 5: Defining Emergency Call Routing Policies

The emergency call routing policy is a set of instructions for how Teams should handle the delivery of 911 calls to public safety. Microsoft Teams has a default 911 dialing plan that you'll need to update with a new emergency call routing policy.

Note that an Emergency Call Routing Policy is different from an Emergency Calling Policy which is covered in the next section of this document.

  1. In the Teams Admin Center, click Voice and select Emergency policies.
  2. Click +Add and enter the name of the policy, e.g., 911 US.

Pro Tip: Although a global default call routing policy can be assigned to all users, we recommend creating a custom policy per Network Site to ensure more accurate calling behavior for specific users.

At the time of a 911 call, if a network policy conflicts with the user-assigned policy, the network policy takes precedence.

Additional Resources

The Emergency Dial String field are the digits dialed by the caller. The Emergency Dial Mask field includes the digits used for the outbound call. In the U.S. and Canada, both fields should be “911”.  

Note: You can also add inputs such as “9911” as an emergency dial string field to route emergency calls to allow for a caller who accidentally adds a prefix when calling 911.

Bandwidth offers an alternative “933” testing feature that allows enterprises to dial the digits 933 in order to validate the location information for the user. This feature can help organizations ensure compliance with RAY BAUM’s Act and, because calls are not routed to public safety, that there’s no disruption of normal 911 operations. 933 testing also triggers emergency notifications to designated recipients to ensure compliance with Kari’s Law.

  1. Be sure that the Enhanced Emergency Services toggle is set to On. This enables PIDF-LO to support dynamic location capabilities within Teams. Optionally, you can configure this using PowerShell (see Enabling PIDF-LO).
  2. Click Save.

Step 6: Define Emergency Calling Policies (Notifications)

Emergency Notifications alert designated company personnel when a 911 call is made from within the enterprise. Designated personnel may be anyone within the company including a security team, a front desk attendant, or a facility manager. While notifications appear as an optional setting with Microsoft Teams, this is  a requirement for compliance with Kari’s Law. Within the Teams service, notifications are provided via Teams chat and conferenced phone call.

Microsoft Teams provides three Notification options. For the first option, you must select a user or distribution list to receive the notification:

  • Send Notifications only: A Teams chat message is sent to designated users or a group that contains more than one user.

For the next two options, you need to specify a dial-out number for the phone call. That could be a security desk or front desk phone number or individual:

  • Conferenced in and muted: The Notification recipient receives a call where the recipient can listen but not participate.
  • Conferenced in and unmuted: By providing a dial-out number, a call is initiated and the recipient can join and participate in a 911 call-in-progress (see images below).
  1. In the Teams Admin Center, click Voice and then select Emergency Policies.
  2. Click +Add. 


Additional Resources

Step 7: Assign an Emergency Call Routing Policy and an Emergency Calling Policy to a User

Assign Emergency Call Routing Policies to a User

Run the following in PowerShell:

Grant-CsTeamsEmergencyCallRoutingPolicy -Policy Name “POLICY 
NAME” -Identify “USERNAME”

Get-CsOnlineUser  “USERNAME”

PowerShell will return a lengthy string that should include:

Users must be assigned to an Emergency Calling Routing Policy for dynamic location routing to perform correctly.

Run the following in PowerShell:

Grant-CsTeamsEmergencyCallingPolicy -PolicyName “POLICY
NAME” -Identity “USERNAME”

Get-CsOnlineUser “USERNAME” 

As with the call routing policy set up, the return string for the user should include:

Assign an Emergency Calling Policy to a User

In PowerShell, run the following

Grant-CsTeamsEmergencyCallingPolicy -PolicyName “POLICY 
NAME” -Identity “USER NAME”

Get-CsOnlineUser “USER NAME”

As with the Emergency Call Routing Policy example above, the return string should include:  

To find the Emergency Call Routing Policy and Emergency Calling Policy in the Teams Admin Center, click Users and select Policies.

Additional Resources

Step 8: Enabling PIDF-LO

PIDF-LO must be enabled within your SBC as well as your Teams tenant. Bandwidth E911 for Microsoft Teams Direct Routing supports all Microsoft-certified SBCs, including Audiocodes, Oracle, Ribbon, and more.

Note: Your SBC must use Port 5060 to support TCP and SIP signaling. 

You may have enabled PIDF-LO during the SBC and Microsoft Teams tenant pairing. If not, you can do so now with PowerShell.  


Set-CsOnlinePstnGateway -Identity "SBC.DOMAINNAME.COM" 
-PidfloSupported $true

The return string will include:

To test the configuration, run:


The return string will include:

Step 9: Testing 911

Testing is a critical step in your 911 deployment for Microsoft Teams. Your Bandwidth Onboarding Team will guide you through the testing process.

If accurately configured, the Teams desktop and mobile client should display the address associated with each user. 

Microsoft Teams Calls Settings

Microsoft Teams Calling

You can visually confirm the location provisioned before proceeding to the next phase of testing. 

Testing Emergency Locations Using 933

Beyond the initial setup and testing of the Bandwidth 911 service (see Testing Your Bandwidth 911 Service Configuration), we don't recommend using live 911 calls for subsequent tests, e.g., when adding a new user to your Teams tenant. Live 911 calls disrupt normal operations and should, to the degree possible, be limited to exigent emergencies.

Bandwidth offers an alternative 933 service that allows enterprises to dial the digits 933 in order to validate the location information for the user. This feature can help organizations ensure their compliance with RAY BAUM’s Act, and because calls are not actually routed to public safety there’s no disruption of normal 911 operations. 933 testing also triggers emergency notifications to designated recipients to ensure compliance with Kari’s Law.

In order for 933 testing to work, 933 must be added as an Emergency Dial String in the Emergency Call Routing Policy. In this example, both 911 and 933 are registered in the same policy which can then be assigned to each user. In this way, 933 can be dialed to confirm configuration of Dynamic Location Routing not only with Microsoft, but also with Bandwidth's 933 Testing Center.

Within the Teams admin center or via PowerShell commands, the digits 933 must be added to the Emergency Call Routing Policy to invoke the 933 call.  

A text-to-speech audio recording will play back the provisioned location for that Emergency Location including phone number, user name, Civic Address, and Place (if provisioned).  

Step 10: Testing Your Bandwidth 911 Service Configuration

Live 911 connectivity testing is included as part of the standard 911 onboarding process  at Bandwidth. Our dedicated support team works with new accounts to schedule and test 911 connectivity with live calls. We help coordinate a live 911 call to the primary designated SBC and a second live 911 call to the SBC designated for the failover route. Once this testing is completed to the satisfaction of the account manager, the service is set to live.

We suggest notifying the designated PSAP in advance whenever possible. To avoid disrupting PSAPs with high 911 call volumes, you may want to avoid live testing of endpoints located in busy urban areas.

For more information, see our E911 for Static VoIP integration and testing guide.

Additional Resources

Article is closed for comments.