Wie man Daten in das SMPP SM-Feld einfügt

In SMPP (Short Message Peer-to-Peer) ist die Short Message (SM)-Nutzlast der eigentliche Text (oder Binärdaten) der zu übertragenden SMS-Nachricht. Um die korrekte Interpretation dieses Inhalts sicherzustellen, spielt das Feld data_coding in der PDU eine entscheidende Rolle, indem es das Kodierungsformat der Nachricht angibt.

Häufige SMPP-Kodierungen

Das Feld data_coding ist 1 Byte groß und informiert die SMSC darüber, wie die Nachrichtennutzlast zu interpretieren ist.

HexDezimalKodierungBeschreibung
0x000GSM 7-bit StandardStandard-SMS-Zeichensatz
0x011ASCII8-bit ASCII (Latin-1-Teilmenge)
0x033Latin-1 (ISO 8859-1)Westeuropäischer Zeichensatz
0x088UCS2Unicode (16-bit, big-endian)
0x044BinärRoh-8-bit-Binärdaten

Beispiele für kodierte Nachrichten

1. GSM 7-bit (data_coding = 0x00)

Standard-SMS-Kodierung. Effizient (bis zu 160 Zeichen in einer einzelnen Nachricht).

Text: "Hello"
GSM 7-bit Packed: C8 32 9B FD 06

2. UCS2 (data_coding = 0x08)

Wird für nicht-lateinische Schriften verwendet (z.B. Arabisch, Chinesisch, Emojis). Unterstützt 70 Zeichen pro Nachricht.

Text: "مرحبا"
UCS2 Hex: 0645 0631 062D 0628 0627
Bytes (hex): 06 45 06 31 06 2D 06 28 06 27

3. ASCII (data_coding = 0x01)

Nur grundlegende lateinische Zeichen, weniger platzsparend als GSM 7-bit.

Text: "Hello"
ASCII Hex: 48 65 6C 6C 6F

SMPP PDU-Beispiel mit UCS2-Kodierung

Hier ist eine SMPP submit_sm-PDU mit einer Unicode-Nachricht:

0000004B  // Befehlslänge (75 Bytes)
00000004  // Befehls-ID (submit_sm)
00000000  // Befehlsstatus
00000001  // Sequenznummer
74657374  // service_type: "test"
01        // source_addr_ton: International
01        // source_addr_npi: ISDN
31323334  // source_addr: "1234" (ASCII)
00
01        // dest_addr_ton
01        // dest_addr_npi
35363738  // destination_addr: "5678"
00
00        // esm_class
00        // protocol_id
00        // priority_flag
00        // schedule_delivery_time
00        // validity_period
00        // registered_delivery
00        // replace_if_present_flag
08        // data_coding: UCS2
00        // sm_default_msg_id
0A        // sm_length: 10 Bytes
06450631  // Nachricht in UCS2 (z.B. "مر")
062D0628

Kodierung und Verkettung

Lange Nachrichten werden mithilfe von UDH (User Data Header) in Teile aufgeteilt. Dies verringert die maximale Nutzlastgröße:

  • GSM 7-bit: 160 → 153 Zeichen pro Teil
  • UCS2: 70 → 67 Zeichen pro Teil

Beispiel-UDH für einen Nachrichtenteil:

05 00 03 CC 02 01
// 05: Header-Länge
// 00 03: Verkettungs-IEI
// CC: Nachrichtenreferenz
// 02: Gesamtteile
// 01: aktueller Teil

Zusammenfassung

SMPP bietet durch das Feld data_coding flexible Kodierungsoptionen. Die richtige Kodierung gewährleistet die Kompatibilität über globale Netzwerke hinweg, insbesondere bei der Handhabung von mehrsprachigem Text oder Binärdaten. Entwickler müssen die Kodierungstypen mit dem Inhalt und den erwarteten Empfängern abgleichen, um Nachrichtenkorruption zu vermeiden.

Referenzen

  • SMPP 3.4 Spezifikation
  • GSM 03.38 Zeichensatz
  • Unicode-Standard

More information