Zurück zum Blog Qualität und Zustellbarkeit

DLR-Abweichungen bei A2P-SMS untersuchen, ohne Zustellung mit menschlichem Empfang zu verwechseln

Operativer Leitfaden zur Korrelation von Sendungen, DLRs und unabhängigen Beobachtungen, zur Klassifizierung von Abweichungen und zur Eskalation von Vorfällen mit reproduzierbaren Nachweisen, ohne DELIVRD als Lesebestätigung darzustellen.

Zeitachse einer A2P-SMS mit Annahme, Zwischenstatus, finalem DLR und unabhängiger Beobachtung

Die richtige Frage: Was belegt jede Evidenz tatsächlich?

Die Untersuchung von A2P-SMS-DLR-Abweichungen beginnt damit, Fakten zu trennen, die häufig in einem einzigen Statusfeld zusammengeführt werden. Die Annahme einer Sendung, der Fortschritt innerhalb der Kette, ein von einem SMSC gemeldeter Status und eine Beobachtung auf einem Endgerät sind nicht gleichwertig.

In SMPP zeigt ein erfolgreiches submit_sm_resp gemäß der Spezifikation eine erfolgreiche Antwort mit einer message_id. Die genaue operative Bedeutung der Annahme oder Verarbeitung hängt von der dokumentierten Semantik des SMSC und der Verbindung ab. Bei einer HTTP-API hängt die Bedeutung der ersten Antwort ebenfalls von der dokumentierten API-Semantik ab. Eine dokumentierte Annahme oder Erstellung mit zurückgegebener Kennung belegt nur die Annahme an dem durch diese API definierten Punkt der Kette, nicht die physische Annahme durch einen nachgelagerten Anbieter oder die Zustellung an das Ziel.

Spätere Status treffen asynchron ein. In SMPP kann ein Empfangsbericht des SMSC über deliver_sm oder data_sm eingehen. Dieses DLR gibt den vom SMSC geführten oder gemeldeten Status wieder. Es darf nicht automatisch dem Endgerät, dem Nutzer oder allen vorherigen Abschnitten zugeschrieben werden.

Eine unabhängige Beobachtung – etwa ein von einem kontrollierten Testgerät protokollierter Empfang – ist eine andere Art von Evidenz. Sie kann ein DLR stützen oder ihm widersprechen, belegt aber für sich allein weder die Identität der Person, die das Gerät nutzt, noch lässt sich daraus auf eine gesamte Route verallgemeinern.

  • API-Annahme oder submit_sm_resp: Erfolgreiche Antwort mit Kennung; die Bedeutung der Annahme oder Verarbeitung richtet sich nach der dokumentierten Semantik des empfangenden Systems.
  • Temporärer Status: Informiert über Fortschritt, Warteschlange oder Transport; schließt den Vorgang nicht zwingend ab.
  • Finales DLR: Technische Aussage der Kette gemäß der dokumentierten Semantik und, soweit dokumentiert, der Zustandsmaschine; ohne formales Mapping bleiben Originalwert und Quelle erhalten.
  • Unabhängige Beobachtung: Separates Signal außerhalb des DLR-Flusses; Methode und Geltungsbereich müssen dokumentiert werden.
  • Menschliches Lesen: Kann nicht allgemein aus einem SMS-DLR abgeleitet werden.
Die richtige Frage: Was belegt jede Evidenz tatsächlich?

Warum DELIVRD weder Lesen noch Identität belegt

SMPP definiert den Statuswert DELIVERED. DELIVRD erscheint dagegen häufig als Textwert im typischen Format eines DLR. Der Textinhalt eines solchen DLR kann SMSC-anbieterspezifisch sein. Deshalb müssen die anwendbare Spezifikation und die offizielle Dokumentation jeder Verbindung geprüft werden, bevor Werte wie DELIVRD abgebildet werden.

3GPP unterscheidet ausdrücklich zwischen dem Empfang durch die Mobilstation und der Zustellung an den Nutzer. Ein von der Mobilstation erzeugter Bericht bestätigt den Empfang durch diese Mobilstation, nicht die Zustellung an den Nutzer. Damit ist nicht nachgewiesen, dass eine Person die Nachricht gesehen, geöffnet oder verstanden hat. SMS stellt zudem nicht allgemein eine Lesebestätigung bereit.

