Ihr Senderequest kann erfolgreich sein, bevor das Telefon des Empfängers etwas erhält. Ein späterer Carrier-Bericht liefert ein weiteres Ergebnis, das Ihre Anwendung getrennt von der Request-Annahme verarbeiten muss.
Was sagt mir eine Zustellbestätigung?
Eine Quittung meldet aus Sicht des Netzes eine erfolgreiche Zustellung oder ein Zustellproblem.
Ein SMS-Zustellergebnis kann eintreffen, während das Telefon ungelesen in einer Schublade liegt. Es beweist nicht, dass der Empfänger die Absenderkennung gesehen hat. Es belegt auch nicht, dass er den vollständigen Text gelesen hat.
Das Netz sendet Quittungen getrennt von seiner Antwort auf einen Senderequest. Es kann außerdem manche Berichte unterdrücken. Die SMPP-Quittungsreferenz dokumentiert diese Steuerungen für Carrier-Verbindungen.
Welche Carrier-Quittungen stellt Bird bereit?
Sie erhalten öffentliche Events für erkannte Zustellergebnisse. Gepufferte Quittungen bleiben intern.
Eine gepufferte Quittung besagt, dass der Carrier die Nachricht zurückhält. Bird erfasst sie im internen Event-Log, ohne den öffentlichen Nachrichtenstatus zu ändern. In der öffentlichen Timeline oder in Ihren Webhooks sehen Sie kein Update.
| Carrier-Quittungsstatus | Bird-Event |
|---|---|
delivered | sms.delivered |
expired | sms.expired |
rejected | sms.rejected |
delivery_failed mit behebbarem Grund | sms.undelivered |
delivery_failed mit permanentem oder nicht zugeordnetem Grund | sms.failed |
buffered | Kein öffentliches Event |
Ein nicht erkannter Carrier-Status erzeugt kein Event. Ein fehlendes öffentliches Update belegt daher nicht, dass der Carrier keine Quittung gesendet hat.
Warum erzeugt ein Fehlerstatus unterschiedliche Events?
Bird nutzt den Fehlergrund des Carriers, um zu entscheiden, ob sich das zugrunde liegende Problem beheben kann.
| Carrier-Grund | Bird-Fehlercode | Klassifizierung |
|---|---|---|
unavailable_subscriber | unreachable | Behebbar |
received_network_error | provider_unavailable | Behebbar |
capacity_limit_reached | provider_unavailable | Behebbar |
unknown_subscriber | invalid_destination | Permanent |
opted_out | recipient_opted_out | Permanent |
carrier_rejected | sender_unregistered, content_rejected oder blocked_by_carrier | Permanent |
Ein behebbarer Fehler erzeugt sms.undelivered. Die Nachricht ist dennoch endgültig: Bird wiederholt den Versand nicht automatisch. Um den Empfänger zu erreichen, ist ein erneuter Versand erforderlich, nachdem das zugrunde liegende Problem behoben ist.
Ein permanenter Fehler erzeugt sms.failed.
SMS-Pumping ist Betrug, bei dem Ihr Produkt kostenpflichtige Nachrichten an Nummern sendet, die ein Angreifer kontrolliert. Bird meldet blocked_by_fraud_protection, wenn der Betrugsschutz verdächtiges Pumping blockiert.
Ein anderweitig nicht zugeordneter Grund erzeugt sms.failed mit dem Fehlercode unknown. Dieses Ergebnis bedeutet, dass Bird den Grund des Carriers nicht klassifizieren konnte. Es beweist nicht eigenständig, dass das Ziel dauerhaft unerreichbar ist.
Kann ich festlegen, wann der Carrier die Zustellversuche beendet?
Mit validity_period können Sie eine Zustellfrist von 60 bis 172.800 Sekunden (zwei Tage) festlegen, gerechnet ab dem Zeitpunkt, zu dem Bird die Nachricht annimmt.
Nach Ablauf dieser Frist übergibt Bird die Nachricht nicht mehr an den Carrier. Wenn die Route es unterstützt, übergibt Bird die verbleibende Zeit als Gültigkeitsdauer der Nachricht an den Carrier. Für einen Bestätigungscode, der zehn Minuten gilt, können Sie den Wert 600 setzen. Ein Text, der den Carrier nicht innerhalb von zehn Minuten erreicht, wird dann nicht gesendet.
Eine Nachricht, die die Frist verpasst, bevor sie den Carrier erreicht, endet mit rejected oder failed. Bird erzeugt sms.expired nur, wenn ein Carrier einen Ablauf meldet.
Lassen Sie das Feld weg, um die Gültigkeitsdauer des Messaging-Profils in messaging_profile_id zu verwenden. Legt keines von beiden eine fest, gelten die Regeln des Carriers. Die Nachrichtenantwort meldet den angewendeten Wert validity_period.
Wie sollte ich Quittungen in meiner Anwendung verarbeiten?
Sie sollten Zustellergebnisse getrennt von der Request-Annahme und von jeder Aktion des Empfängers verfolgen.
Behandeln Sie eine Nachricht ohne endgültiges Zustellergebnis als ausstehend. Lesen Sie den Fehlercode bei einem Fehler-Event, damit Sie die Ursache untersuchen können. Speichern Sie unbekannte Codes in Ihren Logs, weil der Fehlercode-Satz erweiterbar ist.
Verwenden Sie Delivered-Events für eine Zustellmetrik. Erfassen Sie bei einem Bestätigungscode- oder Bestätigungsablauf den Erfolg, wenn der Empfänger die Aktion abschließt. Eine Zustellbestätigung allein kann diesen Nachweis nicht liefern.
SMS-Events dokumentiert die öffentlichen Event-Payloads und die Nachrichten-Timeline.
Kurz gesagt
Zustellung belegt kein Lesen.
Eine Quittung meldet das Zustellergebnis des Netzes, ohne zu bestätigen, dass eine Person den Text gesehen hat.
Manche Quittungen haben kein öffentliches Event.
Bird erfasst gepufferte Quittungen intern, ohne den öffentlichen Status, die Timeline oder den Webhook-Stream zu ändern.
Der Grund bestimmt das Fehler-Event.
Behebbare Carrier-Gründe erzeugen sms.undelivered; permanente oder nicht zugeordnete Gründe erzeugen sms.failed.
Ein behebbarer Grund löst keinen erneuten Versand aus.
Eine unzugestellte Nachricht ist endgültig, ein weiterer Versuch erfordert daher einen separaten Versand.