Zrozumienie pola PID w SMPP

Co to jest pole PID w SMPP?

Identyfikator Protokołu (PID) w SMPP (Short Message Peer-to-Peer Protocol) to 1-bajtowe pole w ramach PDU (Protocol Data Units) SMPP. Identyfikuje protokół używany przez system źródłowy lub dostarcza specjalne instrukcje dotyczące obsługi wiadomości. Pole PID jest zdefiniowane w operacjach submit_sm, deliver_sm i data_sm i jest kluczowe dla:

  • Określania protokołów wyższych warstw (np. X.400, Telnet)
  • Wyzwalania specjalnych typów wiadomości (np. powiadomień o poczcie głosowej)
  • Obsługi zastępowania wiadomości (np. nadpisywanie istniejących wiadomości)

Struktura PID i maska bitowa

PID to maska bitowa, w której określone bity kontrolują zachowanie protokołu. Jego struktura jest zgodna ze specyfikacjami GSM 03.40:

Bity Opis
7-5 Typ protokołu: Wskazuje protokół (np. GSM, Telex lub SMS).
4-0 Instrukcje/Flagi: Specjalna obsługa (np. zastąpienie wiadomości, poczta głosowa).

Kluczowe wartości PID i ich interpretacja

PID (Hex) Binarnie Opis
0x00 00000000 Domyślne (brak specjalnego protokołu)
0x01 00000001 Telex (przestarzałe)
0x03 00000011 X.400 (przestarzałe)
0x40 01000000 Wiadomość zwrotnego połączenia (obsługa karty SIM)
0x41 01000001 Zastąpienie wiadomości SMS (nadpisanie istniejącej)
0x42 01000010 Powiadomienie o poczcie głosowej
0x7F 01111111 Zarezerwowane do przyszłego użycia
Uwaga: Wartości takie jak 0x40–0x7F są specyficzne dla sieci i mogą się różnić w zależności od SMSC. Zawsze weryfikuj u swojego dostawcy.

Przypadki użycia i scenariusze

1. Zastępowanie wiadomości (PID=0x41)

Używane do nadpisania istniejącej wiadomości przechowywanej na urządzeniu odbiorcy. Częste w systemach OTP (One-Time Password), gdzie nowe hasło zastępuje stare.

2. Powiadomienie o poczcie głosowej (PID=0x42)

Wyzwala wizualne/dźwiękowe powiadomienie na urządzeniu odbiorcy o nowej wiadomości głosowej. Treść SMS jest często pusta, ponieważ sam PID jest wyzwalaczem.

3. Pobieranie danych SIM (PID=0x40)

Instruuje kartę SIM do przetworzenia wiadomości (np. aktualizacja wstępnie skonfigurowanych ustawień).

Przykładowe PDU SMPP z PID

Przykład 1: Domyślny PID (0x00)

0000001D  // Długość polecenia (29 bajtów)
00000004  // ID polecenia (SubmitSM)
00000001  // Numer sekwencji
00        // Źródłowy TON
00        // Źródłowy NPI
736F7572636500  // Adres źródłowy ("source")
00        // Docelowy TON
00        // Docelowy NPI
36353433323100  // Adres docelowy ("654321")
00        // Klasa ESM
00        // Identyfikator protokołu (PID=0x00)
00        // Flaga priorytetu
00        // Czas dostarczenia
00        // Okres ważności
00        // Zarejestrowana dostawa
00        // Zastąpienie, jeśli obecne
00        // Schemat kodowania danych (DCS=0x00)
00        // Domyślny ID wiadomości SM
07        // Długość SM (7 septetów)
C8329BFD06DDDF72  // Ładunek ("Hello!")
    

Przykład 2: Powiadomienie o poczcie głosowej (PID=0x42)

0000001D  // Długość polecenia (29 bajtów)
00000004  // ID polecenia (SubmitSM)
00000002  // Numer sekwencji
00        // Źródłowy TON
00        // Źródłowy NPI
736F7572636500  // Adres źródłowy ("source")
00        // Docelowy TON
00        // Docelowy NPI
36353433323100  // Adres docelowy ("654321")
00        // Klasa ESM
42        // Identyfikator protokołu (PID=0x42: Poczta głosowa)
00        // Flaga priorytetu
00        // Czas dostarczenia
00        // Okres ważności
00        // Zarejestrowana dostawa
00        // Zastąpienie, jeśli obecne
00        // Kodowanie danych (DCS=0x00)
00        // Domyślny ID wiadomości SM
00        // Długość SM (0 bajtów: Brak ładunku)
    

Przykład 3: Zastąpienie istniejącej wiadomości (PID=0x41)

0000001D  // Długość polecenia (29 bajtów)
00000004  // ID polecenia (SubmitSM)
00000003  // Numer sekwencji
00        // Źródłowy TON
00        // Źródłowy NPI
736F7572636500  // Adres źródłowy ("source")
00        // Docelowy TON
00        // Docelowy NPI
36353433323100  // Adres docelowy ("654321")
00        // Klasa ESM
41        // Identyfikator protokołu (PID=0x41: Zastąpienie)
00        // Flaga priorytetu
00        // Czas dostarczenia
00        // Okres ważności
01        // Zarejestrowana dostawa (żądanie potwierdzenia)
00        // Zastąpienie, jeśli obecne
00        // Kodowanie danych (DCS=0x00)
00        // Domyślny ID wiadomości SM
07        // Długość SM (7 septetów)
C8329BFD06DDDF72  // Ładunek ("Nowe OTP: 1234")
    

Interakcja PID z TP-Protocol-Identifier (GSM)

W sieciach GSM PID jest mapowany na TP-Protocol-Identifier w TPDU SMS. Kluczowe mapowania obejmują:

  • 0x41: Polecenie zastąpienia (GSM 03.40 TP-PID=0x41)
  • 0x42: Poczta głosowa (GSM 03.40 TP-PID=0x42)

Częste pułapki

  • Używanie zarezerwowanych wartości PID (np. 0x7F) bez wsparcia SMSC.
  • Niezgodność PID i DCS (np. użycie kodowania UCS2 dla danych SIM).
  • Ignorowanie specyficznych dla sieci zasad (np. PID=0x40 może wymagać specjalnej konfiguracji SMSC).

Podsumowanie

Pole PID jest kluczowe dla zaawansowanego routingu i obsługi SMS. Choć często ustawiane na 0x00 (domyślne), jego specjalne wartości umożliwiają funkcje takie jak zastępowanie wiadomości, aktualizacje SIM i powiadomienia o poczcie głosowej. Zawsze testuj konfiguracje PID z SMSC i odwołuj się do specyfikacji GSM 03.40 lub SMPP v5.0 dla dokładnego zachowania.

More information