Nichts gefunden

Zustellbestätigungen und eingehende SMS

Was an Ihre Adresse gesendet wird

BulkGate meldet Ihnen zweierlei zurück: wie Ihre gesendeten Nachrichten ausgegangen sind und was die Empfänger geantwortet haben. Beides kommt als HTTP-Anfrage an die von Ihnen eingestellte Adresse.

Was ankommt Woran Sie es erkennen
Zustellbericht Der Parameter status mit einem Statuscode und die smsID der gesendeten Nachricht
Eingehende SMS oder Antwort Der Parameter status mit dem Wert 10, der Absender in from und der Text in message

Die Anfrage kommt per HTTP GET, die Werte finden Sie also im Query-String.

Tipp

Bei hohen Volumina lohnt sich die Sammelvariante: Statt einer Anfrage pro Nachricht kommt eine einzige POST-Anfrage mit einem Array von Datensätzen in JSON. Sie ist unter Sammel-Zustellbestätigungen beschrieben.

Wo die Adresse eingestellt wird

Die Adresse stellen Sie selbst im Detail Ihrer Anwendung ein — auf der Registerkarte Die Einstellungen, im Bereich Web hooks, auf der Karte Zustellungsberichte. Das Feld URL-Zustellungsberichte im sich öffnenden Fenster erwartet eine Adresse, die mit http:// oder https:// beginnt.

Das Einstellungsfenster für Zustellberichte mit ausgeschaltetem Sammelversand

Wichtig

Lassen Sie das Kontrollkästchen Massen-DLRs - Massenanfrage ausgeschaltet — damit wechselt die Zustellung zu Sammelpaketen per POST und es gilt Sammel-Zustellbestätigungen stattdessen.

Das gesamte Vorgehen einschließlich der weiteren Optionen ist auf der Seite Webhooks beschrieben.

Parameter des Zustellberichts

Parameter Wert
status Der Statuscode der Nachricht — siehe Zustellstatus
smsID Die eindeutige ID der Nachricht
price Der Preis der Nachricht in Credits
channel Der Kanal, über den die Nachricht ging (sms, viber, whatsapp, rcs und weitere)
date Zeitpunkt des Versands und der Zustellung, getrennt durch ein Semikolon, in der Zeitzone CET

Der Wert date hat die Form YYMMDDHHMM;YYMMDDHHMM — zum Beispiel bedeutet 1812141317;1812141318 gesendet am 14. Dezember 2018 um 13:17 und eine Minute später zugestellt.

Parameter der eingehenden Nachricht

Enthält status den Wert 10, handelt es sich nicht um einen Zustellbericht, sondern um eine Nachricht des Empfängers. Sie kommt mit einem anderen Satz an Parametern:

Parameter Wert
status Immer 10
from Die Telefonnummer des Absenders
to Die Telefonnummer des Empfängers, also Ihre Nummer
message Der Text der Nachricht in UTF-8
channel Der Kanal, über den die Nachricht kam
smsdetails Details einschließlich des verwendeten Protokolls und des Empfangszeitpunkts

Zustellstatus

Code Bedeutung
1 Die Nachricht wurde zugestellt
2 Die Nachricht wartet beim Betreiber — der Empfänger ist momentan nicht erreichbar und die Zustellung wird erneut versucht
3 Die Nachricht konnte nicht zugestellt werden — der Empfänger ist unbekannt oder dauerhaft nicht erreichbar
10 Eine eingehende Nachricht oder Antwort, kein Zustellbericht
13 Die Nachricht wurde gelesen (nur Viber)
Hinweis

Status 2 ist nicht endgültig — für dieselbe Nachricht kommt später eine weitere Anfrage mit dem endgültigen Status. Rechnen Sie damit, dieselbe smsID mehrmals zu sehen.

Ein Verarbeitungsbeispiel

Das Skript unterscheidet anhand von status einen Zustellbericht von einer eingehenden Nachricht und schreibt jeden in ein eigenes Log:

<?php declare(strict_types=1); const STATUS = [ 1 => 'zugestellt', 2 => 'wartet beim Betreiber', 3 => 'nicht zugestellt', 13 => 'gelesen', ]; $status = filter_input(INPUT_GET, 'status', FILTER_VALIDATE_INT); function log_line(string $file, string $message): void { file_put_contents( __DIR__ . "/$file.log", '[' . date('Y-m-d H:i:s') . '] ' . $message . PHP_EOL, FILE_APPEND ); } if ($status === 10) // eine eingehende Nachricht { $from = filter_input(INPUT_GET, 'from') ?? ''; $message = filter_input(INPUT_GET, 'message') ?? ''; log_line('inbox', sprintf('Von: [%s] Nachricht: [%s]', $from, $message)); } else if (isset(STATUS[$status])) // ein Zustellbericht { $sms_id = filter_input(INPUT_GET, 'smsID') ?? ''; $price = filter_input(INPUT_GET, 'price', FILTER_VALIDATE_FLOAT) ?: 0.0; log_line('delivery', sprintf('Nachricht [%s]: %s, Preis %.4f', $sms_id, STATUS[$status], $price)); } else { http_response_code(400); exit; }
Warnung

Die Adresse muss schnell und mit dem Statuscode 200 antworten. Langsame oder fehlerhafte Verarbeitung hält die Zustellung weiterer Berichte auf — verlagern Sie aufwendige Arbeit daher in eine Warteschlange und bestätigen Sie die Anfrage sofort.

War diese Seite hilfreich?