Teams-Anruf geht nicht raus: Rufweg prüfen

von

Teams-Anruf geht nicht raus: Rufweg prüfen

Sieben Stationen vom Benutzer bis zum SBC

Teams-Anruf geht nicht raus: den Rufweg Schritt für Schritt prüfen

Sieben Stationen einer Teams-Anrufkette von Benutzer bis SBC, Station 6 Voice Route rot markiert mit Fehler „Kein Muster pass

WISSEN

Alles zur Teams-Telefonie: Direct Routing, SBC, Wählpläne, Notruf, Sprachqualität und Betrieb an einem Ort.

› Teams-Telefonie

BERATUNG

Der Rufweg ist verknotet und keiner weiß mehr, warum? Wir entwirren Wählpläne, Routing und SBC gemeinsam mit dir.

› Beratung zur Teams-Telefonie

SCHULUNG

Für Admins, die Wählplan, Voice Routing und SBC selbst sicher betreiben und Fehler eigenständig finden wollen.

› Schulung Teams-Telefonie

 

Montag, 8:12 Uhr. Das erste Ticket des Tages: „Ich kann nicht raus telefonieren.“ Um 8:19 Uhr das zweite: „Teams sagt, der Anruf konnte nicht abgeschlossen werden.“ Um 8:31 Uhr ruft der Vertriebsleiter persönlich an, natürlich vom Handy, weil Teams ja nicht geht, und fragt, ob man „die alte Anlage nicht einfach wieder einstecken“ könne. Kann man nicht. Die steht seit drei Monaten beim Wertstoffhof, und das ist auch gut so.

Wenn ein Teams-Anruf nicht rausgeht, ist das selten ein Mysterium. Zwischen dem Klick auf „Anrufen“ und dem Klingeln beim Gegenüber liegen genau sieben Stationen, und an jeder davon kann der Anruf sterben: Benutzer, Wählplan, Normalisierung, Voice Routing Policy, PSTN Usage, Voice Route und SBC. Wer diese Kette der Reihe nach prüft, findet den Fehler in der Regel in einer halben Stunde. Wer wild herumklickt, findet ihn auch, aber erst nachdem er drei neue eingebaut hat.

Dieser Beitrag ist die Prüfanleitung für genau diese Kette. Er setzt voraus, dass deine Teams-Telefonie grundsätzlich mit Direct Routing läuft. Wie du das aufbaust, steht in Teams Direct Routing einrichten; die Gesamtübersicht über das Thema findest du auf der Seite Teams-Telefonie. Hier geht es ausschließlich um das Symptom „teams anruf geht nicht raus“ und den kürzesten Weg zur Ursache.

FAKTEN · Worum es hier geht

Betrachtet wird Teams Phone mit Direct Routing, also mit eigenem Session Border Controller. Alle Beispiele nutzen den erfundenen Tenant Contoso mit Standorten in Frankfurt, Köln, Berlin, Hamburg und München, Rufnummern im Muster +49 69 555 0100 und SBCs wie sbc1.contoso.com.

Alle PowerShell-Befehle in der Diagnose sind lesend (Get- und Test-Cmdlets aus dem Modul MicrosoftTeams). Sie ändern nichts an deinem Tenant. Geschrieben wird erst im Abschnitt Behebung, und dort jeweils mit Rückweg.

 

Das Symptom: wie „geht nicht raus“ im Alltag klingt

„Geht nicht raus“ ist für Anwender eine Sammelbeschreibung für alles, was nach dem Wählen nicht zu einem Gespräch führt. Für dich als Admin ist die genaue Formulierung Gold wert, denn sie verrät oft schon, an welchem Glied der Kette es hakt. Frag also nach, bevor du suchst: Wer genau, welche Nummer genau, seit wann genau und was steht auf dem Bildschirm?

Was der Helpdesk hört

Was dahinterstecken kann

Erster Verdacht

„Bei mir gibt es gar kein Wählfeld.“

Benutzer ist nicht für Telefonie freigeschaltet, Lizenz oder Nummer fehlt

Station 1: Benutzer

„Ich kann intern telefonieren, aber nicht nach draußen.“

Keine passende Voice Routing Policy, Rückfall auf die globale Richtlinie

Stationen 1 und 4

„Handynummern gehen, Festnetz nicht.“ oder umgekehrt

Ein Routenmuster deckt nur einen Teil der Nummern ab

Station 6: Voice Route

„Mit 0 davor geht es nicht, mit +49 schon.“

Normalisierung fehlt oder setzt das Ergebnis falsch zusammen

Stationen 2 und 3

„Seit heute Morgen geht bei keinem mehr was.“

SBC deaktiviert, Zertifikat abgelaufen, OPTIONS fehlen

Station 7: SBC

„In Hamburg geht es, in München nicht.“

Standortspezifische Policy, Usage oder Route fehlt oder zeigt auf den falschen SBC