Ein als delivered gemeldeter Status kann auf einer Bestätigung eines vorgelagerten Netzbetreibers beruhen und nur dann eine Endgerätebestätigung enthalten, wenn diese verfügbar ist. Die genaue Herkunft muss bei jedem Ereignis erhalten bleiben, statt sie in eine stärkere Behauptung umzuwandeln.

Auch die menschliche Identität des Empfängers wird nicht nachgewiesen. Ein technisches Ziel oder Gerät kann die Nachricht empfangen, ohne zu belegen, wer die Nummer kontrolliert, das Endgerät besitzt oder den Inhalt sieht. Ein OTP muss im Rahmen des vollständigen Sicherheitsdesigns des Dienstes behandelt werden, nicht als Identitätsnachweis, der allein auf einem DLR beruht.

Auch eine terminologische Verwechslung sollte vermieden werden: Der SMPP-Status ACCEPTED bedeutet weder gewöhnliches Lesen noch die anfängliche Transportannahme. Die Spezifikation beschreibt ihn als manuelles Lesen im Namen des Teilnehmers durch den Kundendienst. Die ursprüngliche Annahme der Sendung wird separat erfasst.

  • „Als DELIVRD gemeldetes DLR“ statt „Nutzer erreicht“ schreiben, wenn keine zusätzliche Evidenz vorliegt.
  • Anbieter, Verbindung und Version des Mappings speichern, das den Originalwert in einen internen Status überführt hat.
  • DELIVRD nicht als Lesen, Identität, Einwilligung oder allgemeine Garantie des Empfangs auf dem Endgerät darstellen.
  • Delivered, Beobachtung auf einem Gerät und Read getrennt halten, wenn ein Kanal Leseereignisse unterstützt.
Warum DELIVRD weder Lesen noch Identität belegt

Minimales Modell für Ende-zu-Ende-Nachverfolgbarkeit

Eine zuverlässige Korrelation benötigt einen Datensatz pro logischer Nachricht, pro Segment bei Verkettung und pro empfangenem Ereignis. Die interne Kennung muss zusammen mit der message_id oder Kennung gespeichert werden, die jedes SMSC, jede API oder jeder Partner vergibt. Das id-Feld eines SMPP-DLR verweist auf die Kennung, die das SMSC der ursprünglichen Sendung zugewiesen hat.

Es ist nicht ratsam, ausschließlich über die Adresse des SMSC zu korrelieren. 3GPP weist darauf hin, dass Resilienz- und Load-Balancing-Architekturen dazu führen können, dass ein Bericht von einer anderen Adresse stammt als die ursprünglich verwendete Sendung.

Normalisieren Sie die Datensätze in ein gemeinsames Schema, bewahren Sie jedoch das Originalereignis und dessen Quelle auf. Die Normalisierung erleichtert Abfragen; die Rohdaten ermöglichen die Prüfung von Parsing-Fehlern und Formatänderungen. Das Ziel kann in einer normalisierten, auf E.164 basierenden Darstellung zusammen mit dem ursprünglich empfangenen Wert gespeichert werden.

Jeder Zeitstempel muss seine Semantik, Quelle und einen expliziten Bezug zu UTC durch Z oder einen Offset enthalten. Überschreiben Sie nicht die vom Anbieter angegebene Zeit mit der Eingangszeit des Callbacks. Halten Sie die unabhängige Beobachtung ebenfalls als dritten Zeitpunkt fest. Bevor Sie eine unmögliche Reihenfolge interpretieren, schließen Sie nicht synchronisierte Uhren aus.

