Teams und Extension Dialing

Schon Skype fur Business kannte die Funktion "Extension Dialing" und in Teams gibt es diese Funktion auch. In Deutschland kennen wir diese Funktion nicht wirklich aber als Teams Admin sollten Sie die Funktion kennen, um z.B. Anwender in anderen Ländern, insbesondere USA, korrekt zu provisionieren.

Die andere "Durchwahl"

In Deutschland und vielen anderen Ländern ist eine Rufnummer eindeutig und verweist direkt auf den Anschlussinhaber, sei es zuhause oder auch in Firmen. Wir kennen das als "Durchwahl" und wird in Beschreibungen auch als "Direct Inward Dialing (DID)" beschrieben. Das kann je nach Land aber zu unterschiedliche langen Rufnummern führen und erfordert, dass der Provider entsprechende "Rufnummernblöcke" an eine Firma vergibt. Das Thema "Rufnummernplan" ist hier knifflig, da Firmen wachsen oder schrumpfen und entsprechend Rufnummern nicht genutzt werden oder neue Rufnummern zugeteilt werden müssen, die vielleicht nicht am Stück sind. Je nach Größe der Stadt sind in Deutlich die "Vorwahlen" (Ortsnetzkennzahl (OKNZ)) 2-4 stellig, um entsprechende Rufnummern zuteilen zu können.

In den USA hingegen sind die Rufnummern klar strukturiert. Es gibt einen 3-stelligen "Area-Code" der quasi einen Carrier zugewiesen ist, der dann 7-stellige Rufnummern vergeben kann. Jede Nummer ist aber "alleinstehend" und es gibt eigentlich keine "Blöcke". Die US-Bürger haben sich da schon immer dran gewöhnt dass dass sie immer eine 7-stellige oder 10 stellige Nummer eingeben müssen. Theoretisch kommen wir so auch auf 999 Area-Codes mit 9999999 Rufnummern, das auch für die 300 Mio Einwohner ausreichen sollte. Wobei eine Person ja durchaus mehrere Rufnummern (Arbeit, Privat, Mobil, IoT, Fax etc.) haben kann und die "Verteilung" über die Fläche auch nicht gleichmäßig ist.

Wie löst man aber in so einem Umfeld das Problem der internen Nebenstellen oder direkter Durchwahlen, wenn es keine Rufnummernblöcke gibt? Indem man eine 10-stellige Rufnummer als "Zentralnummer" definiert und dann eine "Nachwahl" startet.

Für den Anrufer sieht das so aus, dass er nach der Anwahl der Rufnummer eine kurze Pause einlegt, bis der Ruf zur Vermittlung aufgebaut wurde und dann per DTMF die eigentliche Durchwahl angegeben wird. Historisch war früher dann die Zentrale oder Vermittlungsstelle dran und hat den Anrufer nach der gewünschten Nebenstelle gefragt. Heute macht das eine Software. Bei Microsoft Ist das der "Auto Attendant" und die Funktion zur automatischen Vermittlung von anrufen an die passende Nebenstelle oder Voicemail gibt es schon seit Microsoft VoIP macht.

Auto Attendant

Damit das funktioniert, müssen Sie natürlich zuerst eine "Vermittlungskonsole" einrichten. Eine direkte Signalisierung einer Extension im SIP-Paket per Direct Routing ist meines Wissens nicht möglich. Der Anruf muss immer auf eine direkte Durchwahl gehen und das ist dann ein AutoAttendant mit genau dieser Nummer. Teams routet den Anruf dann an diesen Agenten, der mit einer kurzen Ansage die Extension abfragt und dann den Anruf weiter vermittelt.

Der Auto Attendant nutzt dazu natürlich eine "Suche" im Verzeichnis. Es können nun natürlich passieren, dass die Extension nicht eindeutig ist. Dann hat der AA natürlich ein Problem. Es ist aber die Aufgabe des Teams Voice Administrator die Eindeutigkeit der Extension innerhalb des Suchraums sicherzustellen. Im Anrufverlauf können Sie dabei unten auf "Wahl nach Durchwahl" aktivieren:

Um den Suchbereich dann einzuschränken, können Sie die Mitarbeiter einer bestimmten Gruppe einschließen oder ausschließen:

 

Das bietet sich z.B. an, um die Suche nach einer Durchwahl auf einen Standort zu beschränken. Wenn eine Firma z.B. in Paderborn eine Hauptrufnummer mit 3-stelligen Durchwahlen hat und auch in Berlin eine andere Hauptrufnummer mit den gleichen dreistelligen Durchwahlen nutzt, dann sollten Sie zwei "Telefonzentralen" anlegen und pro Standort eine AzureAD-Gruppe mit den Mitarbeitern des Standorts nutzen.