Stationen 4 bis 6

„Es klingelt kurz, dann ist die Leitung tot.“

Anruf erreicht den SBC, scheitert dahinter beim Provider

Station 7 und dahinter

 

Merke dir den Unterschied zwischen „der Anruf geht nicht raus“ und „der Anruf geht raus, aber man hört nichts“. Das zweite ist ein Medienproblem und gehört zu einer ganz anderen Fehlerklasse. Eine Einordnung aller typischen Fehlerbilder findest du in Teams-Telefonie Probleme: die zehn häufigsten Ursachen.

Wie der Fehler entsteht: sieben Stationen bis zum Amt

Ein abgehender Anruf bei Direct Routing durchläuft eine feste Kette. Teams wertet sie in dieser Reihenfolge aus, und genau in dieser Reihenfolge solltest du auch prüfen:

Benutzer › Wählplan › Normalisierung › Voice Routing Policy › PSTN Usage › Voice Route › SBC

Prüfkette für abgehende Direct-Routing-Anrufe: sieben Stationen mit typischen Fehlerpunkten und zugehörigen PowerShell-Cmdlet

Kurz zu den Gliedern, nur so weit, wie es für die Fehlersuche nötig ist:

Benutzer: Er braucht eine Lizenz mit Teams Phone, muss für Enterprise Voice aktiviert sein und eine Rufnummer vom Typ Direct Routing haben. Fehlt etwas davon, kommt der Anruf gar nicht erst in die Routing-Logik.

Wählplan: Jeder Benutzer hat einen effektiven Wählplan. Er setzt sich laut Microsoft immer aus dem Dienst-Wählplan des Landes (abgeleitet aus der Usage Location) und entweder dem globalen Tenant-Wählplan oder einem zugewiesenen Benutzer-Wählplan zusammen. Die Regeln des Tenants haben Vorrang vor denen des Dienstes.

Normalisierung: Die Regeln im Wählplan übersetzen das, was jemand eintippt, in ein einheitliches Format, typischerweise E.164 mit +. Teams geht die Liste von oben nach unten durch und nimmt die erste passende Regel.

Voice Routing Policy: Ein Container mit einer geordneten Liste von PSTN Usages. Hat ein Benutzer keine eigene Policy, gilt die globale.

PSTN Usage: Ein Etikett, das Policies und Voice Routes miteinander verbindet. Die Reihenfolge der Usages in der Policy entscheidet: Passt in einer Usage eine Route, werden die folgenden nicht mehr ausgewertet.

Voice Route: Ein regulärer Ausdruck (Number Pattern), eine Priorität und eine Liste von Gateways. Die normalisierte Nummer muss auf das Muster passen.

SBC: Das Online-PSTN-Gateway. Es muss im Tenant angelegt, aktiviert und aus Sicht von Microsoft gesund sein: TLS-Verbindung steht, SIP OPTIONS kommen an, Zertifikat ist gültig.

FAKTEN · Was laut Microsoft-Dokumentation gilt

Normalisierungsregeln werden von oben nach unten durchlaufen, die erste passende Regel gewinnt. Microsoft empfiehlt, dass alle Regeln ein Ergebnis mit führendem + liefern, weil ein Ergebnis ohne + erneut durch die Tenant- und Länderregeln normalisiert wird.

Ein Tenant kann bis zu 1.000 Tenant-Wählpläne haben. Clients erhalten ihren Wählplan über die Bereitstellung bei der Anmeldung.

Die PSTN Usages einer Voice Routing Policy werden in ihrer Reihenfolge ausgewertet. Die Gateways innerhalb einer Voice Route werden in zufälliger Reihenfolge versucht. Passt keine Route und hat der Benutzer keinen Calling Plan, wird der Anruf verworfen.

Enthält die gewählte Nummer eine Durchwahl mit ;ext=, wird das Routenmuster nur auf den Teil ohne Durchwahl angewendet.

 

Das Gemeine an dieser Kette: Sie scheitert fast immer still. Teams zeigt dem Anwender eine freundlich-nichtssagende Meldung, und im Admin Center leuchtet nichts rot, solange der SBC selbst gesund ist. Ein Anruf ohne passende Route ist aus Sicht von Teams kein Defekt, sondern korrekt angewendete Konfiguration. Die Konfiguration ist halt nur falsch.

Diagnose: die Kette Glied für Glied prüfen

Vorher: eingrenzen, wer betroffen ist

Bevor du das erste Cmdlet tippst, beantworte eine Frage: Wie viele sind betroffen? Die Antwort sagt dir, ob du die Kette von vorn oder von hinten aufrollst. Ein ausgefallener SBC trifft alle gleichzeitig, ein falscher Wählplan meist nur einen Standort oder einzelne Benutzer.