Inhalt und Inhaltsmerkmale sollten nur gespeichert werden, wenn dies erforderlich, minimiert, geschützt, zugriffsbeschränkt und mit den geltenden Vorgaben vereinbar ist. Insbesondere bei OTPs ist es oft vorzuziehen, keinen Inhalt oder nur eine nicht umkehrbare Referenz zu speichern.

  • Interne Kennung der logischen Nachricht und Kennung jedes Segments.
  • Anfragekennung, message_id des SMSC oder Anbieters sowie gegebenenfalls Kennung des Ereignisses oder Callbacks.
  • Lokaler Sendezeitstempel, von der Quelle gemeldeter Zeitstempel, Empfang des Callbacks und unabhängige Beobachtung.
  • Zeitzone oder Offset, verfügbare Genauigkeit, Ursprungssystem und Uhr, die jeden Zeitstempel erzeugt.
  • Anbieter, Verbindung, gemeldete Route, ursprüngliches und normalisiertes Ziel, beobachteter oder gemeldeter Betreiber und Absender.
  • Bei dokumentierter Erforderlichkeit: minimierte, geschützte und zugriffsbeschränkte Inhaltsreferenz oder nicht umkehrbare Referenz gemäß der geltenden Aufbewahrungsrichtlinie.
  • Originalstatus und -fehler, normalisierter interner Status und Version des angewendeten Mappings.
  • Versuchsnummer, Ursache eines Retries, Test- oder Produktionsumgebung und analytische Ausschlüsse.

Reproduzierbare Taxonomie von Abweichungen

Eine präzise Kennzeichnung verhindert, dass Beobachtbarkeitsprobleme vorschnell der Route zugeschrieben werden. Jeder Fall muss eine überprüfbare Regel, ein dokumentiertes Zeitfenster und einen Untersuchungsstatus haben.

Die interne Taxonomie sollte temporäre, finale und nicht schlüssige Status unterscheiden. SMPP definiert unter anderem ENROUTE, DELIVERED, EXPIRED, DELETED, UNDELIVERABLE, ACCEPTED, UNKNOWN und REJECTED. Ob ein Status für eine konkrete Integration als final gilt, muss jedoch aus der dokumentierten Zustandsmaschine der Verbindung und der verwendeten Mapping-Version hervorgehen. Falls keine formale Zustandsmaschine oder kein formales Mapping dokumentiert ist, müssen Originalwert und Quelle erhalten bleiben.

  • Fehlen: Innerhalb des für diese Metrik dokumentierten Beobachtungsfensters existiert kein korrelierbares DLR. Dies entspricht nicht automatisch einem Zustellfehler.
  • Duplikat: Mehr als eine Kopie desselben Ereignisses oder Status geht ein. Vor der Aggregation anhand von Kennung und Zeitfenster deduplizieren.
  • Verzögerung: Das DLR trifft nach der für dieses operative Segment erwarteten Frist ein, ohne dass sich dadurch die Bedeutung des Status ändert.
  • Widerspruch: Zwei Quellen oder als final klassifizierte Ereignisse ordnen derselben Nachricht oder demselben Segment unvereinbare Ergebnisse zu.
  • Nicht korrelierbar: Ein DLR existiert, seine Kennung lässt sich jedoch nicht sicher mit der ursprünglichen Sendung verknüpfen.
  • Ungültige Sequenz: Ein Übergang verletzt die dokumentierte Zustandsmaschine oder die Zeiten erscheinen unmöglich.
  • Teilergebnis: Eine verkettete Nachricht enthält erfolgreiche und fehlgeschlagene Segmente; dies darf nicht unter einem einzigen vereinfachten Ergebnis verborgen werden.
  • Unbekannte Taxonomie: Ein Status oder Code erscheint, der in der aktiven Mapping-Version nicht vorgesehen ist.

Schritt-für-Schritt-Verfahren zur Untersuchung

Grenzen Sie den Vorfall zunächst ab, ohne unterschiedliche Populationen zu vermischen. Definieren Sie Beginn und Ende, Anwendungsfall, Ziel, Betreiber, Absender, Anbieter, Verbindung, gemeldete Route, Verkehrsart, Kodierung und genaue Einschlussbedingung. Erfassen Sie außerdem Stichprobengröße und mögliche Verzerrungen.

Validieren Sie anschließend die Beobachtbarkeit. Prüfen Sie, ob der Callback-Endpunkt erreichbar war, die Anfrage vor der Antwort persistierte, das empfangene Schema akzeptierte und eine gültige HTTP-Antwort zurückgab. Ein zu strenger Validator kann neue Felder ablehnen. Prüfen Sie Warteschlangen, Ingestionsfehler, Speicherung, Retries, Deduplizierung und Uhrensynchronisierung.

Rekonstruieren Sie dann die Chronologie pro Nachricht und pro Segment: Anfrage, Erstantwort, temporäre Status, finales DLR, technische Retries und unabhängige Beobachtung. Vergleichen Sie Original- und transformierte Werte, ohne Ereignisse aus unterschiedlichen Uhren blind zu sortieren.

