BroadNet
Entwicklerhandbuch · Protokoll·/developers/smpp

SMPP: Der vollständige Protokollleitfaden.

SMPP – das Short-Message-Peer-to-Peer-Protokoll – ist das offene Protokoll auf TCP/IP-Ebene für den SMS-Austausch zwischen einer Anwendung (einem ESME) und dem Nachrichtenzentrum eines Mobilfunkbetreibers (einem SMSC/MC). Es ist das Arbeitspferd des A2P-Messaging: eine persistente Binärverbindung, die dafür gebaut ist, sehr große Nachrichtenmengen samt ihrer Zustellbestätigungen effizient und in Echtzeit zu übertragen. Dieser Leitfaden erklärt SMPP v3.4 – die vorherrschende Version – von Anfang bis Ende und zeigt, wo sich v5.0 unterscheidet.

Lesezeit: 18 Minuten·Aktualisiert im Juli 2026Entwicklerportal

Überblick

SMPP ist ein Protokoll der Telekommunikationsbranche, das Ende der 1990er Jahre von Aldiscon/Logica erstmals veröffentlicht und heute vom SMPP-Entwicklerforum weiterentwickelt wird. Es definiert, wie zwei Kommunikationspartner diskrete Einheiten, sogenannte PDUs (Protocol Data Units), über eine einzelne TCP-Verbindung austauschen: Die Anwendung bindet, sendet Nachrichten, empfängt Empfangsbestätigungen, hält die Verbindung aufrecht und trennt die Verbindung. Da es binär und verbindungsorientiert ist, bewältigt es konstant Arbeitslasten von Millionen von Nachrichten pro Tag mit deutlich geringerem Aufwand als das Öffnen einer HTTP-Anfrage pro Nachricht. Lesen Sie diese Seite vollständig durch, um jedes Feld einer realen SMPP-Sitzung zu verstehen.

Was SMPP ist und wo es seinen Platz hat

Eine SMPP-Sitzung hat immer zwei Rollen. ESME (Externe Kurznachrichten-Entität) ist Ihre Anwendung – eine Massen-SMS-Plattform, ein OTP-Dienst, ein Benachrichtigungssystem. Die SMSC (Short Message Service Centre), genannt ein MC Das Message Center (MSC) in Version 5.0 ist der Betreiber- oder Aggregatorknoten, der Nachrichten zwischen Mobiltelefonen im Mobilfunknetz speichert und weiterleitet. Das ESME ist mit dem SMSC verbunden; das SMSC ist mit dem übergeordneten SS7-/Mobilfunkkern verbunden.

SMPP ist das Rückgrat von A2P (Anwendung-zu-Person) Nachrichten – Bestätigungscodes, Belege, Benachrichtigungen, Marketing – im Gegensatz zu P2P (Person-zu-Person)-SMS zwischen zwei Mobiltelefonen. A2P Der Datenverkehr ist volumenstark, maschinell generiert und auf Zustell- und Empfangsbestätigungen ausgelegt – genau das, wofür SMPP entwickelt wurde.

Warum ein binäres TCP-Protokoll anstelle von HTTP? Eine einzelne SMPP-Bindung ist ein langlebiger Socket. Sobald dieser geöffnet ist, vermeidet man einen TCP- und TLS-Handshake pro Nachricht, es können viele Nachrichten gleichzeitig übertragen werden (asynchrones Windowing), und der SMSC sendet Zustellbestätigungen und eingehende Nachrichten direkt über dieselbe Verbindung zurück. Bei dauerhaft hohem Durchsatz ist dies deutlich effizienter als eine HTTP-API mit Anfrage/Antwort – weshalb Betreiber und große Absender es als Standard verwenden.

Versionsverlauf

  • SMPP v3.3 — die erste weit verbreitete Version; führte ein den Kern-PDU-Satz ein, existierte aber vor TLVs (optionalen Parametern) und der Transceiver-Bindung.
  • SMPP v3.4 — die heute am weitesten verbreitete Version. Hinzugefügt wurden: Transceiver-Bindung, optionale TLV-Parameter, message_payload und data_sm. Nahezu jede reale Integration, die Sie entwickeln werden, verwendet Version 3.4.
  • SMPP v5.0 — die neueste Version. Benennt SMSC in MC um und fügt hinzu: Broadcast-PDUs (broadcast_sm), Stauzustandssignalisierung und weitere standardisierte TLVs. Die Verbreitung ist begrenzt; zunächst wird Version 3.4 unterstützt, Version 5.0 ist optional.