Entscheidungsbaum: Ein Anruf-Fehler betrifft alle Benutzer, einen Standort, einen einzelnen Benutzer oder nur bestimmte Numme

Für die folgenden Schritte nehmen wir einen konkreten Fall: Lena Koch (lena.koch@contoso.com) sitzt in Frankfurt und kann den Kunden in Köln unter 0221 5550123 nicht erreichen. Verbinde dich zuerst mit dem Tenant:

Import-Module MicrosoftTeams

Connect-MicrosoftTeams

$upn = "lena.koch@contoso.com"

 

Station 1: Benutzer

Was schiefgehen kann: Die Lizenz mit Teams Phone fehlt oder ist erst seit Minuten zugewiesen, Enterprise Voice ist aus, die Rufnummer fehlt oder ist nicht vom Typ Direct Routing, die Usage Location steht auf dem falschen Land.

Get-CsOnlineUser -Identity $upn |

Select-Object DisplayName, UsageLocation, EnterpriseVoiceEnabled, LineUri,

FeatureTypes, OnlineVoiceRoutingPolicy, TenantDialPlan

 

Get-CsPhoneNumberAssignment -AssignedPstnTargetId $upn |

Select-Object TelephoneNumber, NumberType, ActivationState

 

Erwartet wird: EnterpriseVoiceEnabled ist True, LineUri enthält die Nummer im E.164-Format (etwa tel:+49695550142), unter FeatureTypes taucht der Telefonie-Eintrag auf (in der Regel PhoneSystem), und NumberType ist DirectRouting. Die Usage Location sollte DE sein, denn sie bestimmt den Dienst-Wählplan, der im effektiven Wählplan steckt. Merk dir außerdem die Werte von OnlineVoiceRoutingPolicy und TenantDialPlan, du brauchst sie gleich. Ist eines der Felder leer, gilt die globale Variante.

Im Teams Admin Center siehst du dasselbe unter Benutzer › Benutzer verwalten › Lena Koch, Registerkarten Konto und Richtlinien. Fehlt das Wählfeld im Client komplett, lies weiter in Kein Wählfeld in Teams: Lizenz, Rufnummer und Enterprise Voice prüfen.

Station 2: Wählplan

Was schiefgehen kann: Der Benutzer hat keinen Benutzer-Wählplan und landet beim globalen, der für Frankfurt nicht passt. Oder er hat den Wählplan eines anderen Standorts, weil er über eine Gruppenzuweisung kommt, an die niemand mehr gedacht hat.

Get-CsEffectiveTenantDialPlan -Identity $upn |

Select-Object -ExpandProperty NormalizationRules |

Format-Table Name, Pattern, Translation -AutoSize

 

Get-CsUserPolicyAssignment -Identity $upn -PolicyType TenantDialPlan

 

Die erste Abfrage zeigt dir den effektiven Wählplan, also die Regeln, die tatsächlich gelten, in der Reihenfolge, in der Teams sie prüft. Die zweite zeigt, ob der Wählplan direkt oder über eine Gruppe zugewiesen ist. Gibt es keine Zuweisung, gilt der globale Tenant-Wählplan, ergänzt um den deutschen Dienst-Wählplan.

Im Teams Admin Center findest du die Wählpläne unter Sprache › Wählpläne. Dort steht beim Bearbeiten eines Wählplans auch der Bereich Wählplan testen, in den du eine Nummer eingeben kannst.

Station 3: Normalisierung

Was schiefgehen kann: Keine Regel passt, und die Nummer geht unverändert weiter. Eine Regel passt, liefert aber ein Ergebnis ohne +. Eine zu großzügige Regel steht oben und frisst Nummern, die für eine spätere Regel gedacht waren. Der Klassiker unter den Klassikern: eine dreistellige Durchwahlregel, die 110 und 112 gleich mit erledigt.

Test-CsEffectiveTenantDialPlan -Identity $upn -DialedNumber "02215550123"

Test-CsEffectiveTenantDialPlan -Identity $upn -DialedNumber "112"

Test-CsEffectiveTenantDialPlan -Identity $upn -DialedNumber "015123456789"

 

Die Ausgabe enthält die übersetzte Nummer (TranslatedNumber) und die Regel, die gegriffen hat (MatchingRule). Für unseren Fall erwartest du +492215550123 und eine Regel für nationale Rufnummern. Prüfe immer mindestens vier Klassen: Ortsnetz, national, Mobilfunk und Notruf. Für Ausland eine fünfte.

Vergleich zweier Wählpläne: Durchwahlregel oben leitet 112 falsch nach Frankfurt um, Notrufregel oben lässt 112 unverändert.

Zum Vergleich ein Satz fachlich sauberer Regeln für den Wählplan DP-Frankfurt ohne Amtsholung. Die Reihenfolge ist Absicht:

Nr.

Zweck

Muster

Ersetzung

Beispiel

1

Notruf unverändert

