Was bedeuten SIP-Antwortcodes, und warum habe ich einen 503 erhalten?

Ein SIP-Antwortcode gibt an, wie ein Anrufversuch endete, und ein 503 von Bird ist in der Regel eine Ablehnung, die nicht über die Leitung erklärt wird, keine Überlastung.

Die Klassen stammen aus HTTP, und die bekannten Nummern bedeuten ungefähr das, was Sie erwarten. Ein Code im alltäglichen Gebrauch bedeutet etwas ganz anderes als das, was der Standard besagt.

Was bedeuten die Klassen?

SIP verwendet sechs Antwortklassen, nummeriert wie die von HTTP und genauso zu lesen. RFC 3261, der SIP definiert, benennt sie in Abschnitt 7.2:

1xx: Provisional -- request received, continuing to process the request;
2xx: Success -- the action was successfully received, understood, and accepted;
3xx: Redirection -- further action needs to be taken in order to complete the request;
4xx: Client Error -- the request contains bad syntax or cannot be fulfilled at this server;
5xx: Server Error -- the server failed to fulfill an apparently valid request;
6xx: Global Failure -- the request cannot be fulfilled at any server.

Die einzige Klasse ohne HTTP-Entsprechung ist 6xx. Der Unterschied zwischen einem 4xx und einem 6xx ist der Geltungsbereich. Ein Client Error besagt, dass dieser Server die Anfrage nicht erfüllen konnte, während ein Global Failure besagt, dass kein Server es kann. Nach einem 6xx hat es keinen Sinn, eine alternative Route zu versuchen. In der Praxis sehen Sie selten einen.

Was bedeuten die gängigen Codes?

403 bedeutet, die Gegenstelle hat den Anruf abgelehnt. 404 bedeutet, die Nummer ist nicht vergeben. 486 bedeutet, das Endsystem wurde erreicht und ist besetzt. 503 bedeutet, der Server nimmt die Anfrage jetzt nicht an. RFC 3261 definiert sie in Abschnitt 21:

  • 403 Forbidden: "The server understood the request, but is refusing to fulfill it."
  • 404 Not Found: "The server has definitive information that the user does not exist at the domain specified in the Request-URI."
  • 486 Busy Here: "The callee's end system was contacted successfully, but the callee is currently not willing or able to take additional calls at this end system."
  • 503 Service Unavailable: "The server is temporarily unable to process the request due to a temporary overloading or maintenance of the server."

Der Wortlaut zu 486 enthält die Diagnose: Das Endsystem wurde erfolgreich kontaktiert und hat dann abgelehnt. Ein 404 bedeutet, die Nummer ist nicht vergeben. Beide zeigen auf die gewählte Nummer und nicht auf Ihr eigenes Setup. Das ist das Gegenteil des Instinkts, den ein 4xx normalerweise auslöst. Ein Trunk, der korrekt funktioniert, muss nicht überprüft werden.

Warum hat mein Anruf einen 503 erhalten?

Zwei ganz verschiedene Dinge stecken hinter 503, und das Anrufprotokoll trennt sie.

Ein 503 mit einem zugehörigen Anrufdatensatz ist eine Ablehnung. Bird prüft die Anrufer-ID, das Ziel, die Kontolimits und das Guthaben, bevor ein Anruf hinausgeht, und ein Anruf, der eine dieser Prüfungen nicht besteht, wird mit 503 abgelehnt. Der Datensatz enthält den Ablehnungsgrund, der die fehlgeschlagene Prüfung benennt. Ein identischer erneuter Versuch erhält dieselbe Antwort, also ist die Lösung die Einstellung, auf die der Grund verweist, und kein weiterer Versuch.

Der Grund steht absichtlich nicht in der Leitung. Ihr Telefonsystem erhält nur den blanken 503; der konkrete Grund steht stattdessen im authentifizierten Anrufdatensatz. Das ist eine Sicherheitsentscheidung, kein Versehen. Ein SIP INVITE ist die Methode, die einen Anruf anfordert, und jeder kann Ihnen einen schicken. Die Ursache in der Antwort offenzulegen würde verraten, ob ein Ziel aktiviert ist, ob eine Anrufer-ID verifiziert ist oder ob ein Konto kein Guthaben mehr hat.

Ein 503 ohne jeglichen Anrufdatensatz ist keine Ablehnung. Keine Prüfung hat den Anruf abgelehnt, es gibt also keinen Grund zum Nachlesen, und nichts erscheint im Protokoll. Das ist der Fall, in dem die RFC-eigene Definition der bessere Anhaltspunkt ist und ein erneuter Versuch der richtige Schritt.

Der Ablauf ist also: Sie sehen den 503 auf Ihrer Seite und suchen dann den Anruf im Protokoll. Wenn er dort ist, sagt Ihnen der Ablehnungsgrund, was Sie ändern müssen, und jeder Grund samt Lösung ist unter Abgelehnte Anrufe aufgeführt. Wenn er nicht dort ist, behandeln Sie ihn als vorübergehend und versuchen es erneut, statt nach einer Einstellung zu suchen, die Sie ändern könnten.