Architektur & Bindungstypen

Die Topologie ist einfach: Der ESME öffnet eine TCP-Verbindung zum SMSC/MC und authentifiziert sich mit einem system_id Und passwordDie Richtung, in die die Sitzung Datenverkehr leiten darf, wird zum Zeitpunkt der Bindung durch Auswahl einer von drei Optionen festgelegt. BindungsmodiJeder Modus ist eine andere Bindungs-PDU.

Sender (TX)
bind_transmitter · 0x00000002

Nur zum Senden. Der ESME kann submit_sm senden, aber in dieser Sitzung keine deliver_sm empfangen. Empfangsbestätigungen müssen über eine separate Empfängerbindung erfolgen.

Empfänger (RX)
bind_receiver · 0x00000001

Nur Empfang. Das SMSC übermittelt deliver_sm (eingehende Nachrichten und DLRs) an das ESME, das in dieser Sitzung keine Nachrichten senden kann.

Transceiver (TRX)
bind_transceiver · 0x00000009

Beide Richtungen in einer Sitzung – submit_sm ausgehend, deliver_sm eingehend. Eingeführt in Version 3.4 und die empfohlene Standardeinstellung für neue Integrationen.

Ein vierter Schauspieler ist RoutingDas SMSC entscheidet pro Nachricht, welchen nachgelagerten Betreiber eine übermittelte Nachricht zum Zielgerät weiterleitet oder verbindet und zu welchem gebundenen ESME eine eingehende (vom Mobiltelefon stammende) Nachricht gehört.

Im Netzwerk läuft SMPP über TCP. Der von der IANA registrierte Standardport ist 2775 für einfache Verbindungen. SMPPS — SMPP in TLS — hat keinen einheitlichen Standardport; Anbieter stellen es auf einem Port ihrer Wahl bereit (3550, 8775 und 2776 sind gängige Beispiele). Verwenden Sie für den Produktivbetrieb immer den vom Anbieter zugewiesenen verschlüsselten Port.

Der Sitzungslebenszyklus

Jede SMPP-Sitzung folgt demselben Ablauf: TCP öffnen, binden, aktiv bleiben, Nachrichten und Empfangsbestätigungen austauschen, dann die Bindung aufheben und die Sitzung beenden. Das folgende Diagramm stellt eine vollständige Transceiver-Sitzung dar – jede Zeile repräsentiert eine PDU, blau vom ESME zum SMSC, grün zurück.

ESME (Ihre App)
SMSC / MC (BroadNet)
bind_transceiver
Öffnen Sie die Sitzung mit system_id und Passwort.
1
2
bind_transceiver_resp
Bindung akzeptiert (command_status = ESME_ROK)
3
enquire_link / _resp
Keepalive alle ~30 s im Leerlauf
submit_sm
Senden Sie eine Nachricht an eine Ziel-MSISDN
4
5
submit_sm_resp
Gibt die SMSC message_id zurück.
6
deliver_sm
Zustellbestätigung (esm_class = 0x04) oder eingehender MO
deliver_sm_resp
ESME bestätigt den Empfang
7
unbind
Sitzung ordnungsgemäß beenden.
8
9
unbind_resp
SMSC bestätigt – TCP-Verbindung wird geschlossen
ESME → SMSC SMSC → ESME Keepalive (in beide Richtungen)

Zwei wichtige Details. Erstens: submit_sm_resp kehrt sofort zurück und bedeutet lediglich „zur Zustellung angenommen“ – das tatsächliche Ergebnis kommt später als deliver_sm-Zustellbestätigung. Zweitens: Zu jeder Anforderungs-PDU gibt es eine passende _resp, die deren sequence_number zurückgibt – so werden asynchrone Antworten ihren Anfragen zugeordnet.

PDU-Anatomie

Alles an einer SMPP-Verbindung ist ein PDUJede PDU beginnt mit einem festen 16-Byte-Header aus vier 4-Byte-Ganzzahlen (32 Bit, Big-Endian), gefolgt von einem befehlsspezifischen Rumpf. Lesen Sie zuerst den Header, dann wissen Sie genau, wie Sie den Rest lesen müssen.