^(11[02])$

$1

112 › 112

2

Durchwahl dreistellig

^(1\d{2})$

+49695550$1

142 › +49695550142

3

Ortsnetz Frankfurt

^([2-9]\d{4,7})$

+4969$1

5550199 › +49695550199

4

National und Mobil

^0([1-9]\d{5,13})$

+49$1

02215550123 › +492215550123

5

International

^00([1-9]\d{6,14})$

+$1

0043155501 › +43155501

 

Regel 1 steht vor Regel 2, damit 110 und 112 nie zur Durchwahl werden. Wer Regel 2 lieber selbst absichert, schreibt sie als ^(1(?!1[02])\d{2})$: Der negative Lookahead schließt 110 und 112 aus, 111 oder 142 passen weiterhin. Regel 4 verlangt nach der 0 eine Ziffer von 1 bis 9, deshalb kann sie internationale Nummern mit 00 nicht versehentlich erwischen. Arbeitet ihr mit Amtsholung 0, sieht der Wählplan anders aus; das steht in Wählplan mit Amtsholung 0 in Teams richtig bauen. Weitere typische Regelfehler sammelt Normalisierungsregeln in Teams: typische Fehler und wie du sie findest.

WARNUNG · Notruf niemals umbiegen

Prüfe 110 und 112 bei jeder Änderung am Wählplan mit Test-CsEffectiveTenantDialPlan. Ein Notruf, der als +49695550112 bei einer Durchwahl in Frankfurt landet, ist kein Schönheitsfehler. Wähle die Notrufnummern zum Testen nicht einfach im Live-Betrieb, sondern prüfe Normalisierung und Routing lesend.

Wie ein echter Test sauber organisiert wird, steht in Notruf in Teams testen, ohne die Leitstelle zu verärgern; die Grundlagen findest du in Notruf in Microsoft Teams konfigurieren.

 

Station 4: Voice Routing Policy

Was schiefgehen kann: Der Benutzer hat keine eigene Policy und fällt auf die globale zurück, die keine oder die falschen Usages enthält. Oder er hat eine Policy, die für einen anderen Standort gebaut wurde. Oder die Policy existiert, aber ihre Usage-Liste ist leer.

$vrp = (Get-CsOnlineUser -Identity $upn).OnlineVoiceRoutingPolicy

if ([string]::IsNullOrEmpty("$vrp")) { $id = "Global" } else { $id = "Tag:$vrp" }

$policy = Get-CsOnlineVoiceRoutingPolicy -Identity $id

$policy | Select-Object Identity, OnlinePstnUsages

 

Get-CsUserPolicyAssignment -Identity $upn -PolicyType OnlineVoiceRoutingPolicy

 

Steht bei Identity Global, obwohl Lena eigentlich die Policy VRP-DE-National haben sollte, hast du deinen Täter. Dieses Muster ist so häufig, dass es einen eigenen Beitrag hat: Teams-Benutzer fällt auf die globale Richtlinie zurück. Microsoft warnt in der Dokumentation übrigens ausdrücklich davor, die globale Policy unbedacht zu befüllen, weil dann alle sprachfähigen Benutzer sie erben, auch solche mit Calling Plan oder Operator Connect.

Im Teams Admin Center: Sprache › Richtlinien für das Sprachrouting. Die Reihenfolge der PSTN Usages in der Policy siehst du dort ebenfalls, und sie ist kein Kosmetikdetail.

Station 5: PSTN Usage

Was schiefgehen kann: Eine Usage steht in der Policy, aber keine Voice Route ist ihr zugeordnet. Eine Usage wurde angelegt, aber nie in eine Policy aufgenommen. Oder die Reihenfolge stimmt nicht: Eine Usage mit einer Route .* steht vorn und schluckt alles, bevor die eigentlich gemeinte Usage drankommt.

(Get-CsOnlinePstnUsage).Usage

 

$routes = Get-CsOnlineVoiceRoute

foreach ($u in $policy.OnlinePstnUsages) {

$n = @($routes | Where-Object { $_.OnlinePstnUsages -contains $u }).Count

[pscustomobject]@{ Usage = $u; Routen = $n }

}

 

PSTN Usages sind eine tenantweite Liste unter der Identity Global. Die Schleife zählt für jede Usage aus Lenas Policy, wie viele Voice Routes daran hängen. Eine Null ist ein Befund: Diese Usage führt ins Leere. Das allein bricht den Anruf noch nicht ab, weil Teams zur nächsten Usage weitergeht. Steht aber nur diese eine Usage in der Policy, ist hier Schluss.

Im Teams Admin Center: Sprache › Direct Routing, oben rechts PSTN-Nutzungsdatensätze verwalten.

Station 6: Voice Route

