Cómo configurar el campo Replace if Present en SMPP

¿Qué es el campo Replace If Present?

El campo Replace If Present en SMPP es un indicador de 1 byte en PDUs como submit_sm que instruye al SMSC a reemplazar un mensaje existente almacenado en el dispositivo del destinatario o en la cola del SMSC. Las aplicaciones clave incluyen:

  • Actualizar contenido sensible al tiempo (ej. OTPs, alertas de estado)
  • Evitar mensajes duplicados
  • Gestionar limitaciones de almacenamiento en dispositivos

Valores del campo e interpretación

El campo utiliza una estructura simple similar a un booleano:

Valor (Hex) Descripción
0x00 NO reemplazar mensajes existentes (predeterminado)
0x01 Reemplazar mensajes existentes si están presentes
Nota: La lógica de reemplazo de mensajes depende de la implementación del SMSC. Los criterios de coincidencia comunes incluyen:
  • Direcciones de origen/destino
  • ID del mensaje (si se proporciona)
  • ID de protocolo (PID=0x41 suele activar el reemplazo)

Casos de uso

1. Actualización de mensaje OTP

replace_if_present: 0x01  // Reemplazar mensaje OTP anterior
PID: 0x41                 // ID de protocolo para reemplazo
payload: "Tu nuevo OTP: 5678"
    

2. Actualización de mensaje de campaña

replace_if_present: 0x01  // Actualizar contenido promocional
PID: 0x00                 // Protocolo predeterminado
payload: "¡Oferta flash: Nuevos precios!"
    

3. Gestión de colas

replace_if_present: 0x01  // Sobrescribir mensaje en cola
scheduled_delivery_time: (marca de tiempo futura)
    

Ejemplos de PDUs SMPP

Ejemplo 1: Reemplazo deshabilitado (0x00)

0000001D  // Longitud del comando (29 bytes)
00000004  // ID del comando (SubmitSM)
00000001  // Número de secuencia
...
00        // Replace If Present (0x00: Deshabilitado)
...
07        // Longitud SM (7 septetos)
C8329BFD06DDDF72  // Payload ("¡Hola!")
    

Ejemplo 2: Reemplazo habilitado (0x01)

0000001D  // Longitud del comando (29 bytes)
00000004  // ID del comando (SubmitSM)
00000002  // Número de secuencia
...
01        // Replace If Present (0x01: Habilitado)
...
07        // Longitud SM (7 septetos)
E8329BFD0E...  // Payload ("Actualizado: 3 PM")
    

Ejemplo 3: Combinado con PID=0x41

0000001D  // Longitud del comando (29 bytes)
00000004  // ID del comando (SubmitSM)
00000003  // Número de secuencia
...
41        // ID de protocolo (PID=0x41: Reemplazar)
01        // Replace If Present (0x01)
...
07        // Longitud SM (7 septetos)
C8329BFD06...  // Payload ("OTP: 9876")
    

Interacciones con otros campos

  • ID de protocolo (PID): PID=0x41 activa explícitamente el reemplazo en muchos SMSCs
  • message_id: Algunos SMSCs usan esto para identificar mensajes a reemplazar
  • registered_delivery: Los recibos indican si el reemplazo tuvo éxito

Errores comunes

  • Habilitar el reemplazo sin soporte del SMSC
  • No configurar message_id para reemplazo dirigido
  • Asumir que todos los SMSCs usan la misma lógica de reemplazo
  • Valores de PID y replace_if_present no coincidentes
Nota sobre el comportamiento del SMSC:
Las políticas de reemplazo varían ampliamente. Algunos SMSCs:
  • Solo reemplazan mensajes con origen/destino coincidentes
  • Ignoran replace_if_present si PID≠0x41
  • Limitan el reemplazo a mensajes en la cola del SMSC (no entregados)

Conclusión

El campo Replace If Present proporciona un control crítico sobre la gestión del ciclo de vida de los mensajes, pero requiere una coordinación cuidadosa con las capacidades del SMSC. Siempre verifique el comportamiento de reemplazo con su proveedor y use PID=0x41 para solicitudes de reemplazo explícitas. Para implementaciones detalladas, consulte la Sección 5.2.20 de SMPP v3.4 y la documentación de GSM 03.40 sobre manejo de mensajes.

More information