Jak skonfigurować pole Replace if Present w SMPP

Co to jest pole Replace If Present?

Pole Replace If Present w SMPP to 1-bajtowa flaga w PDU, takich jak submit_sm, która instruuje SMSC, aby zastąpić istniejącą wiadomość przechowywaną na urządzeniu odbiorcy lub w kolejce SMSC. Kluczowe zastosowania obejmują:

  • Aktualizowanie treści wrażliwych na czas (np. OTP, alerty statusowe)
  • Zapobieganie duplikowaniu wiadomości
  • Zarządzanie ograniczeniami pamięci urządzenia

Wartości pola i ich interpretacja

Pole używa prostej struktury podobnej do boolean:

Wartość (Hex) Opis
0x00 NIE zastępuj istniejących wiadomości (domyślnie)
0x01 Zastąp istniejące wiadomości, jeśli są obecne
Uwaga: Logika zastępowania wiadomości zależy od implementacji SMSC. Typowe kryteria dopasowania obejmują:
  • Adresy źródłowe/docelowe
  • ID wiadomości (jeśli podane)
  • ID protokołu (PID=0x41 często wywołuje zastąpienie)

Przykłady zastosowań

1. Aktualizacja wiadomości OTP

replace_if_present: 0x01  // Zastąp poprzednią wiadomość OTP
PID: 0x41                 // ID protokołu dla zastąpienia
payload: "Twój nowy OTP: 5678"
    

2. Odświeżenie wiadomości kampanii

replace_if_present: 0x01  // Aktualizuj treść promocyjną
PID: 0x00                 // Domyślny protokół
payload: "Wyprzedaż błyskawiczna: Nowe ceny!"
    

3. Zarządzanie kolejką

replace_if_present: 0x01  // Nadpisz wiadomość w kolejce
scheduled_delivery_time: (przyszły znacznik czasu)
    

Przykłady PDU SMPP

Przykład 1: Zastępowanie wyłączone (0x00)

0000001D  // Długość polecenia (29 bajtów)
00000004  // ID polecenia (SubmitSM)
00000001  // Numer sekwencji
...
00        // Replace If Present (0x00: Wyłączone)
...
07        // Długość SM (7 septetów)
C8329BFD06DDDF72  // Ładunek ("Hello!")
    

Przykład 2: Zastępowanie włączone (0x01)

0000001D  // Długość polecenia (29 bajtów)
00000004  // ID polecenia (SubmitSM)
00000002  // Numer sekwencji
...
01        // Replace If Present (0x01: Włączone)
...
07        // Długość SM (7 septetów)
E8329BFD0E...  // Ładunek ("Updated: 3 PM")
    

Przykład 3: Połączenie z PID=0x41

0000001D  // Długość polecenia (29 bajtów)
00000004  // ID polecenia (SubmitSM)
00000003  // Numer sekwencji
...
41        // ID protokołu (PID=0x41: Zastąp)
01        // Replace If Present (0x01)
...
07        // Długość SM (7 septetów)
C8329BFD06...  // Ładunek ("OTP: 9876")
    

Interakcje z innymi polami

  • ID protokołu (PID): PID=0x41 wyraźnie wywołuje zastąpienie w wielu SMSC
  • message_id: Niektóre SMSC używają tego do identyfikacji wiadomości do zastąpienia
  • registered_delivery: Potwierdzenia wskazują, czy zastąpienie się powiodło

Typowe pułapki

  • Włączanie zastępowania bez wsparcia SMSC
  • Nieustawianie message_id dla celowego zastąpienia
  • Zakładanie, że wszystkie SMSC używają tej samej logiki zastępowania
  • Niezgodność wartości PID i replace_if_present
Uwaga dotycząca zachowania SMSC:
Zasady zastępowania różnią się znacznie. Niektóre SMSC:
  • Zastępują tylko wiadomości z pasującymi źródłami/docelowymi
  • Ignorują replace_if_present, jeśli PID≠0x41
  • Ograniczają zastępowanie do wiadomości w kolejce SMSC (nie dostarczonych)

Podsumowanie

Pole Replace If Present zapewnia kluczową kontrolę nad zarządzaniem cyklem życia wiadomości, ale wymaga starannej koordynacji z możliwościami SMSC. Zawsze weryfikuj zachowanie zastępowania z dostawcą i używaj PID=0x41 dla wyraźnych żądań zastąpienia. Szczegółowe implementacje można znaleźć w SMPP v3.4 Sekcja 5.2.20 oraz w dokumentacji GSM 03.40 dotyczącej obsługi wiadomości.

More information