Vielleicht gibt es schon so eine Gruppe im AD und wird per ADSync repliziert, z.B.: um Berechtigungen zu steuern. Ansonsten könnten sie auch dynamische AzureAD-Gruppen nutzen, die vielleicht das Feld "Ort" oder direkt den Start der Rufnummer nutzen.

Bei der Extension müssen Sie aber aufpassen, denn der Auto Attendant liest dazu nicht das Feld "MSRTCSIPLine" bzw. in der Cloud dann "OnPremiseLineURI" oder manuell die "LineURI", sondern nur folgende Felder:

TelephoneNumber (AD and Azure AD)
HomePhone (AD)
Mobile (AD and Azure AD)
OtherTelephone (AD)

Das Format der Rufnummer ist hier auch klar vorgegeben:

+<phone number>;ext=<extension>
+<phone number>x<extension>
x<extension>

Sie müssen oder sollten daher sicherstellen, dass die Rufnummer in beiden Bereichen mit der Extension übereinstimmt. Wenn die Benutzer per ADSync aus einem lokalen AD abgeglichen werden, sollten Sie die Felder entsprechend im lokalen AD provisionieren.

Es kann laut Microsoft bis zu 12h dauern, ehe Änderungen auch wirken.

Ein Dialplan soll den Anwendern die einfach Möglichkeit geben, über bekannte kurze Rufnummern den richtigen Teilnehmer zu erreichen. In Deutschland ist es bei Firmen üblich, dass man intern einfach nur die Nebenstelle oder Durchwahl anwählt. Der Dialplan muss dann aus der kurzen Rufnummer eine vollständige E.164-Nummer machen. Auch hier muss dann natürlich auf die Extension Rücksicht genommen werden, bzw. der Dialplan die Nummer entsprechend erweitern. Sie addieren einen neuen oder pflegen einen bestehenden Dialplan und eine Regel könnte wie folgt aussehen:

Pattern.   ^(7\d{3})$
Translation +495251304$1;ext=$1

Auf der Seite Teams Dialplan gibt es weitere Informationen zur Nutzung und Einrichtung von Wählplänen. Dort ist auch beschrieben, dass der Teams Client fest im Code hinterlegte Normalisierungen je nach Land nutzt, wenn keine andere selbst definierte Regel vorher die eingegebene Nummer normalisiert: Für +49 habe ich folgende Regeln gefunden.

"dialPlanPolicy": {
     "normalizationRules": [
       { "pattern": "^00(\\d*)$",                                            "translation": "+$1" },
       { "pattern": "^0(\\d*)$",                                             "translation": "+49$1"},
       { "pattern": "^([6-8]\\d{2})$",                                       "translation": "+495251304$1"},
       { "pattern": "^([2]\\d{2})$",                                         "translation": "$1"},
       { "pattern": "^([1-9]\\d{1}\\d+)$",                                   "translation": "+495251$1"},
       { "pattern": "^00(\\d+)$",                                            "translation": "+$1"},
       { "pattern": "^((\\+)?(\\d+))(;)?(ext|extn|EXT|EXTN|x|X)(=)?(\\d+)$", "translation": "$1;ext=$7"},
       { "pattern": "^0(\\d+)$",                                             "translation": "+49$1"}
     ],
     "optimizeDeviceDialing": true,
     "ituCountryPrefix": "49"
   },

Die ersten fünf Regeln kommen aus dem Net at Work Dialplan aber die letzten drei Regeln sind von Microsoft vorgegeben. Die mittlere dieser drei Regeln kümmert sich um die Extensions:

pattern     : ^((\\+)?(\\d+))(;)?(ext|extn|EXT|EXTN|x|X)(=)?(\\d+)$
translation : $1;ext=$7

Teams teilt eine Rufnummer auf, die "(ext|extn|EXT|EXTN|x|X)" enthält und übernimmt den vorderen Teil als Rufnummer und den hinteren Teil als Extension. Aus dieser Definition könnten sie nun auch folgern, welche Schreibweisen generell möglich ist. Ich kannte bislang nur ";ext=<nummer>" oder "x<nummer>" aber noch nicht die Version mit "EXTN" oder ohne Gleichheitszeichen.

Routing mit "LineURI"