Ordnen Sie abschließend den wahrscheinlichsten Bereich zu: eigene Integration, Beobachtbarkeit, Status-Mapping, Anbieter-Verbindung, gemeldete Route, Netz oder Ziel. Wenn die Evidenz keine Isolierung zulässt, behalten Sie die Klassifizierung „nicht bestimmt“ bei, statt eine Ursache zu erzwingen.

  • 1. Umfang, Abfrage und Ausschlüsse einfrieren, damit die Analyse reproduzierbar bleibt.
  • 2. Repräsentative Beispiele auswählen und ihre Originalprotokolle aufbewahren.
  • 3. Empfang, Antwort und Persistierung von Callbacks überprüfen.
  • 4. Ausstehende Nachrichten über den offiziellen Abfragemechanismus abgleichen, sofern die Verbindung ihn anbietet.
  • 5. Alle Kennungen korrelieren, ohne sich nur auf Ziel oder SMSC-Adresse zu verlassen.
  • 6. Zeitstempel, Offsets, Uhrabweichungen und die Semantik jeder Zeitangabe prüfen.
  • 7. Die richtige Mapping-Version anwenden und Übergänge überprüfen.
  • 8. Integration, Route und Ziel trennen; Unsicherheit und fehlende Evidenz dokumentieren.

Timeouts, temporäre Status und operativer Abschluss

Ein Timeout von API, Verbindung oder Callback beweist nicht, dass die SMS nicht zugestellt wurde. Der Vorgang kann nach dem Verlust der Antwort fortgesetzt worden sein. Suchen Sie nach dem späteren Bericht und gleichen Sie, wenn offizieller Support vorhanden ist, über eine Statusabfrage ab.

Temporäre Fehler und Status im Transit dürfen nicht in finale Fehler umgewandelt werden, solange das Service Center weiterhin Versuche unternimmt oder die geltende Gültigkeit noch offen ist. Ebenso darf ein ausstehender Status nicht als delivered ausgegeben werden, nur um einen Bericht zu vervollständigen.

Definieren Sie ein Abschlussfenster, das an Anwendungsfall und konfigurierte Gültigkeit gebunden ist. Bei einem OTP kann der fachliche Nutzen früh enden, auch wenn der technische Status später eintrifft. Ein Authentifizierungs- oder Identitätsnachweis sollte jedoch nicht ausschließlich auf einem DLR beruhen. Eine nicht dringende Benachrichtigung kann ein anderes Fenster zulassen. Fachlicher Ablauf, analytischer Abschluss und technischer Status sind unterschiedliche Felder.

Auch TP-Discharge-Time darf nicht immer als Zeitpunkt einer erfolgreichen Zustellung interpretiert werden: Je nach Status kann es die Zustellung, den letzten Versuch oder die Verfügung über die Nachricht durch das Service Center darstellen.

  • Den technischen Originalstatus nach dem operativen Abschluss aufbewahren.
  • „Kein DLR zum Abschluss“ kennzeichnen, statt automatisch als failed umzuklassifizieren.
  • Späte Abgleiche zulassen, ohne bereits ausgegebene Berichte stillschweigend umzuschreiben.
  • Die Abschlusslogik versionieren und ihre Beziehung zu Gültigkeit und Anwendungsfall erläutern.

Synthetische Tests und Produktionsverkehr

Synthetische Tests ermöglichen die Kontrolle über Gerät, Zeitpunkt, Inhalt, Absender und Beobachtungsmethode. Sie eignen sich, um Probleme zu reproduzieren und DLRs mit beobachtetem Empfang zu vergleichen. Eine kontrollierte Stichprobe bildet jedoch nicht zwingend die Verteilung von Zielen, Endgeräten, Verfügbarkeit, Filtern und Profilen des tatsächlichen Verkehrs ab.

Produktionsverkehr bietet Umfang und Vielfalt, ermöglicht jedoch meist weniger Kontrolle über das Endgerät und darf nicht zur Ableitung von Lesen oder Identität verwendet werden. Zudem muss er gemäß den geltenden Regeln zu Einwilligung, Zweckbindung und Aufbewahrung von Protokollen verarbeitet werden.