Was schiefgehen kann: Das Muster passt nicht auf die normalisierte Nummer, etwa weil es ein + erwartet, das die Normalisierung nicht liefert, oder umgekehrt. Ein Tippfehler im Regex. Eine Route mit .* und besserer Priorität überdeckt die spezifische Route. Oder die Route hat keine Gateways eingetragen.

Ablauf von Voice Routing Policy über PSTN Usages und Routen bis zu den SBC-Gateways, mit Priorität und Rückfallroute.

Die folgende Abfrage spielt den Rufweg für eine Nummer nach. Sie nutzt den -match-Operator von PowerShell, der wie Teams mit .NET-Regex arbeitet. Damit siehst du für jede Usage der Policy in Prioritätsreihenfolge, welche Route trifft:

$nummer = "+492215550123" # TranslatedNumber aus Station 3

foreach ($u in $policy.OnlinePstnUsages) {

$routes | Where-Object { $_.OnlinePstnUsages -contains $u } |

Sort-Object Priority | ForEach-Object {

[pscustomobject]@{

Usage = $u

Route = $_.Identity

Prio = $_.Priority

Muster = $_.NumberPattern

Treffer = ($nummer -match $_.NumberPattern)

Gateways = $_.OnlinePstnGatewayList -join ", "

}

}

} | Format-Table -AutoSize

 

Die erste Zeile mit Treffer gleich True in der obersten Usage, die überhaupt einen Treffer hat, ist die Route, die Teams nimmt. Gibt es nirgends ein True, hast du die Ursache: Für diese Nummer existiert in Lenas Policy keine Route. Typische Muster für Contoso sehen so aus:

Route

Muster

Deckt ab

DE-Notruf

^(110|112)$

Notruf, sofern die Normalisierung 110 und 112 unverändert lässt

DE-National

^\+49(?!900|137|180)[1-9]\d{4,13}$

Festnetz und Mobilfunk in Deutschland, ohne 0900, 0137 und 0180

DE-Mobil (falls getrennt)

^\+491[5-7]\d{8,9}$

Deutsche Mobilfunknummern 015x, 016x, 017x

International

^\+(?!49)[1-9]\d{6,14}$

Alle Ziele außerhalb Deutschlands

 

Zwei Fehler sehe ich in Projekten besonders oft. Erstens: ^\+490\d+ als Muster für nationale Nummern. In E.164 steht nach +49 nie eine 0, die Route trifft also nie. Zweitens: ein Muster ohne ^ und $, das plötzlich auch Nummern trifft, die es nicht treffen sollte, und so eine spezifischere Route mit schlechterer Priorität überdeckt. Mehr zu Regex, Priorität und überdeckten Routen steht in Teams Voice Route greift nicht: Regex, Priorität und überdeckte Routen, die Reihenfolge-Logik im Detail in Voice Routing Policy, PSTN Usage und Voice Route: Reihenfolge verstehen.

TIPP · Gleiche Gegenprobe für den Notruf

Lass dieselbe Abfrage mit $nummer = "112" laufen, beziehungsweise mit dem, was Test-CsEffectiveTenantDialPlan aus 112 macht. Trifft die Notrufroute nicht oder trifft zuerst eine allgemeine Route, gehört das an den Anfang deiner Liste, nicht ans Ende.

 

Station 7: SBC

Was schiefgehen kann: Das Gateway in der Route ist deaktiviert oder gar nicht angelegt, etwa wegen eines Tippfehlers im FQDN. Der SBC sendet keine SIP OPTIONS mehr, die TLS-Verbindung steht nicht, das Zertifikat ist abgelaufen oder die Root-CA auf dem SBC passt nicht mehr zu den Zertifikaten von Microsoft.

Get-CsOnlinePSTNGateway |

Select-Object Identity, Enabled, SipSignalingPort, SendSipOptions, MaxConcurrentSessions

 

$gw = (Get-CsOnlinePSTNGateway).Identity

foreach ($r in $routes) {

foreach ($g in $r.OnlinePstnGatewayList) {

if ($g -notin $gw) { "Route $($r.Identity): Gateway $g ist nicht angelegt" }

}

}

 

Get-CsOnlinePSTNGateway zeigt die Konfiguration, aber nicht den Zustand. Den siehst du im Teams Admin Center unter Sprache › Direct Routing: Dort stehen je SBC der TLS-Verbindungsstatus, der Status der SIP OPTIONS und der Gesamtstatus. Laut Microsoft warnt das Dashboard auch, wenn ein Zertifikat innerhalb von 30 Tagen abläuft. Steht dort bei SIP OPTIONS eine Warnung oder ist der SBC inaktiv, schau in Teams SBC inaktiv: OPTIONS-Ping und Verbindungsstatus prüfen. Kam der Fehler direkt nach einem Zertifikatswechsel, lies SIP 504 nach dem Zertifikatswechsel: Root-CAs am SBC aktualisieren.