Microsoft Teams nimmt die Rufnummer aus dem Feld "LineURL", um einen eingehenden Anruf direkt zu "matchen". Bis Jan 2023 war es so, dass die Nummer nicht eindeutig sein musste und Teams bei mehrdeutigen Übereinstimmungen den ersten Treffer signalisiert hat. Das konnte dann dazu führen, dass der falsche Teilnehmer erreicht wurde. Nehmen wir an, dass Sie drei Benutzer haben, die alle die gleiche Stammnummer und unterschiedliche Extensions hatten:

Jon Doe    +1 555 1234567;ext=12
Jane Doe   +1 555 1234567;ext=13
Mike Maus  +1 555 1234567;ext=14
AutAttend1 +1 555 1234567

Wenn nun jemand direkt die "+15551234567" angerufen hat, dann klingelte es wohl bei "Jon Doe". Wenn ich in dem Bild nun noch einen "Auto Attendant" mit der +1 555 1234567 hatte, dann war dennoch nicht sicher gestellt, dass der Anruf beim AA angekommen ist. Diese Verhalten war bei Skype for Business nicht so, da hier der "Best match" gewonnen hatte. Bei Teams sollten Sie dann dem Auto Attendant eine eigene Rufnummer und die Rufnummer an den Personen gar nicht genutzt werden. Microsoft hat aber im Jan 2023 eine Änderung beim Routing angekündigt:


(Updated) Changes coming to how dialed phone numbers are matched to users
https://admin.microsoft.com/AdminPortal/home#/MessageCenter/:/messages/MC487014
Die Meldung ist noch länger und beschreibt den Sachverhalte weiter und die notwendigen Aktionen.

Die Meldung dürften also nur Administratoren sehen, die auch Benutzer mit der ";EXT="-Schreibweise in der LineuURI nutzen.

Hinweis: Ein SBC sendet per SIP-INVITE normalerweise immer nur eine Rufnummer ohne ";ext=xxxx" an den nächsten Hop.

Sorgen Sie einfach dafür, dass die LineURI einfach nur eine E.164-Nummer ist.

msRTCSIPLine, OnPremLineUri, LineURI und ADSync

Wenn Sie lokal noch Skype for Business nutzen oder von Skype for Business migrieren und die Rufnummern weiter im lokalen AD verwalten, dann ist natürlich interessant, welche Formen und Konflikte mit Teams passieren können. In Skype for Business wurde die Rufnummer in etwas der folgenden Form beim Benutzer im Feld "msRTCSIPLine" abgelegt:

Jon Doe    +1 555 1234567;ext=12
Jane Doe   +1 555 1234567;ext=13
Mike Maus  +1 555 1234567;ext=14

Wenn Sie keinen Skype for Business Server mehr haben und eine direkte Verwaltung in der Cloud möchten, müssen Sie erst das Feld "msRTCSIPLine" im lokalen AD leeren und ADSync dies in die Cloud replizieren lassen, ehe Sie die Konfiguration in Teams wieder herstellen können. Vorher blockiert Sie Teams mit folgendem Fehler:

Die Umstellung sollte aber gut geplant sein, damit die Nichterreichbarkeit kurz ist. Siehe dazu auch Teams Umstellung und SfB Hybrid to Cloud (TeamsOnly).

Aufgrund der ein oder anderen Probleme bei Kunden mit Rufnummern, speziell in den USA mit Extensions, habe ich im Januar 2023 eine Testserie gemacht, bei der ich im lokalen AD das Feld "msRTCSIPLine" gesetzt, mit ADSync in einen Tenant repliziert und im Ziel das Ergebnis kontrolliert habe.

Die Benutzer in Teams müssen natürlich eine "Teams Phone System"-Lizenzen haben, da ansonsten die Rufnummern nicht provisioniert werden.

Die Schreibweise mit dem ";Ext=xxx" sollten sie im Feld msRTCSIP-Line nicht mehr nutzen.

msRTCSIPLine Teams Status Beschreibung
<leer>

OK

Wie erwartet war keine Rufnummer in Teams. Ich hätte sie aber manuell setzen können.

tel:+495251304613

OK

Die On-Premises Rufnummer wurde korrekt übernommen.

tel:+495251304613;ext=613

OK

Auch dieses Format wurde korrekt übertragen. Die Anzeige in Teams unterscheidet sich etwas von dem Feldinhalt. Im Teams Adminportal wird die Extension in einer leicht anderen Schreibweise angezeigt. In der Teams PowerShell ist es aber wie gewohnt zu sehen:

PS C:\> Get-CsOnlineUser -Identity msxfaqdevu1@msxfaq.net | fl *lineuri