Tägliche Prüfungen über Routen, Ziele und Betreiber können dazu dienen, Zustellung, DLR-Konsistenz, Latenz, Verfügbarkeit sowie das Verhalten von Absender und Inhalt zu beobachten. Solche Beobachtungen sind Qualitätssignale und keine allgemeine Garantie für Empfang oder Lesen.

Mischen Sie Tests und Produktion nicht in einer einzigen Rate. Kennzeichnen Sie synthetischen Verkehr, technische Retries und verkettete Nachrichten getrennt. Wenn Quellen verglichen werden, dokumentieren Sie deren Unterschiede bei Auswahl, Volumen und Methode.

  • Synthetisch: mehr Kontrolle und bessere Reproduzierbarkeit; geringere allgemeine Repräsentativität.
  • Produktion: größere Vielfalt; weniger Gewissheit darüber, was am Endgerät geschehen ist.
  • Nur legitime, einwilligungsbasierte und mit den geltenden Vorschriften konforme Nachrichten verwenden.
  • Tests ausschließlich mit autorisierten Nummern, Geräten und Absendern durchführen.
  • Ein Testgerät nicht ohne ausreichende Evidenz auf eine vollständige Route hochrechnen.

Nützliche Kennzahlen ohne falsche Gewissheit

Reduzieren Sie Annahme, DLR-Abdeckung, Latenz und Ergebnis nicht auf eine einzige Bewertung. Es handelt sich um unterschiedliche Dimensionen. Die DLR-Abdeckung kann als Anteil berechtigter Nachrichten mit mindestens einem korrelierbaren Ereignis definiert werden; sie muss vom Anteil der als delivered gemeldeten Nachrichten getrennt bleiben.

Definieren Sie für jede Kennzahl vor der Berechnung die berechtigte Grundgesamtheit, das Beobachtungsfenster, den maßgeblichen Meilenstein und die Behandlung mehrteiliger Nachrichten. Bei DLR-Abdeckung kann eine berechtigte Nachricht beispielsweise eine logische Nachricht innerhalb eines festgelegten Sendefensters sein, für die die Verbindung Statusberichte vorsieht; bei verketteten Nachrichten muss zusätzlich dokumentiert werden, ob die Kennzahl auf Nachrichten- oder Segmentebene berechnet wird.

Berechnen Sie Latenz anhand von Perzentilen und klar definierten Meilensteinen. Beispielsweise ist Annahme bis Callback-Empfang nicht dasselbe wie submit date bis done date. Geben Sie die Quelle beider Endpunkte, den Offset, das Beobachtungsfenster und die Behandlung fehlender Werte an.

Deduplizieren Sie vor der Aggregation anhand der Nachrichten- oder Ereigniskennung und eines Zeitfensters. Schließen Sie Tests, Retries und verkettete Nachrichten aus oder kennzeichnen Sie sie separat, um Doppelzählungen zu vermeiden. Bei Verkettungen messen Sie auch erfolgreiche und fehlgeschlagene Segmente.

Erstellen Sie segmentierte Baselines nach Ziel, Betreiber, Absender, Verkehrsart, gemeldeter Route, vergleichbarem Zeitfenster und Integrationsversion. Analysieren Sie nachhaltige Veränderungen im Vergleich zu punktuellen Schwankungen. Bei geringem Volumen zeigen Sie Stichprobengröße und Unsicherheit statt scheinbar präziser Ranglisten. Überprüfen Sie regelmäßig die Qualität der Daten selbst: verlorene Callbacks, nicht synchronisierte Uhren, unvollständige Felder, wiederverwendete Kennungen, Zeitstempel in der Zukunft, Ingestionsfehler, unmögliche Sprünge und abrupte Änderungen der Taxonomie.

  • DLR-Abdeckung: Berechtigte Nachrichten mit mindestens einem korrelierbaren DLR innerhalb des dokumentierten Beobachtungsfensters, geteilt durch berechtigte Nachrichten; Ebene für mehrteilige Nachrichten angeben.
  • Konsistenz: Anteil der Ereignisse, die die definierte Korrelation, Taxonomie und Sequenz einhalten; Grundgesamtheit und Ausschlüsse dokumentieren.
  • Latenz: Perzentile pro Meilensteinpaar und vergleichbarem Segment, nicht nur ein Mittelwert.
  • Alter ausstehender Nachrichten: Verteilung nach Intervallen seit dem gewählten Meilenstein und innerhalb eines dokumentierten Fensters.
  • Nicht korrelierte Ereignisse: Anteil und Volumen von DLRs ohne sichere Verknüpfung zur Sendung.
  • Widersprüche und Duplikate: Volumen vor und nach der Deduplizierung.
  • Empfohlenes Dashboard: Statusverteilung, Entwicklung der Perzentile, Backlog nach Alter, Abdeckung und Datenqualität.
  • Sichtbarer Methodenhinweis: Quelle, Umfang, Berechtigungskriterien, Ausschlüsse, Fenster, Ebene bei mehrteiligen Nachrichten, Stichprobe, Mapping-Version und Einschränkungen.
