Voraussetzungen
Für die Konfiguration von Microsoft Teams Direct Routing müssen im ersten Schritt einige Bedingungen erfüllt werden.
- SSL Zertifikat. Entweder auf sbc.office365domain.tld oder *.office365domain.tld
- Linux Server (Debian, Ubuntu. 2 vCPU + 2GB RAM)
- Microsoft365 Tenant mit eigener Domain (also nicht ausschließlich die .onmicrosoft.com)
- Globale Administrator Rechte im Tenant
- SBC Lizenz (ich nutze anynode SBC)
- SIP Trunk (ich nutze hier plusnet)
Session Border Controller mit Microsoft Teams verbinden
Zunächst konfigurieren wir das Microsoft Teams PowerShell Modul zur administration der Umgebung. Hierzu kann PS-Get verwendet werden.
Install-Module MicrosoftTeams
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change
its InstallationPolicy value by running the `Set-PSRepository` cmdlet.
Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"):
Die Abfrage wird einfach mit A für ‚Yes to All‘ beantwortet. Das aktuelle Teams Modul inkludiert mittlerweile das SkypeOnlineConnector Modul, früher mussten diese beide separat installiert werden.
Im nächsten Schritt wird die Verbindung zur Microsoft Teams Admin Umgebung aufgebaut
Import-Module -Name MicrosoftTeams
$sfbSession = New-CsOnlineSession
Import-PSSession $sfbSession
Microsoft empfiehlt zwar die Credentials als Parameter zu übergeben, da aber auf einem Globalen Administrator Account MFA aktiviert sein sollte, verzichte ich hier auf den -Credential Parameter. Bei New-CsOnlineSession erscheint ein neues Fenster, dass den Login in M365 erledigt.
New-CsOnlinePSTNGateway -Identity sbc.yourdomain.tld -Enabled $true -SipSignalingPort 5067 -MaxConcurrentSessions 4 -SendSipOptions $ture -ForwardPai $false
Der Parameter -Identity muss den öffentlich auflösbaren DNS Hostnamen des Session Border Controllers enthalten. Der -SipSignalingPort ist standardmäßig auf 5067 gesetzt, kann jedoch nach belieben geändert werden. In einer Multi-Tenant Konfiguration, sprich mehrere Endkunden über einen SBC zu bedienen, ist das notwendig. Für ein „einfaches“ Deployment kann der Default Port gesetzt bleiben. Durch den Parameter -SendSipOptions $true werden regelmäßig SIP OPTIONS Pakete an den SBC gesendet um Alerts durch Microsoft zu generieren, falls der SBC nicht weiter erreichbar ist. -ForwardPai anonymisiert sämtliche Nutzerinformationen Richtung SBC, also ungewünscht, daher $false.
Lizenzen zuweisen
Im nächsten Schritt müssen den Nutzern die Phone System Lizenzen zugewiesen werden. Je nach Plattformaufbau (hybrid, online only) und Nutzerzahl ist es womöglich am günstigsten eine eigene Gruppe für die Telefonienutzer zu definieren und die Lizenzen dieser zuzuweisen.
Zu beachten ist, dass je nach Microsoft 365 Tenant und regionaler Auslastung der Microsoft Systeme die Zuweisung der Lizenzen bis zu 72 Stunden dauern kann. Mittlerweile funktioniert das System relativ stabil, vereinzelt kommen diese langen Synchronisierungszeiten jedoch immer noch vor.
Nutzer konfigurieren
Den Benutzerkonten muss nun die lokale Telefonnummer in E.164 notation zugewiesen werden, sodass der Teams Tenant die vom SBC durchgeleiteten Anrufe den korrekten Nutzern zustellen kann und bei telefonieren die korrekte Nummer übertragen werden kann.
Set-CsUser -Identity "markus.hupfauer@hupfauer.one" -OnPremLineURI tel:+49821123456 -EnterpriseVoiceEnabled $true -HostedVoiceMail $true
Die Parameter -HostedVoiceMail & -EnterpriseVoiceEnabled steuern die Verfügbarkeit von Mailbox & Telefonie generell. Für die Direct Routing muss mindestens der Switch EnterpriseVoiceEnabled auf $true gesetzt sein, jedoch ist die Mailbox kostenfrei enthalten und sollte daher auch aktiviert werden. Der Parameter OnPremLineURI erfordert den Präfix tel: und dann die Rufnummer inklusive +, Landeskennzeichen und Durchwahl, gemäß Microsoft Spezifikation. Die Identity erfordert den UPN des zu verändernden Benutzers, in der Regel ist dies die E-Mail Adresse.
VoIP Routing konfigurieren
Bei nur einem SBC ist dieser Prozess relativ simpel, es zeigt aber auch gleich die Möglichkeiten zum Beispiel Anrufe gemäß ihrer Landeskennziffer direkt von seitens Microsoft an andere Session Border Controller zu leiten. Alternative Überlegungen sind notwendig, wenn MeidaBypass verwendet werden soll. Hier muss der Session Border Controller dann auch aus dem Netzwerk des Endbenutzers erreichbar sein, ergo es werden mehrere Routen basierend auf dem Nutzerstandort benötigt. MediaBypass ist meiner Meinung nach jedoch nur für sehr große Deployments interessant.
Microsoft Routing besteht aus drei Komponenten. Der PSTN-Usage diese fasst mehrere VoiceRoutes zusammen und der Voice Routing Policy die wiederum eine PSTN Usage einem oder mehreren Nutzern zuweist.
Für dieses Beispiel wird davon ausgegangen, dass sämtlicher Traffic über einen SBC geleitet werden soll.
Zunächst fügen wir eine PSTN-Usage hinzu für unseren SBC.
Set-CsOnlinePstnUsage -Identity Global -Usage @{Add="RouteAllViaHQ"}
Die PSTN-Usage haben wir hier exemplarisch RouteAllViaHQ genannt, es ist aber jeder Name frei wählbar.
Im nächsten Schritt definieren wir, wie mit Anrufen innerhalb dieser PSTN-Usage verfahren werden soll.
New-CsOnlineVoiceRoute -Identity "HQ-1" -NumberPattern ".*" -OnlinePstnGatewayList sbc.mydomain.tld -Priority 1 -OnlinePstnUsages "RouteAllViaHQ"
Der Parameter Identity definiert wieder nur den Namen dieser Richtline und ist ebenfalls frei wählbar. Das NumberPattern erwartet einen gültigen RegEx Ausdruck der die E.164 Rufnummer des Anzurufenden verarbeitet. In unserem Beispiel wird das Pattern „.*“ genutzt um alle abgehenden Anrufe über diese Route zu schicken.
Sollen Rufnummern aus Australien beispielsweise über einen separaten Session Border Controller gerouted werden so müsste das NumberPattern auf ^\+61(\d){3,}$ gesetzt sein. Es sollten höchstens drei Ziffern erforderlich sein, da die Notrufnummern in der Regel dreistellig sind.
Im nächsten Schritt muss eine VoiceRoutingPolicy angelegt und auch den Nutzern zugweisen werden.
New-CsOnlineVoiceRoutingPolicy "All via HQ" -OnlinePstnUsages "RouteAllViaHQ"
Grant-CsOnlineVoiceRoutingPolicy -Identity "markus@hupfauer.one" -PolicyName "RouteAllViaHQ"
Sollten an diesem letzten Schritt Fehlermeldungen im Sinne von: „Der Nutzer ist nicht auffindbar im Verzeichnis“ auftreten spricht höchstwahrscheinlich für ein Microsoft 365 Problem. Sollte das Problem länger als 72 Stunden nach dem Zuweisen der Phone System Lizenzen an den Nutzern bestehen muss der Microsoft 365 Support händisch eine Synchronisierung der Backend-Systeme vornehmen.
Nach einigen Stunden sollte der Nutzer in Microsoft Teams innerhalb der Telefon-App (Telefonhörer) einen Ziffernblock vorfinden der Ihm erlaubt Anrufe ins öffentliche Telefonnetz direkt aus Teams zu führen.
2 Comments
Sebastian Reeves
at 4 Jahren agoty, how to configure routing for two session border controllers. I want to create a high-availability with anynode and Teams should choose host 2 if host 1 is down
Markus
at 4 Jahren agohttps://docs.microsoft.com/de-de/microsoftteams/direct-routing-voice-routing#example-2-voice-routing-with-multiple-pstn-usages