BroadNet
SMPPOperationen

SMPP submit_sm: jedes Pflichtfeld

Aktualisiert am 3 Min. LesezeitStandardsbasiert
Direkte Antwort

submit_sm (command_id 0x00000004) sendet eine mobil-terminierte Nachricht von der ESME an das SMSC. Der Body ist eine feste Folge von Pflichtfeldern — Adressierung (TON/NPI + Adresse), esm_class, protocol_id, priority_flag, Terminierung, registered_delivery, data_coding, sm_length und short_message — optional gefolgt von TLVs. submit_sm_resp gibt die message_id des SMSC zurück.

DiagrammEine SMPP-Sitzung zwischen Ihrer Plattform und BroadNet
Ihre Plattform (ESME)
BroadNet SMSC
Eine dauerhafte TCP/TLS-Verbindung
  1. bind_transceiverSitzung öffnen und authentifizieren
  2. bind_transceiver_respSitzung akzeptiert
  3. submit_smNachricht senden
  4. submit_sm_respAkzeptiert, Nachrichten-ID zurückgegeben
  5. deliver_smZustellungsbericht oder eingehende Nachricht
  6. deliver_sm_respBestätigt
  7. enquire_linkKeepalive im Leerlauf
§01

Die vollständige Reihenfolge der Pflichtfelder

Der Body von submit_sm ist eine feste, geordnete Folge — es gibt keine Feld-Tags, sodass Reihenfolge und Größe alles bestimmen. Die Tabelle listet alle Pflichtparameter in Wire-Reihenfolge. short_message darf leer sein, wenn der Text stattdessen in einem message_payload-TLV getragen wird; befüllen Sie niemals beide.

submit_sm-Pflichtparameter (in Wire-Reihenfolge)
#FeldTypAnmerkungen
1service_typeC-Octet String (6)Servicekategorie; normalerweise leer
2source_addr_tonInteger (1)Nummerntyp des Absenders
3source_addr_npiInteger (1)Nummernplan des Absenders
4source_addrC-Octet String (21)Absenderadresse / alphanumerische ID
5dest_addr_tonInteger (1)Nummerntyp des Empfängers
6dest_addr_npiInteger (1)Nummernplan des Empfängers
7destination_addrC-Octet String (21)Empfänger-MSISDN
8esm_classInteger (1)Nachrichtenmodus + Typ + UDHI-Flag
9protocol_idInteger (1)GSM TP-PID; üblicherweise 0
10priority_flagInteger (1)0 (normal) – 3 (höchste)
11schedule_delivery_timeC-Octet String (1|17)Leer = sofort
12validity_periodC-Octet String (1|17)Leer = SMSC Standard
13registered_deliveryInteger (1)Zustellbestätigung anfordern
14replace_if_present_flagInteger (1)0 = nein, 1 = ersetzen
15data_codingInteger (1)Kodierung / DCS
16sm_default_msg_idInteger (1)Vordefinierte Nachrichten-ID; normalerweise 0
17sm_lengthInteger (1)Länge von short_message (0–254)
18short_messageOctet String (0–254)Die Nachrichten-Payload
§02

Adressierung: TON und NPI

source_addr und destination_addr tragen jeweils einen Type of Number (TON) und einen Numbering Plan Indicator (NPI). Für eine internationale MSISDN verwenden Sie TON 1 (International) mit NPI 1 (ISDN/E.164). Für eine alphanumerische Absenderkennung verwenden Sie TON 5 (Alphanumeric) — die source_addr enthält dann bis zu 11 GSM-7-Zeichen. Falsche TON/NPI sind eine führende Ursache für nicht zugestellten oder fehlgeleiteten Verkehr.

Gängige TON- und NPI-Werte
TONBedeutungNPIBedeutung
0Unbekannt0Unbekannt
1International1ISDN (E.163/E.164)
2National3Daten (X.121)
3Netzwerkspezifisch4Telex (F.69)
4Teilnehmernummer6Land Mobile (E.212)
5Alphanumerisch8National
6Abgekürzt9Privat
§03

esm_class

esm_class ist ein Bitfeld, das den Messaging-Modus, den Nachrichtentyp und GSM-spezifische Funktionen festlegt. Das wichtigste Bit für Absender ist UDHI (0x40): Setzen Sie es, wenn short_message mit einem User Data Header beginnt, zum Beispiel einem Verkettungs-Header. Bit 0x80 fordert den GSM-Reply-Path an.