Byte 0
4
8
12
15
16 …
command_length0–3 • 4 B
command_id4–7 • 4 B
command_status8–11 • 4 B
sequence_number12–15 • 4 B
Körper · TLVs16 … · Variable
Fester 16-Byte-Header (vier 32-Bit-Big-Endian-Ganzzahlen), gefolgt von einem Rumpf variabler Länge.
OffsetFeldGrößeBedeutung
0–3Befehlslänge4 BytesGesamtlänge der gesamten PDU in Oktetten, einschließlich Header und Body.
4–7Befehls-ID4 BytesUm welche Operation handelt es sich (z. B. submit_sm = 0x00000004)? Antworten setzen das oberste Bit (0x80000000).
8–11Befehlsstatus4 Bytes0 in Anfragen; ein ESME_R* Ergebniscode in Antworten (0 = ESME_ROK = Erfolg).
12–15Sequenznummer4 BytesDer Anrufer hat die ID 1…0x7FFFFFFF zugewiesen; die entsprechende _resp gibt sie zurück, um sie zu korrelieren.
16…KörperVariableObligatorische Parameter für diesen Befehl, anschließend alle optionalen TLV-Parameter.

Der Textkörper endet mit einer beliebigen Anzahl von TLVs — Optionale Parameter kodiert als Tag (2 Bytes), Länge (2 Bytes), Wert (Länge Bytes). TLVs sind die Erweiterung des Protokolls durch v3.4, ohne ältere Peers zu beeinträchtigen: message_payload, receipted_message_id, sar_* Verkettungsfelder und viele weitere werden als TLVs übertragen.

Der Sequenznummer ist der Schlüssel zur Fensterung. Da SMPP asynchron ist, kann ein ESME viele submit_sm PDUs senden – jede mit einer inkrementierenden Sequenznummer –, bevor Antworten eintreffen. Wenn submit_sm_resp PDUs zurückkommen, gibt ihre Sequenznummer an, welche Übermittlung jede einzelne beantwortet. Die Anzahl der zulässigen unbestätigten PDUs während der Übertragung ist die Fenstergröße

Core-PDUs-Referenz

Dies sind die Operationen, die Sie tatsächlich verwenden werden. Jede Anfrage hat eine Antwort-PDU, deren command_id die Anfrage-ID mit gesetztem High-Bit (0x80000000) ist. So gehört beispielsweise submit_sm 0x00000004 zu submit_sm_resp 0x80000004.

PDUBefehls-IDZweck
bind_receiver0x00000001Öffnen Sie eine Sitzung, in der nur empfangen wird.
bind_transmitter0x00000002Öffnen Sie eine Sitzung nur zum Senden.
bind_transceiver0x00000009Öffnen Sie eine bidirektionale Sitzung (v3.4).
submit_sm0x00000004Senden Sie eine einzelne Nachricht an ein Ziel.
submit_multi0x00000021Senden Sie eine Nachricht an bis zu 254 Empfänger.
deliver_sm0x00000005SMSC → ESME: eine Zustellbestätigung oder eingehende (MO) Nachricht.
data_sm0x00000103TLV-basierte, bidirektionale Alternative zu submit_sm / deliver_sm.
query_sm0x00000003Erfragen Sie beim SMSC den aktuellen Status einer übermittelten Nachricht.
cancel_sm0x00000008Eine zuvor gesendete, noch nicht zugestellte Nachricht stornieren.
replace_sm0x00000007Ersetzen Sie den Inhalt/Zeitplan einer ausstehenden Nachricht.
enquire_link0x00000015Keepalive – bestätigen, dass die Sitzung noch aktiv ist.
unbind0x00000006SMPP-Sitzung ordnungsgemäß beenden.
generic_nack0x80000000Negative Bestätigung für eine nicht auswertbare/ungültige PDU.

submit_sm Feld für Feld

submit_sm ist die PDU, die Sie am häufigsten senden werden. Ihr Inhalt besteht aus einer Folge obligatorischer Parameter und optionalen TLVs. Dies sind die Felder, die in der Praxis relevant sind.