LineUri       : tel:+495251304613;ext=613
OnPremLineUri : tel:+495251304613;ext=613
tel:+495251304613;ext=12

OK

Auch eine von der Hauptnummer abweichende Extension ist natürlich erlaubt.

tel:+495251304613x13

Fail

"X" als Separator ist nicht in der Tel-URI erlaubt sondern nur in den AD-Feldern "Telephone Nummer" etc.

tel:ext=14

Fail

Extension alleine funktioniert auch nicht in der Tel-URI, obwohl es in den AD-Feldern "Telephone Nummer" etc. erlaubt ist.

tel:X15
 

Fail

X als Trennzeichen alleine funktioniert auch nicht in der Tel-URI, obwohl es in den AD-Feldern "Telephone Nummer" etc. erlaubt ist.

tel:+495251304615;extn616

oder

tel:+495251304615;extn=616

Fail

Weil im Default Dialplan auch ein "EXTN" erlaubt ist und das "=" optional sein soll, habe ich diese Schreibweise auch probiert. In der Teams PowerShell ist das auch angekommen:

PS C:\> Get-CsOnlineUser -Identity msxfaqdevu2@msxfaq.net | fl *lineuri

LineUri       : tel:+495251304615;extn616
OnPremLineUri : tel:+495251304615;extn616

Allerdings wird es im Teams Admin Portal etwas anders interpretiert. Obwohl die AD-Felder "Telephonenumber" leer sind, ist für Voice anscheinend keine Rufnummer zugewiesen aber beim Benutzer eine zusammengeführte Nummer angegeben.

"Get-CsPhoneNumberAssignment" hat auch keine zugewiesene Nummer angezeigt.

Zwei Benutzer mit gleicher Nummer und Extension:

User1:  tel:+4952513046131;ext=6131
User2:  tel:+4952513046131;ext=6131
Benutzer
User 1: +49 5251 3046131 ext. 6131
User 2: <leer>

Fai

Doppelte Rufnummern werden weder von ADSync noch im SyncError im AzureAD als Fehler aufgeführt!. Der zweite Benutzer bekommt einfach keine Nummer. Mit "Get-CsPhoneNumberAssignment" ist auch nur eine Zuweisung zu sehen.

Zwei Benutzer mit gleicher Nummer und unterschiedlicher Extension

User1:  tel:+4952513046131;ext=6131
User2:  tel:+4952513046131;ext=6132
Benutzer
User 1: +49 5251 3046131 ext. 6131
User 2: +49 5251 3046131 ext. 6132

OK

Das ist der Fall, wenn es wirklich keine "direkte Durchwahl" (DDI) gibt und eine Hauptnummer angerufen und dann über die Zentrale  (AA) die Nebenstelle erreicht wird.

Es muss dann natürlich einen AA geben, der auf die +4952513046131 ohne Extension reagiert

Zwei Benutzer unterschiedliche Nummer und gleiche Extension

User1:  tel:+4952513046131;ext=6131
User2:  tel:+4952513046132;ext=6131
Benutzer
User 1: +49 5251 3046131 ext. 6131
User 2: +49 5251 3046132 ext. 6131

OK

Die ist der Fall mit zwei Standorten und unterschiedlichen Hauptnummern. Sie können intern durchaus die gleichen "Durchwahlen" nutzen.

Entgegen der Beschreibungen zum Setzen einer Rufnummer direkt in Teams kann ich über ADSync einige Schreibweisen nicht nutzen.

Denken Sie daran: Änderungen im AD brauchen einigen Minuten, bis ADSync diese in die Cloud übertragen hat und dann wieder einige Zeit, bist diese bei Teams angekommen sind. Bei Änderungen von Rufnummern spricht Microsoft selbst von bis zu 48 Stunden:

Rufnummern und ADSync

Für die direkte Anzahl ist der Inhalt der LineURI relevant, welcher über die OnPremLineURI gefüllt wird, die ihrerseits bei aktivem ADSync aus dem lokalen Feld "msRTCSIPLine" gefüllt wird. Der Microsoft Teams Auto Attendant wertet aber nicht die LineURI aus, sondern vier andere Felder, die im AzureAD stehen. Wenn Sie den Benutzer durch ADSync replizieren lassen, dann sind die Felder "ReadOnly" im AzureAD und können nicht nur Set-MSOLUser beschrieben werden:

Set-MsolUser `
   -UserPrincipalName user1@msxfaq.net `
-PhoneNumber "+495251304613;ext=613"