Bedeutung der esm_class-Bits (Auswahl)
BitsFeldWert → Bedeutung
1–0Messaging-Modus0 Standard · 1 Datagramm · 2 Weiterleitung · 3 Speichern und Weiterleiten
5–2Nachrichtentyp0 Standard · 0x04 Zustellbestätigung · 0x08 Zustell-Ack · 0x10 Benutzerbestätigung
6UDHI0x40 = short_message begins with a UDH
7Antwortpfad0x80 = set GSM reply path
§04

data_coding, registered_delivery und Gültigkeit

data_coding wählt die Textcodierung: 0x00 = SMSC-Standard (typischerweise GSM 7-bit), 0x04 = 8-bit-Binär, 0x08 = UCS-2 für Unicode. Die beiden unteren Bits von registered_delivery steuern die Berichte: 0 = keine, 1 = Bericht bei endgültigem Erfolg oder Fehlschlag, 2 = nur bei Fehlschlag. validity_period und schedule_delivery_time verwenden die absolute Form YYMMDDhhmmsstnnp oder eine relative Form; ein leerer String bedeutet sofortige Zustellung und die Standardgültigkeit des SMSC. Halten Sie validity_period bei OTPs eng, damit ein verzögerter Code abläuft, statt veraltet anzukommen.

data_coding — die Werte, die Sie tatsächlich verwenden
WertKodierung
0x00SMSC-Standardalphabet (üblicherweise GSM 7-Bit)
0x03Latin-1 (ISO-8859-1)
0x048-Bit-Binär (Oktett nicht spezifiziert)
0x08UCS-2 (UTF-16BE) — Unicode
§05

Die Response

submit_sm_resp (0x80000004) gibt command_status zurück und, bei Erfolg, eine message_id (C-Octet String, bis zu 65 Zeichen), die das SMSC der Nachricht zuweist. Speichern Sie sie: Sie ist der Schlüssel, den Sie gegen die receipted_message_id im Zustellbericht abgleichen. Achten Sie auf Formatabweichungen — manche SMSCs geben die ID beim Submit hexadezimal und im DLR dezimal zurück, normalisieren Sie daher beide bei der Korrelation.

Häufig gestellte Fragen

Häufig gestellte Fragen

Welche TON/NPI verwende ich für eine alphanumerische Absenderkennung?

Verwenden Sie source_addr_ton = 5 (Alphanumeric) und source_addr_npi = 0 (Unknown). Die source_addr enthält dann bis zu 11 GSM-7-Zeichen. Alphanumerische Absenderkennungen sind reine Anzeigekennungen und können keine Antworten empfangen.

Wie fordere ich in submit_sm einen Zustellbericht an?

Setzen Sie registered_delivery = 1, um einen Bericht bei endgültiger Zustellung oder Fehlschlag zu erhalten, oder 2 nur bei Fehlschlag. Fordern Sie Berichte nur dort an, wo Sie sie tatsächlich verarbeiten, da ungelesene DLRs Durchsatz verschwenden.

Was ist die maximale Länge von short_message?

Das Feld short_message fasst bis zu 254 Oktette, wobei sm_length die genaue Anzahl angibt. Für längeren Text segmentieren Sie entweder mit einem UDH über mehrere submit_sm-PDUs oder tragen die gesamte Nutzlast im message_payload-TLV statt in short_message.

Kann ich sowohl short_message als auch message_payload setzen?

Nein. Befüllen Sie das eine oder das andere. Anbieter weisen ein submit_sm zurück, das die Nachricht sowohl im Pflichtfeld short_message als auch im message_payload-TLV trägt.

Wie sende ich eine Unicode-Nachricht?

Setzen Sie data_coding = 0x08 (UCS-2) und codieren Sie den Text als UTF-16 Big-Endian in short_message. Eine einzelne UCS-2-SMS fasst 70 Zeichen; längerer Unicode-Text wird bei 67 Zeichen je Teil segmentiert.

Referenzen

Quellenspezifikationen

Diese Seite basiert auf den veröffentlichten Standards. (Wird in einem neuen Tab geöffnet.)

BNWird vom BroadNet -Entwicklungsteam betreut.·Messaging in Carrier-Qualität seit 2003
Hänge es an den Draht

Entwicklung mit echtem SMPP Binding und REST-API.

Fordern Sie Testzugriff mit echten Testschlüsseln an: Senden Sie zunächst an Ihre eigene verifizierte Nummer und gehen Sie dann in über 200 Ländern zum Produktivbetrieb über, sobald Ihre Absenderidentität und die Routen genehmigt wurden.