FAQ

Häufige Fragen

Bestätigt ein DELIVRD-DLR, dass die SMS auf dem Endgerät angezeigt wurde?

Nicht allgemein. DELIVRD ist häufig ein Textwert in einem DLR, dessen Format anbieterabhängig sein kann. Das DLR ist ein von der Kette gemeldeter Status gemäß der Semantik der Verbindung. Es kann von einer Bestätigung eines vorgelagerten Netzbetreibers abhängen und nur dann eine Endgerätebestätigung enthalten, wenn diese verfügbar ist. Es muss von einer unabhängigen Gerätebeobachtung unterschieden werden.

Bedeutet DELIVRD, dass der Nutzer die Nachricht gelesen hat?

Nein. 3GPP unterscheidet den Empfang durch die Mobilstation von der Zustellung an den Nutzer. SMS bietet nicht allgemein ein Leseereignis, und ein DLR belegt auch nicht, wer das Endgerät verwendet hat.

Belegt eine erfolgreiche submit_sm_resp-Antwort die Zustellung?

Nein. Sie ist eine erfolgreiche SMPP-Antwort mit einer message_id. Die genaue operative Bedeutung von Annahme oder Verarbeitung hängt von der dokumentierten Semantik des SMSC und der Verbindung ab. Die Zustellung oder ein späteres Ergebnis wird über asynchrone Status oder Abfragen mitgeteilt, sofern diese unterstützt werden.

Sollte das Fehlen eines DLR als Fehler klassifiziert werden?

Nicht automatisch. Statusberichte sind möglicherweise nicht verfügbar, und ein Callback kann verloren gehen. Solange das operative Fenster offen ist, bleibt die Nachricht ausstehend; verwenden Sie nach dessen Abschluss eine Kategorie wie „Kein DLR zum Abschluss“, ohne ein finales Ergebnis zu erfinden.

Wie sollten doppelte Callbacks behandelt werden?

Speichern Sie das Originalereignis und deduplizieren Sie vor der Aggregation anhand von Nachrichten- oder Ereigniskennungen und einem dokumentierten Zeitfenster. Gehen Sie nicht davon aus, dass jeder Callback eine neue Nachricht darstellt.

Was ist zu tun, wenn das DLR nach einem Timeout eintrifft?

Bewahren Sie beide Tatsachen auf. Das Timeout beschreibt die Integration oder Verbindung; das spätere DLR beschreibt den danach gemeldeten Status. Gleichen Sie den Datensatz ab, ohne das Timeout rückwirkend in einen Nachweis der Nichtzustellung umzuwandeln.

Verwendete Quellen

  1. SMPP Protocol Specification v3.4, Issue 1.2SMPP Developers Forum
  2. ETSI TS 123 040 V18.0.0 / 3GPP TS 23.040 Release 18ETSI / 3GPP
  3. ITU-T E.164 (02/2026), The international public telecommunication numbering planInternational Telecommunication Union
  4. RFC 3339, Date and Time on the Internet: TimestampsInternet Engineering Task Force
  5. NIST SP 800-92, Guide to Computer Security Log ManagementNational Institute of Standards and Technology
  6. Messages resource: message statuses and status callbacksTwilio
  7. Outbound Message Status in Status CallbacksTwilio
  8. Best Practices for Messaging Delivery Status LoggingTwilio
  9. RCS for Business: Receive eventsGoogle for Developers
  10. RCS for Business: Conversation flowsGoogle for Developers
  11. Azure Communication Services SMS delivery reports APIMicrosoft Learn
  12. Azure Communication Services SMS eventsMicrosoft Learn