set-MsolUser : Unable to update parameter. Parameter name: PHONENUMBER.
At line:1 char:1
+ set-MsolUser -UserPrincipalName user1@msxfaq.net -PhoneNumbe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [Set-MsolUser], MicrosoftOnlineException
    + FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.PropertyNotSettableException,Microsoft.Online
   .Administration.Automation.SetUser

Andere Felder können hingegen auch beschrieben werden, selbst wenn das Objekt durch ADSync verwaltet wird wie z.B. "AlternateMobilePhones"

PS C:\> Get-MsolUser -UserPrincipalName user1@msxfaq.net | fl AlternateMobilePhones

AlternateMobilePhones               : {}

PS C:\> Set-MsolUser -UserPrincipalName user1@msxfaq.net -AlternateMobilePhones "+495251304613;ext=613"
PS C:\> Get-MsolUser -UserPrincipalName user1@msxfaq.net | fl AlternateMobilePhones

AlternateMobilePhones               : {+495251304613;ext=613}

PS C:\> Set-MsolUser -UserPrincipalName user1@msxfaq.net -AlternateMobilePhones ()

AlternateMobilePhones               : {}

Das Objekt ist also nicht komplett "ReadOnly" sondern nur die durch ADSync replizierten Felder. Das Feld "AlternateMobilePhones " ist für das Extension Dialing aber auch nicht weiter relevant, da es nicht ausgewertet wird.

Relevant für
Extension Dialing
Lokales AD ADSync AzureAD Set-AzureADUser Set-MSOLUUser

Ja

telephoneNumber

Ja

telephoneNumber

-TelephoneNumber

-PhoneNumber

Ha

HomePhone

Ja

HomePhone

Ja

mobile

Ja

mobile

-mobile

-MobilePhone

Ja

otherTelephone

Ja

otherTelephone

 

 

Nein

 

Nein

AlternateMobilePhones

-AlternateMobilePhones

Nein

facsimiletelephonenumber

Ja

facsimiletelephonenumber

-facsimiletelephonenumber

-Fax

Nein

otherFacsimileTelephone

Ja

otherFacsimileTelephone

 

 

Nein

otherHomePhone

Ja

otherHomePhone

 

 

Nein

telephoneAssistant

Ja

telephoneAssistant

 

 

Sowohl per Set-AzureADUser als auch per Set-MSOLUser können Sie zwei der vier von Extension Dialing genutzten Felder, "TelephoneNumber" und "MobilePhone" setzen. "AlternateMobilePhones" ist das einzige Feld, welches nicht per ADSync abgeglichen und direkt in der Cloud gesetzt werden kann. Es hat aber keine Funktion beim Extension Dialing.

Mit ADSync sollten Sie daher im lokalen AD ein Feld korrekt mit der Extension befüllen, damit ein AA auch die Durchwahl finden und das Gespräch vermitteln kann.

Zusammenfassung

Die Adressierung von Personen über eine "Extension Dialing" ist für viele europäische Teams-Administrator immer noch zumindest ungewöhnlich aber gerade in den USA durchaus noch üblich. In Europa kennen wir doch eher da Verfahren einer direkten "Durchwahl" (Direct Inward Dialing) ohne eine "Anrufzentrale" (Auto Attendant). Sie müssen dennoch die Besonderheiten kennen, wenn ihre Firma auch internationale Standorte in Microsoft Teams einbinden will und Sie die Rufnummern dazu verwalten.

Aber selbst in einer Umgebung ohne die Notwendigkeit nach einer "Extension Dialing"-Funktion kann es dennoch spezielle Einsatzfälle geben, bei denen auch hier eine Extension sinn macht. Niemand hindert mich daran, die Nebenstelle meiner Rufnummer als Durchwahl mit einem ";ext=<Durchwahl>" dranzuhängen. Wenn Sie mit einer Vermittlungsstelle arbeiten, die anhand der Durchwahl einen Anruf weiter leitet, dann müssen Sie irgendwie der Software ja mitteilen, was eine Durchwahl ist. Woher sonst soll der AA aus einer Nummer wie +495251304613 denn wissen, dass 613 die Durchwahl ist und nicht nur die 13 oder sogar die 4613? Denken Sie aber daran, dass Teams nur die Schreibweise "+<Rufnummer>;ext=<Durchwahl>" versteht und sie hier nicht mit "X" oder "EXTN" oder ohne "=" arbeiten dürfen.

Überlegen Sie mal, ob sie nicht generell bei allen Rufnummern auch die Extension mit konfigurieren.

Weitere Links