Rejected, Failed oder etwas anderes?

Der SIP-Code ist nur die halbe Antwort. Der Status des Anrufs ist die andere Hälfte, und erst das gemeinsame Lesen macht beide nützlich.

StatusWas passiert ist
answeredDas Ziel hat abgenommen
no_answerEs hat geklingelt und wurde vor dem Timeout nicht beantwortet
rejectedEr wurde abgelehnt, nicht durchgestellt
failedEr wurde versucht und hat nicht funktioniert, und die SIP-Antwort ist das, was zurückkam
unknownEs kam nie eine endgültige Antwort, daher konnte das Ergebnis nicht bestimmt werden

Rejected deckt zwei verschiedene Ablehnungen ab, und der Ablehnungsgrund trennt sie. Wenn ein Grund vorliegt, hat Bird den Anruf abgelehnt, und der Grund benennt die fehlgeschlagene Prüfung, mit dem 503 oben als Code. Wenn kein Grund vorliegt, hat die Gegenstelle den Anruf direkt abgewiesen, und die SIP-Antwort enthält den Code der Gegenstelle. Ein eingehender Anruf, den die angerufene Nummer abgewiesen hat, wird ebenfalls ohne Grund als rejected gemeldet, weil er keine Prüfung von Bird nicht bestanden hat. Was die Nummer tun sollte, ist als Inbound-Route hinterlegt.

Failed ist überhaupt keine Ablehnung. Der Anruf wurde versucht und hat nicht funktioniert. Hier landen ein 486 oder ein 404.

Zwei weitere Status existieren im API und erreichen nie einen Datensatz. busy und canceled sind für eingehende Anrufe reserviert, die an Ihre eigenen Nummern zugestellt werden. busy deckt einen Angerufenen ab, der den Anruf als besetzt abgelehnt hat. canceled deckt einen Anrufer ab, der aufgelegt hat, bevor abgenommen wurde. Keiner von beiden wird ausgegeben, und beide Ergebnisse werden als failed gemeldet. Erst das gemeinsame Lesen von failed und der SIP-Antwort unterscheidet sie. Eine Verzweigung auf einen der beiden Status wird nie ausgeführt, und eine Suche in Ihren Datensätzen liefert nichts zurück.

Die obige Tabelle zeigt die Ergebnisse, die ein beendeter Anruf tragen kann. Ein noch laufender Anruf hat den Status ringing oder in_progress, beim Filtern der Anrufliste begegnen Sie also auch diesen beiden. Die Liste ist auch in die andere Richtung offen: Behandeln Sie die Werte, die Sie kennen, und werten Sie einen unbekannten Wert als einen Status, den Sie nicht behandeln, statt als Fehler.

Wie sehe ich das über viele Anrufe hinweg?

Einzelne Anrufe nacheinander zu prüfen ist das falsche Werkzeug für ein Muster. Der Voice-Statistik-Endpunkt aggregiert Antwortcodes über Ihren gesamten Traffic, und so unterscheiden Sie ein systemisches Problem von einer fehlerhaften Nummer.

Ein Anstieg bei 503 betrifft Ihr Konto oder Ihre Konfiguration, denn das sind die eigenen Ablehnungen von Bird. Ein Anstieg bei 486 oder 404 betrifft die gewählten Nummern. Das Erste lässt sich über eine Einstellung beheben, das Zweite bedeutet meist, dass eine Liste bereinigt werden muss.

Voice-Fehlerbehebung arbeitet die einzelnen Fälle durch. Das Anrufprotokoll beschreibt, was jeder Datensatz enthält, einschließlich der Anruf-ID, die Sie angeben sollten, wenn nur Bird einen Grund klären kann.

Kurz gesagt

  1. Ob ein 503 eine Ablehnung ist, hängt vom Anrufprotokoll ab.

    Ein 503 mit einem Datensatz ist eine Ablehnung, und der Datensatz nennt den Grund. Ein 503 ohne Datensatz ist keine, und in dem Fall lohnt sich ein erneuter Versuch.

  2. Rejected und Failed sind unterschiedliche Ergebnisse.

    Rejected bedeutet, der Anruf wurde abgelehnt. Failed bedeutet, er wurde versucht und hat nicht funktioniert, und der SIP-Code ist das, was zurückkam.

  3. Ein 486 oder ein 404 betrifft die gewählte Nummer.

    Busy und unallocated sind Antworten von der Gegenstelle, sie zeigen also auf das Ziel und nicht auf Ihre Konfiguration.

  4. Zwei Anrufstatus existieren, werden aber nie ausgegeben.

    busy und canceled sind für eingehende Anrufe reserviert. Keiner von beiden wird ausgegeben, und beide Ergebnisse werden als failed gemeldet.

In die Praxis umsetzen.

Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema.

Implementierungs-Briefing erhalten

Bauen Sie auf demselben Netzwerk auf.

Ein Test-API-Schlüssel steht Ihnen sofort zur Verfügung. Der Produktivbetrieb wird freigeschaltet, sobald Sie eine Zahlungsmethode hinzufügen und einen Absender verifizieren.

Ihre nächste Idee. Bereit zur Verbindung.