FeldWas es tut
service_typeOptionale SMS Anwendungskategorie (z. B. leer oder ein Wert, den Ihr SMSC für Routing-/Abrechnungsklassen verwendet).
source_addr_ton / _npiNummerntyp und Nummerierungsplanindikator für den Absender. TON 5 = alphanumerisch (eine Absenderkennung); TON 1 = international E.164.
source_addrDie Absenderadresse – ein Kurzcode, eine lange Nummer oder eine bis zu 11-stellige alphanumerische Absenderkennung.
dest_addr_ton / _npiTON / NPI für das Ziel. Üblicherweise TON 1 (international), NPI 1 (ISDN / E.164).
destination_addrDie MSISDN des Empfängers, normalerweise im internationalen Format ohne vorangestelltes +.
esm_classMessaging-Modus/Typ-Bitmaske – z. B. wird die Anforderung einer Zustellbestätigung durch registered_delivery verarbeitet, während das UDHI Bit (0x40) angibt, dass short_message mit einem UDH beginnt.
data_codingDer DCS: 0 = GSM 7-Bit (Standard), 3 = Latin-1, 8 = UCS-2 (Unicode). Bestimmt die Zeichenbegrenzung.
registered_deliverySetzen Sie den Wert auf 1, um eine Zustellbestätigung (deliver_sm) für diese Nachricht anzufordern; auf 0, wenn keine Bestätigung angefordert wird.
sm_length / short_messageDie Nutzlastlänge (0–254) und die Nachrichtenoktette selbst, kodiert gemäß data_coding.
message_payload (TLV 0x0424)Optionales TLV das den Nachrichtentext anstelle von short_message enthält – wird für längere Inhalte über 254 Oktette hinaus verwendet.
schedule_delivery_time / validity_periodOptionale absolute/relative Zeitangabe für die Zustellungsplanung und wie lange das SMSC die Zustellung wiederholen soll.

Datenkodierung und -verkettung

Der data_coding Das Datenkodierungsschema (DCS) gibt dem Mobiltelefon vor, wie die Bytes zu interpretieren sind, und legt fest, wie viele Zeichen in eine SMS passen.

DatenkodierungCodierungEinzelVerkettet
0GSM 7-Bit-Standardalphabet160 Zeichen153 Zeichen / Teil
3Latin-1 (ISO-8859-1), 8-Bit140 Zeichen134 Zeichen / Teil
8UCS-2 (UTF-16BE) — Unicode70 Zeichen67 Zeichen / Teil

Eine Nachricht, die länger als ein Segment ist, wird auf dem Mobiltelefon aufgeteilt und mithilfe eines UDH (Benutzerdatenkopf) wird jedem Teil vorangestellt. Das Verkettungselement verwendet IEI 0x00 (8-Bit Referenz) – ein 6-Oktett-Header mit einer Referenznummer, der Gesamtanzahl der Bauteile und dem Index dieses Bauteils. Diese 6 Oktette sind der Grund, warum die Grenzwerte pro Bauteil auf 153 (GSM 7-Bit) bzw. 67 (UCS-2) sinken. Beim Senden einer UDH innerhalb von short_message muss auch das UDHI-Bit (0x40) in esm_class gesetzt werden.

Es gibt zwei Möglichkeiten, längere Inhalte zu senden: Entweder erstellen Sie die UDH-segmentierten Teile selbst (jeweils eine submit_sm mit festgelegtem UDHI) oder Sie übergeben den gesamten Inhalt an das SMSC. message_payload TLV und lassen Sie es segmentieren. Einige SMSCs akzeptieren stattdessen die TLVs sar_msg_ref_num / sar_total_segments / sar_segment_seqnum zur Beschreibung der Verkettung ohne UDH.

Zustellberichte (DLR)

