Ein Bind authentifiziert und öffnet eine SMPP-Sitzung. bind_transmitter erlaubt nur das Senden, bind_receiver nur das Empfangen und bind_transceiver beides über eine Verbindung. Die ESME liefert system_id, password und system_type; das SMSC antwortet mit einem bind_resp. Ein erfolgreicher Bind versetzt die Sitzung in einen gebundenen Zustand, bis Unbind oder Trennung erfolgt.
bind_transceiverSitzung öffnen und authentifizierenbind_transceiver_respSitzung akzeptiertsubmit_smNachricht sendensubmit_sm_respAkzeptiert, Nachrichten-ID zurückgegebendeliver_smZustellungsbericht oder eingehende Nachrichtdeliver_sm_respBestätigtenquire_linkKeepalive im Leerlauf
Die drei Bind-Typen
Der Bind-Typ legt die Verkehrsrichtung der Sitzung fest. Wählen Sie Transmitter für rein ausgehenden Verkehr (MT-Submit), Receiver für rein eingehenden Verkehr (MO und Zustellberichte) oder Transceiver, um beide Richtungen über eine einzige Verbindung zu tragen — die übliche Wahl bei v3.4, da sie die Anzahl der zu pflegenden Verbindungen halbiert.
| Operation | command_id | Session kann |
|---|---|---|
| bind_transmitter | 0x00000002 | Nur Nachrichten senden (MT) |
| bind_receiver | 0x00000001 | Nur Nachrichten / Zustellbestätigungen empfangen (MO + DLR) |
| bind_transceiver | 0x00000009 | Sowohl Senden als auch Empfangen erfolgen über eine einzige Verbindung |
Felder des Bind-Requests
Der Bind-Body trägt die Zugangsdaten und die von der ESME angegebenen Fähigkeiten. system_id und password authentifizieren das Konto; system_type kategorisiert die ESME optional; interface_version deklariert die SMPP-Version; addr_ton, addr_npi und address_range ermöglichen dem SMSC das Routing mobil-originierten Verkehrs zu diesem Bind. Eine nicht passende address_range blockiert stillschweigend das MO/DLR-Routing bei einem Receiver- oder Transceiver-Bind — ein häufiger Integrationsfehler.
| Feld | Typ | Max | Anmerkungen |
|---|---|---|---|
| system_id | C-Octet String | 16 | Konto-/Anmeldekennung |
| password | C-Octet String | 9 | Kontopasswort |
| system_type | C-Octet String | 13 | Optionale ESME-Kategorie (oft leer) |
| interface_version | Integer | 1 | 0x34 = v3.4, 0x50 = v5.0 |
| addr_ton | Integer | 1 | Nummerntyp für das Routing von MO an dieses ESME |
| addr_npi | Integer | 1 | Numbering Plan Indicator |
| address_range | C-Octet String | 41 | Adresse/Regex, die das SMSC an diesen Bind routet |
Bind-Response
Das SMSC antwortet mit dem passenden bind_resp (zum Beispiel bind_transceiver_resp, 0x80000009). command_status ist ESME_ROK bei Erfolg oder ein Fehler wie ESME_RINVPASWD (ungültiges Passwort), ESME_RINVSYSID (ungültige System-ID) oder ESME_RBINDFAIL. Der Body gibt die system_id des SMSC zurück und, ab v3.4, ein optionales sc_interface_version-TLV, das der ESME mitteilt, welche Version das SMSC tatsächlich unterstützt.
ESME → SMSC bind_transceiver seq=1 system_id=acme password=****
SMSC → ESME bind_transceiver_resp seq=1 status=ESME_ROK system_id=smsc01
(session now BOUND_TRX — submit_sm and deliver_sm may flow)Sitzungszustände
Eine SMPP-Sitzung ist eine kleine Zustandsmaschine. Sie startet nach dem TCP-Aufbau im Zustand OPEN, wechselt bei erfolgreichem Bind in einen BOUND-Zustand und kehrt bei Unbind oder Trennung über UNBOUND nach CLOSED zurück. Das Senden einer Operation, die für den aktuellen Zustand unzulässig ist, gibt ESME_RINVBNDSTS (falscher Bind-Status) zurück. Zweimaliges Binden auf einer Verbindung gibt ESME_RALYBND (bereits gebunden) zurück.
| Status | Bedeutung |
|---|---|
| OPEN | TCP verbunden, noch nicht gebunden |
| BOUND_TX | Als Transmitter gebunden – darf senden |
| BOUND_RX | Als Receiver gebunden – darf empfangen |
| BOUND_TRX | Als Transceiver gebunden – darf senden und empfangen |
| UNBOUND | Unbind gesendet, Schließen ausstehend |
| CLOSED | Verbindung abgebaut |
Unbind und Outbind
unbind (0x00000006) fordert einen geordneten Sitzungsabschluss an; die Gegenstelle antwortet mit unbind_resp, und beide Seiten schließen die TCP-Verbindung. outbind (0x0000000B) ist der Fall in umgekehrter Richtung: Das SMSC fordert eine lauschende ESME auf, einen Receiver-Bind zu initiieren — verwendet, wenn das SMSC MO-Verkehr an eine ESME zustellen muss, die normalerweise auf Verbindungen wartet.
Häufig gestellte Fragen
Sollte ich Transmitter/Receiver-Paare oder einen Transceiver verwenden?
Bevorzugen Sie einen Transceiver, wo der Anbieter dies zulässt — eine Verbindung trägt sowohl Submit als auch Empfang, halbiert die Verbindungszahl und vereinfacht die Korrelation von Zustellberichten. Verwenden Sie getrennte Transmitter- und Receiver-Binds nur, wenn der Anbieter eine Richtungstrennung verlangt.
Wofür ist system_type da?
system_type identifiziert optional die Kategorie der ESME (zum Beispiel eine bestimmte Anwendungsklasse). Viele Anbieter lassen es leer. Setzen Sie es nur auf den exakten Wert, den der Anbieter bereitstellt, da manche darauf routen.
Warum erhält mein Receiver-Bind keine Zustellberichte?
Die häufigste Ursache ist eine Nichtübereinstimmung von address_range / addr_ton / addr_npi: Das SMSC routet MO- und DLR-Verkehr zu dem Bind, dessen address_range passt, sodass ein falscher Wert diese stillschweigend zurückhält. Bestätigen Sie die genau bereitgestellten Werte mit dem Anbieter.
Was bedeutet ESME_RALYBND?
ESME_RALYBND (0x00000005) bedeutet, dass sich die ESME bereits in einem gebundenen Zustand befindet und versuchte, auf derselben Sitzung erneut zu binden. Binden Sie genau einmal pro Verbindung; bei einem fehlgeschlagenen Bind öffnen Sie eine neue Verbindung, statt die alte erneut zu binden.
Wie viele gleichzeitige Binds kann ich öffnen?
Das ist ein kommerzielles Limit Ihres Anbieters, kein Limit des Protokolls. Mehr Binds zu öffnen als bereitgestellt, ist eine häufige Ursache für Drosselung oder Kontosperrung — vereinbaren Sie die Bind-Anzahl und die TPS je Bind schriftlich, bevor Sie skalieren.
Quellenspezifikationen
Diese Seite basiert auf den veröffentlichten Standards. (Wird in einem neuen Tab geöffnet.)