Comment configurer le champ Replace if Present dans SMPP

Qu'est-ce que le champ Replace If Present ?

Le champ Replace If Present dans SMPP est un indicateur d'1 octet dans les PDU comme submit_sm qui indique au SMSC de remplacer un message existant stocké sur l'appareil du destinataire ou dans la file d'attente du SMSC. Les principales applications incluent :

  • Mise à jour de contenu sensible au temps (ex : OTP, alertes de statut)
  • Prévention des messages en double
  • Gestion des contraintes de stockage des appareils

Valeurs du champ et interprétation

Le champ utilise une structure simple de type booléen :

Valeur (Hex) Description
0x00 Ne PAS remplacer les messages existants (par défaut)
0x01 Remplacer les messages existants s'ils sont présents
Note : La logique de remplacement dépend de l'implémentation du SMSC. Les critères de correspondance courants incluent :
  • Adresses source/destination
  • ID du message (si fourni)
  • ID de protocole (PID=0x41 déclenche souvent le remplacement)

Cas d'utilisation

1. Mise à jour d'un message OTP

replace_if_present: 0x01  // Remplacer le message OTP précédent
PID: 0x41                 // ID de protocole pour le remplacement
payload: "Votre nouvel OTP : 5678"
    

2. Actualisation d'un message de campagne

replace_if_present: 0x01  // Mettre à jour le contenu promotionnel
PID: 0x00                 // Protocole par défaut
payload: "Soldes Flash : Nouveaux prix !"
    

3. Gestion de file d'attente

replace_if_present: 0x01  // Écraser le message en file d'attente
scheduled_delivery_time: (horodatage futur)
    

Exemples de PDU SMPP

Exemple 1 : Remplacement désactivé (0x00)

0000001D  // Longueur de commande (29 octets)
00000004  // ID de commande (SubmitSM)
00000001  // Numéro de séquence
...
00        // Replace If Present (0x00 : Désactivé)
...
07        // Longueur SM (7 septets)
C8329BFD06DDDF72  // Payload ("Bonjour !")
    

Exemple 2 : Remplacement activé (0x01)

0000001D  // Longueur de commande (29 octets)
00000004  // ID de commande (SubmitSM)
00000002  // Numéro de séquence
...
01        // Replace If Present (0x01 : Activé)
...
07        // Longueur SM (7 septets)
E8329BFD0E...  // Payload ("Mis à jour : 15h")
    

Exemple 3 : Combiné avec PID=0x41

0000001D  // Longueur de commande (29 octets)
00000004  // ID de commande (SubmitSM)
00000003  // Numéro de séquence
...
41        // ID de protocole (PID=0x41 : Remplacer)
01        // Replace If Present (0x01)
...
07        // Longueur SM (7 septets)
C8329BFD06...  // Payload ("OTP : 9876")
    

Interactions avec d'autres champs

  • ID de protocole (PID) : PID=0x41 déclenche explicitement le remplacement dans de nombreux SMSC
  • message_id : Certains SMSC l'utilisent pour identifier les messages à remplacer
  • registered_delivery : Les accusés indiquent si le remplacement a réussi

Pièges courants

  • Activer le remplacement sans support du SMSC
  • Ne pas définir message_id pour un remplacement ciblé
  • Supposer que tous les SMSC utilisent la même logique de remplacement
  • Incompatibilité entre les valeurs PID et replace_if_present
Note sur le comportement du SMSC :
Les politiques de remplacement varient considérablement. Certains SMSC :
  • Ne remplacent que les messages avec des adresses source/destination correspondantes
  • Ignorent replace_if_present si PID≠0x41
  • Limitent le remplacement aux messages dans la file d'attente du SMSC (non livrés)

Conclusion

Le champ Replace If Present offre un contrôle crucial sur la gestion du cycle de vie des messages, mais nécessite une coordination minutieuse avec les capacités du SMSC. Vérifiez toujours le comportement de remplacement avec votre fournisseur et utilisez PID=0x41 pour des demandes de remplacement explicites. Pour des implémentations détaillées, reportez-vous à la section 5.2.20 de SMPP v3.4 et à la documentation GSM 03.40 sur la gestion des messages.

More information