Hängen mehrere Gateways in einer Route, probiert Teams sie in zufälliger Reihenfolge. Ein einzelner kranker SBC fällt deshalb oft nur als „jeder zweite Anruf geht nicht“ auf. Warum die Ausweichroute dann manchmal trotzdem nicht greift, erklärt SBC-Failover in Teams funktioniert nicht.

AUS DER PRAXIS · Die Grenzlinie am eigenen SBC

Für meine eigene Telefonie betreibe ich einen anynode-SBC, und dort habe ich mir eine Regel angewöhnt, die bei jeder Fehlersuche Zeit spart: Zuerst ins Protokoll des SBC schauen, ob das INVITE von Teams überhaupt ankommt. Kommt keins an, liegt der Fehler auf der Teams-Seite, also irgendwo in den Stationen 1 bis 6 oder in der Verbindung zwischen Microsoft und dem SBC. Kommt es an, ist die Teams-Konfiguration erledigt, und der Rest spielt sich im SBC und beim Provider ab: Nummernformat Richtung Trunk, gesperrte Ziele, Kanalanzahl.

Diese eine Frage teilt den Suchraum in zwei Hälften. Mehr Effizienz bekommt man in der Fehlersuche selten für so wenig Aufwand.

 

Hinter dem SBC: wenn Teams alles richtig gemacht hat

Erreicht der Anruf den SBC und scheitert dahinter, liefert dir der SIP-Antwortcode den nächsten Hinweis. Im Teams Admin Center findest du unter Analysen und Berichte den Nutzungsbericht für PSTN mit einer Registerkarte für Direct Routing, der je Anruf den finalen SIP-Code ausweist. Was die einzelnen Codes bedeuten, steht in SIP-Fehlercodes in Teams Direct Routing verstehen. Wer mehr als einzelne Anrufe auswerten will, landet bei Teams-Anrufprotokolle auswerten: Call Records statt Bauchgefühl. Und wenn der Anruf zwar rausgeht, beim Gegenüber aber die falsche Nummer erscheint und deshalb abgelehnt wird, hilft Rufnummernanzeige in Teams falsch: CLIP, Caller ID Policy und SBC.

Die ganze Kette auf einen Blick

WERKZEUG · So findet es der Teams-Telefonie Diagnostiker

Der Rufweg-Simulator spielt genau die Kette dieses Beitrags nach: Du wählst einen Benutzer und gibst eine Nummer ein, und der Simulator zeigt Station für Station den effektiven Wählplan, die greifende Normalisierungsregel mit dem Ergebnis, die Voice Routing Policy, die PSTN Usages in ihrer Reihenfolge, die passende Voice Route und das Gateway. Die Station, an der der Anruf scheitert, ist markiert, zum Beispiel eine Usage ohne Route oder ein deaktiviertes Gateway.

Für den Blick auf den gesamten Bestand gibt es die Routing-Landkarte, die Policies, Usages, Routen und Gateways nebeneinanderstellt und auffällige Elemente hervorhebt. Gefundene Probleme erscheinen als Befunde mit Prüffall, sodass du nachvollziehen kannst, warum etwas als Fehler gilt.

Der Teams-Telefonie Diagnostiker lässt sich 15 Tage kostenlos testen.

› Teams-Telefonie Diagnostiker

 

Routing-Landkarte mit Policies, PSTN Usages, Voice Routes und Gateways; kritische Elemente sind rot, auffällige gelb markiert
Die Routing-Landkarte stellt Voice Routing Policies, PSTN Usages, Voice Routes und Gateways nebeneinander und markiert kritische und auffällige Elemente (Demo-Daten).

Behebung: reparieren, aber mit Rückweg

Jetzt wird geschrieben. Und damit beginnt der Teil, in dem man aus einem Fehler zwei machen kann. Die wichtigste Regel deshalb vorab: Erst sichern, dann ändern, dann mit denselben Nummern testen wie vorher.

WICHTIG · Vor jeder Änderung sichern

Exportiere den aktuellen Stand, bevor du irgendetwas anfasst, zum Beispiel mit Get-CsOnlineVoiceRoute | Export-Clixml, Get-CsOnlineVoiceRoutingPolicy | Export-Clixml, Get-CsTenantDialPlan | Export-Clixml und (Get-CsOnlinePstnUsage).Usage | Export-Clixml in einen Ordner mit Datum. Notiere bei Benutzeränderungen die bisher zugewiesenen Richtlinien. Damit ist der Rollback eine Abschrift und keine Gedächtnisübung.

 

Befund

Behebung

Rollback

Benutzer ohne Enterprise Voice oder Nummer

Set-CsPhoneNumberAssignment -Identity <UPN> -PhoneNumber +49695550142 -PhoneNumberType DirectRouting

Remove-CsPhoneNumberAssignment für diese Nummer

Falscher oder fehlender Benutzer-Wählplan

