11 Mar Configuring E911 with Microsoft Teams Direct Routing & Audiocodes
E911 is a national emergency service for many countries, enabling E911 operators to automatically identify the geographical location and phone number of an emergency caller. In E911, the emergency called number is routed to the nearest E911 operator, termed public safety answering point (PSAP) based on the location of the caller. Automatic identification of the caller’s location and phone number reduces the time spent on requesting this information from the caller. Therefore, the E911 service enables the PSAP to quickly dispatch the relevant emergency services (for example, fire department or police) to the caller’s location. Even if the call prematurely disconnects, the operator has sufficient information to call back the 911 caller.
E911 was previously available for Skype for Business Server and now with the transition to Teams in order for businesses to ensure compliance with local law and regulations Microsoft Teams is now also able to provide this functionality so that regardless of a users physical location the PSAP is able to retrieve a location for that user and provide this to emergency service responders.
For the purposes of this blog post i’m only going to cover a basic configuration necessary for enabling ELIN functionality with Microsoft Teams Direct Routing with an Audiocodes SBC that will demonstrate what the user and admin experience of integration between Teams and Audiocodes will look like. They’re are many moving parts to configuring and planning E911 and your configuration will be dependant on a variety of factors such as country local and national laws. For example in the USA E911 is Federal Law. Where as in the UK E911 is not mandatory.
Vendors certified for ELIN can be found here. You’ll note Audiocodes can also integrate with Emergency Routing Service (ERS) providers but for simplicity’s sake and also because i’m based in the UK and have used a UK configuration i will not include the steps for integrating an ERS.
To complete this configuration the following is necessary:-
- Audiocodes SBC on minimum firmware 7.20A.256.396
- Audiocodes ELIN License
- An existing Direct Routing SIP trunk integration with Microsoft Teams
- One licensed Phone System and DR enabled Teams user
The configuration components of Teams E911 are as follows:-
The most important part of the Teams E911 configuration is actually the Trusted IP’s. The trusted IP is used to determine if the Teams client is inside the corporate network. The trusted IP will be checked before Teams looks for a specific match with the LIS elements (Civic Address, Location, Subnet, Switch/Port, WAP) or Network Configuration Service (Region, Sites, Subnets)
The Trusted IP must match the client or users advertised Public IP address. Therefore its very important these addresses are entered accurately and that all public IP addresses that will be presented by clients when connected to the corporate network, e.g. their public NAT IP, must be defined in the Tenant Trusted IP Address List
From the Teams Admin Centre enter your Trusted IP.
Add a new Network region. As i’m based in the UK I’ve called mine UK.
Add a new network site
Select the new Network Site and add the subnets required remembering to add the site to the appropriate network region. The Emergency Calling and Call Routing Policy can be left at the default for now.
There’s a 2 hour cache on the Network configuration Service, so the above configuration can take up to 2 hours or more to replicate and be available to your clients.
Next we will need to create a Civic Address. This step can be done through the TAC or via Powershell. If the address is outside of the USA this step needs to be done via Powershell as the Civic Address and its geo-coordinates must be verified in order for the address to be successfully added. Unfortunately the TAC doesn’t provide automatic verification and entry of geo-coordinates for non-US addresses. This means the Longitude and Latitude coordinates must be provided manually.
Browse to www.bing.com/maps and enter your address. Make a note of the coordinates.
From the Skype for Business Online Shell we need to use the New-CsOnlineLisCivicAddress cmdlet to create the address. This command will need to include parameters for the address, along with the latitude, longitude and an ELIN number.
New-CsOnlineLisCivicAddress -Longitude 12.3456 -Latitude 0.12345 -HouseNumber 1 -StreetName “Teams Street” -StreetSuffix Street -City London -Country GB -PostalCode LON12NP -Description “ELIN Test” -CompanyName “Teams LLP” -ELIN +442085555555
The new Emergency Address location will now show in the TAC.
The Teams client obtains emergency addresses from the locations associated with different network identifiers. Both subnets and Wireless Access Points (WAPs) are supported at this time of writing.
Copy the LocationID from your emergency address and use this with the Set-CsOnlineLisSubnet cmdlet to enter the subnet your Teams Clients are on. This needs to be an internal network address.
Set-CsOnlineLisSubnet -Subnet 192.168.2.0 -LocationId ExampleIDNumber -Description “Subnet 192.168.2.0”
The Set-CsOnlineLisWirelessAccessPoint cmdlet can also be used if you have Teams clients connecting via Wi-Fi.
Next we need to enable PIDFLO support on the PSTN Gateway. By default this is turned off. This must be turned on so the .xml body payload is sent to the SBC with the location details of the user.
Set-CsOnlinePSTNGateway –Identity gw.domain.com –PidfloSupported $true
Lastly we need to create an Emergency Call Routing policy. This policy defines the number used to reach emergency’s services. Obviously using the UK emergency number 999 is a bad idea. So i used 990 which essentially routes into a black hole. This way we can test happily without bothering emergency services!
This policy needs to be applied to the Teams user who needs to be enabled for E911. From Powershell we use the Grant-CsTeamsEmergencyCallRoutingPolicy -Identity cmdlet to apply this to the user.
You may need to wait some time, or try restarting your client but once the NSC has updated you should be able to see an Emergency Location in the Teams Client.
At the moment the following clients are supported:-
- Teams desktop client for Microsoft Windows
- Teams desktop client for Apple macOS
- Teams mobile client for Apple iOS client version 18.104.22.1689121004 and App Store version 1.0.92 and greater
- Teams mobile client for Android client and Google Play store version 1416/22.214.171.1249121201 and greater
- Teams phone version 1449/126.96.36.1999110802 and greater
This completes the Teams portion of the configuration.
Before you start the Audiocodes configuration ensure you have a valid license.
For the IP Group through which you want to communicate with the public-safety answering point (PSAP), configure the SBC PSAP Mode parameter to enable
If the initial established call between the E911 caller and the PSAP is prematurely terminated, the PSAP can use the ELIN to call back the E911 caller within a user-defined time interval (in minutes) from when the call was terminated. By default, an ELIN can be used for PSAP callback within 30 minutes after the call terminates. This value can be anything between 0 and 60.
As Teams was normalising my E911 dial string with the leading plus i created a manipulation rule to remove the plus. In a production environment unless your carrier accepts full E.164 you probably want to ensure the plus is stripped too as a good best practice to ensure the number routes successfully. For the purposes of my lab this step is optional as the number is ultimately routing into a black hole and the PIDFLO .xml body is sent to the SBC regardless.
The Teams client displays your location when an emergency call is in progress. This is useful as if for whatever reason the PSAP was unable to verify your address at least the caller can read their address back to the emergency responder.
From the syslog above you can see the invite includes the PIDFLO information from LIS that’s been parsed by the ELIN from Teams. It also includes the ELIN number. The SBC saves the From header value of the SIP INVITE message in its ELIN database table. And this ELIN is used by the PSAP to call back the emergency caller.
If you SSH into the SBC and run the command below you’ll see the ELIN table with the CLID of the emergency caller.
Audiocodes have really made the ELIN configuration and integration with Teams very simple which is a big plus for architects and engineers as E911 is usually a project in its own right due to its complexity and the planning necessary to deploy it.
Its also very good that Microsoft allow Location Information to be sent dynamically to a PSAP. This saves on further administrative overhead of keeping the E911 providers ALI/MSAG up to date.
That said in order for E911 to be truly effective a API hook to allow automation of moves adds and changes to LIS is necessary. At the moment this is a one off point in time configuration. This is fine for initial set up but where Federal Law must be observed as is the case for the USA its vital that LIS is kept up to date so the correct location information is sent to a PSAP. I’m not aware of any way to automate this today. And who knows maybe this is something Microsoft are working on already but exposing LIS via Graph could be a great way to automating updates to LIS, networks and emergency addresses.