Como configurar o campo Replace if Present no SMPP

O que é o campo Replace If Present?

O campo Replace If Present no SMPP é um sinalizador de 1 byte em PDUs como submit_sm que instrui o SMSC a substituir uma mensagem existente armazenada no dispositivo do destinatário ou na fila do SMSC. As principais aplicações incluem:

  • Atualizar conteúdo sensível ao tempo (ex: OTPs, alertas de status)
  • Evitar mensagens duplicadas
  • Gerenciar restrições de armazenamento no dispositivo

Valores do campo e interpretação

O campo usa uma estrutura simples semelhante a um booleano:

Valor (Hex) Descrição
0x00 NÃO substituir mensagens existentes (padrão)
0x01 Substituir mensagens existentes, se presentes
Observação: A lógica de substituição de mensagens depende da implementação do SMSC. Os critérios de correspondência comuns incluem:
  • Endereços de origem/destino
  • ID da mensagem (se fornecido)
  • ID do protocolo (PID=0x41 frequentemente aciona a substituição)

Casos de uso

1. Atualização de mensagem OTP

replace_if_present: 0x01  // Substituir mensagem OTP anterior
PID: 0x41                 // ID do protocolo para substituição
payload: "Seu novo OTP: 5678"
    

2. Atualização de mensagem de campanha

replace_if_present: 0x01  // Atualizar conteúdo promocional
PID: 0x00                 // Protocolo padrão
payload: "Promoção Relâmpago: Novos preços!"
    

3. Gerenciamento de fila

replace_if_present: 0x01  // Sobrescrever mensagem na fila
scheduled_delivery_time: (timestamp futuro)
    

Exemplos de PDUs SMPP

Exemplo 1: Substituição desativada (0x00)

0000001D  // Comprimento do comando (29 bytes)
00000004  // ID do comando (SubmitSM)
00000001  // Número de sequência
...
00        // Replace If Present (0x00: Desativado)
...
07        // Comprimento SM (7 septets)
C8329BFD06DDDF72  // Payload ("Olá!")
    

Exemplo 2: Substituição ativada (0x01)

0000001D  // Comprimento do comando (29 bytes)
00000004  // ID do comando (SubmitSM)
00000002  // Número de sequência
...
01        // Replace If Present (0x01: Ativado)
...
07        // Comprimento SM (7 septets)
E8329BFD0E...  // Payload ("Atualizado: 15h")
    

Exemplo 3: Combinado com PID=0x41

0000001D  // Comprimento do comando (29 bytes)
00000004  // ID do comando (SubmitSM)
00000003  // Número de sequência
...
41        // ID do protocolo (PID=0x41: Substituir)
01        // Replace If Present (0x01)
...
07        // Comprimento SM (7 septets)
C8329BFD06...  // Payload ("OTP: 9876")
    

Interações com outros campos

  • ID do protocolo (PID): PID=0x41 explicitamente aciona a substituição em muitos SMSCs
  • message_id: Alguns SMSCs usam isso para identificar mensagens para substituição
  • registered_delivery: Recebimentos indicam se a substituição foi bem-sucedida

Armadilhas comuns

  • Ativar substituição sem suporte do SMSC
  • Não definir message_id para substituição direcionada
  • Assumir que todos os SMSCs usam a mesma lógica de substituição
  • Valores de PID e replace_if_present incompatíveis
Observação sobre o comportamento do SMSC:
As políticas de substituição variam muito. Alguns SMSCs:
  • Substituem apenas mensagens com origem/destino correspondentes
  • Ignoram replace_if_present se PID≠0x41
  • Limitam a substituição a mensagens na fila do SMSC (não entregues)

Conclusão

O campo Replace If Present fornece controle crítico sobre o gerenciamento do ciclo de vida da mensagem, mas requer coordenação cuidadosa com as capacidades do SMSC. Sempre verifique o comportamento de substituição com seu provedor e use PID=0x41 para solicitações explícitas de substituição. Para implementações detalhadas, consulte a Seção 5.2.20 do SMPP v3.4 e a documentação GSM 03.40 sobre manipulação de mensagens.

More information