Grant-CsTenantDialPlan -Identity <UPN> -PolicyName DP-Frankfurt

Grant-CsTenantDialPlan mit dem vorherigen Namen oder $null

Regel in falscher Reihenfolge oder zu großzügig

Regel im Teams Admin Center verschieben oder per Set-CsTenantDialPlan anpassen, danach Test-CsEffectiveTenantDialPlan mit allen Nummernklassen

Regelsatz aus dem Export zurückschreiben

Rückfall auf die globale Voice Routing Policy

Grant-CsOnlineVoiceRoutingPolicy -Identity <UPN> -PolicyName VRP-DE-National

Grant-CsOnlineVoiceRoutingPolicy mit vorherigem Namen oder $null

Usage fehlt in der Policy oder steht falsch

Set-CsOnlineVoiceRoutingPolicy -Identity VRP-DE-National -OnlinePstnUsages @{Replace="DE-Notruf","DE-National","International"}

Dieselbe Zeile mit der alten Liste aus dem Export

Route passt nicht oder hat kein Gateway

Set-CsOnlineVoiceRoute -Identity DE-National -NumberPattern <korrigiertes Muster> oder -OnlinePstnGatewayList sbc1.contoso.com, sbc2.contoso.com

Altes Muster und alte Gateway-Liste aus dem Export setzen

Gateway deaktiviert

Ursache klären, dann Set-CsOnlinePSTNGateway -Identity sbc1.contoso.com -Enabled $true

-Enabled $false

 

Ändere immer nur eine Sache auf einmal und teste danach. Wer gleichzeitig Wählplan, Route und Policy umbaut, weiß hinterher nicht, welche der drei Änderungen das Problem gelöst hat, und welche zwei neue verursacht haben. Bei Änderungen am Wählplan rechne damit, dass Clients die neuen Regeln erst nach erneuter Bereitstellung erhalten; ein Ab- und Anmelden im Teams-Client beschleunigt das beim Testen.

WARNUNG · Kein .* als schnelle Lösung

Die Versuchung ist groß, eine Route mit dem Muster .* an alle Gateways zu hängen und in jede Policy zu packen. Dann geht der Anruf zwar raus, aber auch jeder andere: Sonderrufnummern, Auslandsziele, Premium-Dienste. Microsoft nennt .* in der Dokumentation als Möglichkeit, alle Anrufe an denselben SBC zu schicken. Als Pflaster für eine kaputte Routingstruktur taugt es nicht, und die Rechnung des Providers für 0900-Nummern ist nicht schwarzhumorig, sondern einfach schwarz.

 

Wenn du einen Standort ohnehin neu aufbaust, lohnt sich ein Blick auf Konflikte mit dem Bestand, bevor du anlegst: Zeigt eine neue Route auf ein deaktiviertes Gateway oder hat sie dasselbe Muster wie eine bestehende Route, ist das besser vorher bekannt als nach dem ersten Helpdesk-Anruf.

Routing-Assistent des Teams-Telefonie Diagnostikers mit Eingabefeldern für Standort und SBCs sowie zwei angezeigten Konflikte
Im Routing-Assistenten siehst du vor dem Anlegen, welche Konflikte eine neue Route mit dem Bestand hat, etwa ein deaktivierter SBC (Demo-Daten).

Vorbeugung: damit die Kette nicht wieder reißt

Die meisten Rufwegfehler entstehen nicht beim Aufbau, sondern danach: ein neuer Standort, eine schnell angelegte Route, ein Kollege, der „nur mal kurz“ die Reihenfolge der Usages geändert hat. Ein paar Gewohnheiten verhindern das:

Testnummernliste: Pflege je Standort eine kurze Liste mit Ortsnetz, national, Mobil, Ausland, 110 und 112. Nach jeder Änderung läuft sie durch Test-CsEffectiveTenantDialPlan und die Routenabfrage aus Station 6.

Benutzer nie ohne Policy: Weise Wählplan und Voice Routing Policy bei der Einrichtung explizit zu, direkt oder über Gruppen mit klarer Rangfolge. Ein Benutzer, der auf Global fällt, ist ein Befund, kein Zufall.

Ergebnis immer mit +: Jede Normalisierungsregel liefert E.164 mit +. So gilt die Empfehlung von Microsoft, und jedes Routenmuster kann auf ^\+ aufbauen.

Muster immer verankert: Jedes Routenmuster beginnt mit ^ und endet mit $. Ausnahmen werden dokumentiert.

Namenskonvention: Policies, Usages, Routen und Wählpläne folgen einem Schema wie VRP-DE-National, DE-National, DP-Frankfurt. Wer im Teams Admin Center auf „Test2-neu-final“ stößt, weiß, dass hier etwas schiefgehen wird.

SBC-Zustand beobachten: Schau regelmäßig in die Direct-Routing-Übersicht und reagiere auf Zertifikatswarnungen, bevor sie zum Ausfall werden.