Wenn Sie einstellen registered_delivery = 1, Das SMSC informiert Sie später über den Verbleib der Nachricht, indem es Ihnen eine Benachrichtigung sendet. deliver_sm mit gesetztem Zustellberichtbit in esm_class (0x04Der Belegtext befindet sich im Feld „short_message“ als bekanntes Schlüsselwort:

deliver_sm · receipt text
id:1a2b3c4d5e sub:001 dlvrd:001 submit date:2607251432 done date:2607251432 stat:DELIVRD err:000 text:Your code is 8

Der id entspricht der empfangenen message_id in submit_sm_resp (wird auch in receipted_message_id TLV 0x001E ausgegeben). stat Das Feld enthält den Endzustand: Das ...

StatistikBedeutung
DELIVRDAn das Mobiltelefon übermittelt. Erfolgsstatus.
EXPIREDDie Gültigkeitsdauer ist vor der Zustellung abgelaufen – das SMSC hat die erneuten Zustellversuche eingestellt.
DELETEDDie Nachricht wurde im SMSC gelöscht.
UNDELIVUnzustellbar — keine Route oder das Mobiltelefon konnte nicht erreicht werden.
ACCEPTDAkzeptiert (z. B. manuell im SMSC gelesen) – ein Zwischenzustand.
UNKNOWNDem SMSC liegen keine Statusinformationen zu der Nachricht vor.
REJECTDAbgelehnt vom SMSC oder einem nachgelagerten Netzwerk (z. B. blockierter Absender).

Beantworten Sie eine deliver_sm-Nachricht immer mit einem deliver_sm_respAndernfalls wird das SMSC die Empfangsbestätigung erneut senden und die Verbindung möglicherweise drosseln oder trennen. Beachten Sie, dass die Formatierung der Empfangsbestätigung nicht vollständig standardisiert ist – die Anbieter unterscheiden sich geringfügig in der Feldreihenfolge und der Zuordnung der Fehlercodes.

Fehler-/Befehlsstatuscodes

Jede Antwort-PDU enthält eine command_status in seiner Kopfzeile — ein ESME_R* Code. Null bedeutet Erfolg. Alle anderen Werte beschreiben, warum die Anfrage abgelehnt wurde. Dies sind die Codes, die Ihnen am häufigsten begegnen werden.

CodeWertBedeutung
ESME_ROK0x00000000Kein Fehler – Erfolg.
ESME_RINVMSGLEN0x00000001Ungültige Nachrichtenlänge (Problem sm_length / Nutzdaten).
ESME_RINVCMDLEN0x00000002Ungültige command_length – die PDU Rahmenstruktur ist fehlerhaft.
ESME_RINVCMDID0x00000003Unbekannte oder nicht unterstützte command_id.
ESME_RINVBNDSTS0x00000004Befehl im aktuellen Bindungszustand ungültig (z. B. Submit bei einer RX Bindung).
ESME_RALYBND0x00000005ESME ist bereits gebunden.
ESME_RINVSRCADR0x0000000AUngültige Absenderadresse (Sender-ID).
ESME_RINVDSTADR0x0000000BUngültige Zieladresse.
ESME_RBINDFAIL0x0000000DBindung fehlgeschlagen — falsche system_id / falsches Passwort.
ESME_RINVPASWD0x0000000EUngültiges Passwort.
ESME_RTHROTTLED0x00000058Drosselungsfehler – Sie haben die zulässige Nachrichtenrate überschritten.
ESME_RSUBMITFAIL0x00000045submit_sm / submit_multi fehlgeschlagen.
ESME_RSYSERR0x00000008SMSC Systemfehler.

Das vollständige Verzeichnis – einschließlich der anbieterspezifischen Sortimente – ist durchsuchbar in der SMPP-Fehlercode-Referenz

Durchsatz, Fensterung und Drosselung

Der Durchsatz in SMPP wird gemessen in TPS — Transaktionen (submit_sm) pro Sekunde — und dies wird durch zwei Faktoren bestimmt: die vom SMSC zugelassene Rate und die Anzahl der Nachrichten, die Sie gleichzeitig senden. Da SMPP asynchron ist, müssen Sie nicht auf jede submit_sm_resp warten, bevor Sie die nächste PDU senden. Die Anzahl der gleichzeitig zulässigen unbestätigten Übermittlungen ist Ihre Fenstergröße (üblicherweise 10–100). Ein größeres Fenster kaschiert die Roundtrip-Latenz und erhöht die effektive Transaktionsrate (TPS) – bis zum Maximum des SMSC.

  • Respektiere das Gaspedal. Wenn der SMSC den Wert ESME_RTHROTTLED (0x58) zurückgibt, sollten Sie einen Rücksetzer einlegen – pausieren Sie und versuchen Sie es erneut mit exponentiellem Backoff, anstatt die Bindung wiederholt zu versuchen. Dies kann zu einer Verbindungsunterbrechung führen.
  • Halten Sie sich im Rhythmus am Leben. Sende enquire_link etwa alle 30 Sekunden im Leerlauf; wenn einige Anfragen unbeantwortet bleiben, gehe davon aus, dass die Verbindung nicht mehr funktioniert.
  • Knüpfen Sie bewusst wieder Kontakt. Bei Verbindungsabbruch erneut verbinden und mit Backoff und Jitter neu binden; keine enge Schleife verwenden. Ausstehende Sequenznummern verfolgen, um Belege nach einer erneuten Verbindung abgleichen zu können.
  • Skalieren Sie mit Bindungen, aber vorsichtig. Höhere Gesamttransaktionen pro Sekunde (TPS) resultieren üblicherweise aus mehreren Bindungen – jedoch nur bis zu dem Limit, das Ihr Anbieter pro Konto autorisiert.

Codebeispiel

Ein beispielhafter Ablauf von Verbinden → Binden → Absenden in Node-typischem Pseudocode. Echte SMPP-Bibliotheken (z. B. node-smpp, jSMPP für Java oder python-smpplib) übernehmen die PDU-Kodierung; dies zeigt die Struktur der Sitzung, nicht die API einer bestimmten Bibliothek.

smpp-submit · illustrative
import smpp from "smpp";

// 1. Open a TCP (or TLS) session to the SMSC.
const session = smpp.connect({
  // Host, port and bind credentials come with your test access.
  // Plain SMPP conventionally uses 2775; the TLS port is provided with your account.
  url: process.env.SMPP_URL!,             // e.g. smpp://<host>:2775 (plain) or smpps://<host>:<tls-port>
  auto_enquire_link_period: 30000,        // keepalive every 30s
});

// 2. Bind as a transceiver.
session.bind_transceiver(
  {
    system_id: "YOUR_SYSTEM_ID",
    password:  "YOUR_PASSWORD",
    system_type: "",
  },
  (pdu) => {
    if (pdu.command_status !== 0) {
      throw new Error("bind failed: 0x" + pdu.command_status.toString(16));
    }

    // 3. Submit a Unicode message, asking for a delivery receipt.
    session.submit_sm(
      {
        source_addr_ton: 5,                // alphanumeric Sender ID
        source_addr:      "BroadNet",
        dest_addr_ton:    1,               // international E.164
        destination_addr: "447700900123",
        registered_delivery: 1,            // request a DLR
        data_coding: 8,                    // UCS-2 (Unicode)
        short_message: "Your code is 8123",
      },
      (submitResp) => {
        // submit_sm_resp returns the SMSC message_id.
        console.log("accepted, message_id =", submitResp.message_id);
      }
    );
  }
);

// 4. Receive delivery receipts on the same session.
session.on("deliver_sm", (pdu) => {
  if ((pdu.esm_class & 0x04) === 0x04) {   // delivery-receipt bit
    console.log("DLR:", pdu.short_message.message);
  }
  session.send(pdu.response());            // ALWAYS deliver_sm_resp
});

BroadNet SMPP

BroadNet betreibt ein SMSC-Gateway in Carrier-Qualität, das SMPP v3.4-Bindungen über TLS akzeptiert. Sie erhalten: Transceiver-Bindungen, hohe Transaktionsraten (TPS) mit asynchroner Fensterung, vollständige Zustellbestätigungen, Unicode und Zeichenkettenverkettung sowie eine IP-Listen-basierte, authentifizierte Verbindung, um Netzbetreiber weltweit zu erreichen. Es handelt sich um dasselbe Protokoll, das auf dieser Seite erläutert wird – nur eben für reale Routen.

Verbindung über SMPP

Fordern Sie einen Bind für Ihr Konto an, und unser Sales-Engineering-Team richtet Ihre system_id, Ihren TLS-Endpunkt, Ihre TPS und Ihre IP-Allowlist ein. Oder lesen Sie, wie das Gateway aufgebaut ist.

Häufig gestellte Fragen

Welchen Port verwendet SMPP?

Der von der IANA registrierte Standardport für unverschlüsseltes SMPP ist TCP-Port 2775. Es gibt keinen einheitlichen Standard-TLS-Port – SMPP über TLS (SMPP over TLS) verwendet üblicherweise einen anbieterspezifischen Port wie 3550, 8775 oder 2776. Verwenden Sie daher immer den Port, den Ihr SMSC-Betreiber Ihnen zuweist. BroadNet veröffentlicht seinen Bind-Host, den unverschlüsselten Port und den TLS-Port zusammen mit Ihren Zugangsdaten.

Worin besteht der Unterschied zwischen submit_sm und data_sm?

submit_sm ist die primäre PDU, die ein ESME zum Senden einer einzelnen Kurznachricht verwendet. Sie enthält das klassische Feld short_message (bis zu 254 Oktette) sowie optionale TLVs. data_sm ist eine optimierte, symmetrische Alternative, die mit SMPP v3.4 eingeführt wurde. Sie enthält stets den Inhalt des message_payload-TLVs und kann in beide Richtungen fließen (ESME→SMSC oder SMSC→ESME). Der Großteil des A2P-Verkehrs verwendet submit_sm; data_sm kommt zum Einsatz, wenn die bidirektionale Struktur mit ausschließlich TLVs bevorzugt wird.

Wie verarbeitet SMPP Unicode?

Unicode wird durch Setzen von data_coding auf 8 (UCS-2 / UTF-16BE Big-Endian) gesendet. Ein einzelnes UCS-2-Segment umfasst 70 Zeichen; verkettete UCS-2-Teile umfassen jeweils 67 Zeichen, da 6 Oktette vom UDH-Verkettungsheader belegt werden. GSM 7-Bit (data_coding 0) ist der Standard für einfachen lateinischen Text mit 160/153 Zeichen.

Was ist eine Transceiver-Bindung?

Ein Transceiver-Bind (TRX-Bind) ist eine einzelne SMPP-Sitzung, die mit `bind_transceiver` geöffnet wird und über dieselbe TCP-Verbindung sowohl Nachrichten senden (`submit_sm`) als auch Nachrichten und Zustellbestätigungen empfangen kann (`deliver_sm`). Er ersetzt das ältere Verfahren, separate Sender- und Empfänger-Binds zu öffnen, und ist für die meisten modernen Integrationen die empfohlene Vorgehensweise.

Warum sollte man SMPP einer HTTP-API vorziehen?

SMPP ist ein persistentes, binäres TCP-Protokoll, das für dauerhaft hohen Durchsatz entwickelt wurde. Eine langlebige Verbindung vermeidet TLS/TCP-Handshakes pro Nachricht, unterstützt asynchrones Windowing (viele ausstehende submit_sm-Anfragen vor einer Bestätigung) und übermittelt Deliver_sm-Empfangsbestätigungen und vom Mobilgerät stammende Nachrichten in Echtzeit über denselben Socket. Bei sehr hohem, konstantem A2P-Datenvolumen ist es effizienter als HTTP-Anfrage/Antwort; HTTP REST ist einfacher für geringere Datenmengen und komplexere Kanäle.

Was ist enquire_link?

enquire_link ist eine schlanke Keepalive-PDU, die ein Peer sendet, um zu bestätigen, dass die SMPP-Sitzung und die zugrunde liegende TCP-Verbindung noch bestehen. Die Gegenseite antwortet mit enquire_link_resp. Sie wird typischerweise alle 30 Sekunden in Leerlaufzeiten gesendet. Bleiben mehrere enquire_link-Anfragen unbeantwortet, betrachtet der Peer die Verbindung als unterbrochen und stellt sie wieder her.

Was bedeutet command_length in einem PDU-Header?

Die erste 4-Byte-Variable des SMPP-PDU-Headers, `command_length`, gibt die Gesamtlänge der PDU in Oktetten an, einschließlich des 16-Byte-Headers und des gesamten Inhalts. Ein Empfänger liest diese 4 Bytes zuerst, um die genaue Anzahl der noch zu lesenden Bytes für die vollständige PDU zu ermitteln, bevor er `command_id`, `command_status` und `sequence_number` analysiert.

Was ist ein Zustellbericht (DLR) in SMPP?

Eine Zustellbestätigung ist die SMSC-Mitteilung an die ESME über den endgültigen Status einer übermittelten Nachricht. Sie trifft als deliver_sm PDU mit gesetztem esm_class-Zustellbestätigungsbit (0x04) ein. Die Kurznachricht enthält eine Zeichenfolge mit den Schlüsselwörtern id, sub, dlvrd, Übermittlungsdatum, Lieferdatum, stat und err, wobei stat den endgültigen Status wie DELIVRD, EXPIRED, UNDELIV oder REJECTD angibt.

Auf dem Drahtseil aufbauen

Bereit für die Bindung über SMPP?