Änderungen festhalten: Exportiere den Stand regelmäßig und vergleiche ihn mit dem vorherigen. Was sich unbemerkt verändert hat, ist bei der nächsten Störung der erste Verdächtige.

Wie man Abweichungen zwischen zwei Ständen systematisch findet, beschreibt Konfigurationsdrift in der Teams-Telefonie erkennen. Wenn du dein Team gezielt darauf vorbereiten willst, die Kette selbst zu prüfen und sauber zu ändern, ist die Schulung Teams-Telefonie der passende Rahmen. Ist der Bestand über die Jahre so verwachsen, dass niemand mehr durchblickt, hilft eine Beratung zur Teams-Telefonie, die Struktur einmal geordnet neu aufzusetzen.

FAQ: häufige Fragen zum Teams-Anruf, der nicht rausgeht

Warum geht mein Teams-Anruf nicht raus, obwohl intern alles funktioniert?

Interne Anrufe zwischen Teams-Benutzern brauchen weder Voice Routing Policy noch Voice Route. Für externe Anrufe über Direct Routing muss die Kette bis zum SBC vollständig sein. Am häufigsten fehlt eine passende Policy, weil der Benutzer auf die globale zurückfällt, oder kein Routenmuster passt auf die normalisierte Nummer.

Wie finde ich heraus, welche Normalisierungsregel bei einer Nummer greift?

Mit Test-CsEffectiveTenantDialPlan -Identity <UPN> -DialedNumber <Nummer>. Die Ausgabe zeigt die übersetzte Nummer und die Regel, die gegriffen hat. Im Teams Admin Center gibt es beim Bearbeiten eines Wählplans zusätzlich den Bereich zum Testen.

Was passiert, wenn keine Voice Route auf die Nummer passt?

Hat der Benutzer nur Teams Phone mit Direct Routing, wird der Anruf laut Microsoft verworfen. Hat er zusätzlich einen Calling Plan, geht der Anruf über den Calling Plan raus. Das kann einen Routingfehler verschleiern, weil der Anruf scheinbar funktioniert, nur eben über den falschen Weg.

Warum geht nur jeder zweite Anruf raus?

Ein typisches Zeichen dafür, dass in einer Voice Route mehrere Gateways hängen und eines davon nicht sauber arbeitet. Teams versucht die Gateways einer Route in zufälliger Reihenfolge. Prüfe den Zustand jedes SBC im Teams Admin Center unter Sprache › Direct Routing.

Muss ich die Muster meiner Voice Routes mit + schreiben?

Das Muster muss auf die Nummer passen, die nach der Normalisierung herauskommt. Liefern alle Regeln E.164 mit +, wie Microsoft es empfiehlt, beginnen die Routenmuster mit ^\+. Prüfe das konkret, indem du die TranslatedNumber aus Test-CsEffectiveTenantDialPlan gegen das Muster testest.

Ich habe den Wählplan korrigiert, aber der Anwender hat immer noch das alte Verhalten. Warum?

Clients erhalten ihren Wählplan über die Bereitstellung bei der Anmeldung. Gib der Änderung etwas Zeit und lass den Anwender sich im Teams-Client ab- und wieder anmelden, bevor du weitersuchst.

Fazit: sieben Stationen, eine Reihenfolge

Ein Teams-Anruf, der nicht rausgeht, ist fast nie Pech und fast nie ein Fehler bei Microsoft. Er ist das logische Ergebnis einer Kette aus sieben Gliedern, von denen eines nicht so konfiguriert ist, wie alle glauben. Benutzer, Wählplan, Normalisierung, Voice Routing Policy, PSTN Usage, Voice Route, SBC: In dieser Reihenfolge prüfst du, lesend, mit einer konkreten Nummer und einem konkreten Benutzer.

Grenz vorher ein, wer betroffen ist, sichere vor jeder Änderung den Bestand, ändere eine Sache auf einmal und teste immer auch 110 und 112. Dann wird aus dem Montagmorgen-Ticket ein Zehn-Minuten-Fall, und der Vertriebsleiter muss die alte Anlage nicht vom Wertstoffhof zurückholen lassen. Die hätte ohnehin keiner mehr angeschlossen bekommen.

Dieses Consulting-Dokument steht als PDF zum Download bereit: https://www.boddenberg.de/ArtikelPdf/montag-8-12-uhr-ich.pdf — © Ulrich B. Boddenberg · boddenberg.de

Noch Fragen? Frag Uli

Du hast eine Frage zu diesem Thema? Schreib sie einfach hier rein. Ich antworte persönlich, kurz und ohne Verkaufsgespräch.

Antwort innerhalb von 24 Stunden

Deine Mailadresse nutze ich nur, um dir zu antworten. Kein Newsletter, keine Weitergabe. Zur Datenschutzerklärung