Migrer SMS depuis Infobip
Cette page met en correspondance l'API SMS d'Infobip, la Blocklist et les rapports de livraison avec Bird. Suivez le guide de migration principal dans l'ordre et utilisez ces correspondances pour les étapes 3, 4 et 5.
Deux différences font l'essentiel du travail. Le payload d'Infobip est conçu pour l'envoi en masse : un message à une personne est un tableau de messages contenant chacun un tableau de destinations, le texte se trouvant deux niveaux plus bas dans content.text ; POST /v1/sms/messages prend from, to et text au niveau racine. De plus, votre URL de base Infobip est personnalisée par compte, sous la forme xxxxx.api.infobip.com, authentifiée avec Authorization: App <key>. Bird envoie depuis un hôte régional avec une clé bearer, donc l'hôte que votre code utilise change en même temps que la structure du payload.
Transmettez ceci à votre agent
Utilisez ce brief dans votre agent de codage. Il commence par une phase de découverte et produit un plan de migration vérifiable avant toute modification en production.
Exemple de code
Help me migrate my SMS integration from Infobip to Bird.
1. Inspect this repository's sends, senders, callbacks, schedules, templates, opt-outs and tests. List the traffic and behavior that must survive the migration.
2. Read the Markdown guides at https://bird.com/docs/guides/sms/migrate/infobip.md and https://bird.com/docs/guides/sms/migrate.md. Use an existing authenticated Bird MCP or CLI connection. If neither is available, follow https://bird.com/docs/ai/set-up-your-agent.md. Discover the actual operations; do not invent commands or ask me to paste credentials into chat.
3. Prepare the code changes, sender/destination requirements, consent migration, webhook verification and rollout/rollback plan. Preserve the scope of each customer's preferences, including requests outside SMS replies. Separate API batches from audience broadcasts and preserve any behavior that has no direct endpoint equivalent.
4. Show me the exact affected resources, destinations, test volume and known costs before an action that sends messages, spends money, registers or changes a sender, or moves production traffic. Require explicit human authorization for each paid submission or production change. Name one-off 10DLC registration and resubmission fees before requesting approval. An existing explicit approval for that exact action is sufficient; broad migration approval is not. Simulated SMS destinations are billable and still require authorization.
5. If I am keeping Infobip numbers, prepare the human support port request and obtain authorization to send it. Read bird support-tickets create --help, then use the available CLI or MCP support operation with the reviewed number list and requirements. Return the ticket ID and follow the reply; support arranges the port on its own schedule, separately from the code cutover.
6. Run local and intercepted tests first. When authorized, perform the agreed bounded integration tests, inspect accepted and final outcomes separately, and report failures or uncertainty. Do not claim a delivery receipt proves reading or that request idempotency guarantees exactly-once delivery.
7. Keep production cutover and retiring the old provider as explicit steps in the approved rollout. Finish with the diff, evidence, unresolved requirements and the next action.Mapper l'appel d'envoi
Le tableau de correspondance est court parce que c'est le changement de structure qui fait le travail :
| Fonction | Infobip | Bird |
|---|---|---|
| Destinataire | messages[].destinations[].to | to (un par requête) |
| Expéditeur | messages[].sender | from |
| Corps | messages[].content.text | text |
| Intention | (aucune) | category, obligatoire pour le texte libre |
| Rapports de livraison | webhooks.delivery, par message | un webhook d'espace de travail abonné aux événements de livraison ci-dessous |
| Contexte aller-retour | webhooks.callbackData | metadata, mais voir la note sur la taille ci-dessous |
| Regroupement de campagne | options.campaignReferenceId | tags, pour le filtrage uniquement ; voir ci-dessous |
| Flash | options.flash | pas d'équivalent |
| Validité | options.validityPeriod | pas d'équivalent : validity_period est rejeté |
| Fenêtre de livraison | options.deliveryTimeWindow | pas d'équivalent |
| Réessais sûrs | (aucun dans leurs clients générés) | en-tête Idempotency-Key |
Notes de portage :
- Trois niveaux deviennent zéro. L'imbrication existe pour transporter plusieurs messages et plusieurs destinations dans une seule requête. Pour envoyer un message à une personne, Bird prend les trois champs au niveau racine, donc le constructeur qui assemble les tableaux est supprimé plutôt que traduit.
- callbackData est plus grand que metadata. Infobip accepte jusqu'à 4 000 caractères et les renvoie dans le rapport de livraison. metadata de Bird est limité à 2 Ko sérialisé et est renvoyé à chaque événement du message, pas seulement au dernier. L'écho est le meilleur accord ; la limite ne l'est pas, donc tout ce qui approche le plafond doit être réduit à une clé que vous pouvez rechercher plutôt que transporté en entier.
- campaignReferenceId est un contexte de reporting, pas une migration de campagne. Les tags de Bird sont des paires {name, value} qui deviennent des dimensions de requête, vous permettant de découper les statistiques par campagne comme avant. Ce qui ne vient pas avec eux est un objet campagne : un tag ne crée ni ne configure un broadcast. Évaluez le workflow de campagne séparément lorsque vous migrez des campagnes d'audience.
- campaignReferenceId n'est pas une clé d'idempotence. Infobip le définit comme un identifiant pour suivre la performance d'une campagne, donc il regroupe mais ne déduplique pas. Si vous comptiez dessus pour sécuriser un réessai, vous n'étiez pas couvert ; c'est l'en-tête Idempotency-Key qui remplit ce rôle ici.
- Rien ne correspond à category. Les options de message d'Infobip couvrent la validité, la fenêtre de livraison, le flash et les paramètres régionaux, et aucune d'entre elles ne déclare pourquoi le message est envoyé. Décidez par type de message s'il s'agit de transactional, marketing, authentication ou service.
- Deux champs d'option n'ont pas de correspondance. validityPeriod est réservé et répond à 422 SMSUnsupportedFeature ; deliveryTimeWindow n'a pas de contrepartie, donc les fenêtres de planification passent dans votre propre dispatcher.
Transférer les désinscriptions
Infobip maintient une Blocklist : une liste des destinataires qui se sont désinscrits de vos communications, gérée via l'API de la Blocklist ou via People dans l'interface web, tout envoi à une personne figurant sur cette liste étant refusé. Les déclencheurs par mot-clé l'alimentent automatiquement : un abonné qui envoie STOP y est ajouté sans que votre application n'intervienne.
L'export est donc le plus simple de tous les fournisseurs de cette série, et l'expansion est la plus importante. Une entrée de Blocklist couvre un abonné pour tout le compte ; une suppression Bird est une paire expéditeur-abonné. Chaque entrée devient donc autant de suppressions que vous avez d'expéditeurs : une Blocklist de mille entrées et six expéditeurs donnent six mille enregistrements. Calculez le multiplicateur avant de commencer, car c'est la différence entre un import d'une minute et un qui nécessite du batching et un journal de progression.
Préservez la portée originale de la Blocklist. Ne restreignez pas un retrait pendant la migration simplement parce que le nouveau modèle technique peut exprimer des paires plus étroites. Une préférence à l'échelle de l'espace de travail peut représenter une demande plus large ; c'est un propriétaire distinct des suppressions par expéditeur. Vérifiez les deux lorsque vous déterminez l'éligibilité.
Importez via la boucle de suppression. Lire et gérer les suppressions contient la commande, ainsi que la raison pour laquelle une suppression manuelle bloque toutes les catégories, y compris le transactionnel.
Une fois ici, Bird répond lui-même aux mots-clés d'arrêt depuis son propre catalogue par pays, donc les déclencheurs par mot-clé que vous aviez configurés n'ont pas de contrepartie à reconstruire, et les personnalisés deviennent des règles de mots-clés. Les raisons s'empilent plutôt que de fusionner : une paire que vous avez importée en tant que manual et qui envoie ensuite STOP détient deux enregistrements, et les messages restent bloqués tant que les deux n'ont pas pris fin.
Traduire les statuts de livraison
Utilisez ce tableau pour comparer les concepts de cycle de vie, pas pour renommer mécaniquement les événements. Bird choisit un événement d'échec à partir du statut et de la raison rapportés. Une requête API refusée ne crée pas de message ; un rejet après acceptation peut produire sms.rejected, y compris un rejet de l'opérateur. Une absence de preuve de livraison reste inconnue. Conservez le statut brut du fournisseur et le code aux côtés de votre résultat normalisé.
Infobip rapporte un groupe de statut et un nom de statut sur chaque rapport de livraison, et Bird émet un type d'événement :
| Résultat | Groupe de statut Infobip | Bird |
|---|---|---|
| API a accepté le message | PENDING | sms.accepted |
| Transmis à l'opérateur | PENDING | sms.sent |
| L'opérateur a confirmé la livraison | DELIVERED | sms.delivered |
| L'opérateur a signalé la non-livraison | UNDELIVERABLE | sms.undelivered |
| Échec permanent | REJECTED | sms.failed |
| Refusé avant l'envoi | REJECTED | sms.rejected |
| Fenêtre de validité expirée | EXPIRED | sms.expired |
EXPIRED est la ligne à lire attentivement, car elle couvre deux choses différentes de leur côté et une seule existe ici. Infobip expire un message soit lorsque la période de validité de sa propre plateforme est écoulée, avec un défaut de 48 heures, soit lorsque l'opérateur renvoie « expired » comme statut final. Bird ne définit aucune fenêtre de validité propre et n'exécute aucun minuteur qui met fin à un message, donc sms.expired ne provient jamais que de l'accusé de réception de l'opérateur. La moitié rapportée par l'opérateur se transpose ; la moitié liée au minuteur de la plateforme n'a pas de contrepartie, et un message qui aurait expiré sur leur horloge reste en cours ici jusqu'à ce que l'opérateur se prononce.
REJECTED apparaît deux fois volontairement. Infobip l'utilise à la fois pour un message qu'il a refusé lui-même et pour un message que l'opérateur a renvoyé comme rejeté, ce qui correspond aux événements de Bird choisis selon le résultat de traitement ou de l'opérateur et sa raison ; un rejet par l'opérateur peut produire sms.rejected. C'est le nom du statut à l'intérieur du groupe qui les distingue, donc un handler qui ne branchait que sur le groupe a besoin du nom une fois ici. PENDING couvre aussi deux lignes, car c'est le groupe dans lequel le message se trouve de l'acceptation jusqu'à l'arrivée d'un rapport terminal.
Trois mécanismes changent avec les noms :
- Les abonnements remplacent les webhooks par message. Infobip nomme un webhook sur chaque message, donc la destination est choisie par celui qui écrit l'appel, et le type de contenu est choisi avec. Bird livre JSON aux endpoints que votre espace de travail enregistre, chacun abonné aux types d'événements souhaités, donc un deuxième consommateur est un deuxième abonnement plutôt qu'une modification à chaque point d'appel.
- Vous perdez le choix par message, y compris le XML. Infobip permet à un message de choisir JSON ou XML et d'attacher jusqu'à 4 000 caractères de données de callback. Bird envoie uniquement du JSON, et callbackData devient metadata, qui est renvoyé à chaque événement de ce message et non uniquement sur le rapport.
- Le pull devient du push. Infobip vous permet de récupérer les rapports depuis un endpoint de rapports ainsi que de les recevoir. Bird n'a pas d'équivalent de polling pour les événements ; abonnez-vous, et lisez l'état du message via API lorsque vous en avez besoin à la demande.
Enregistrez le endpoint une fois, en nommant les types d'événements que votre handler attend : les événements sms.* ci-dessus sont la liste à laquelle vous abonner, et il n'y a pas de joker qui les remplace. Bird envoie JSON signés selon Standard Webhooks ; Créer un endpoint contient la commande et le point à bien faire dès le premier appel : stocker le secret de signature que la réponse affiche une seule fois.
Bird rapporte un échec avec un code error standardisé tel que invalid_destination, content_rejected, provider_unavailable ou recipient_opted_out ; la liste complète se trouve sur la page des événements. Alignez vos alertes sur ces codes plutôt que sur les paires numériques groupe-nom d'Infobip.
Basculer
Les destinations, les expéditeurs et la montée en charge du trafic sont indépendants du fournisseur et couverts dans le guide principal. Trois éléments spécifiques à Infobip doivent figurer dans le plan de bascule.
L'hôte change, et c'est de la configuration plutôt que du code. Votre URL de base Infobip est attribuée par compte ; Bird envoie depuis un hôte régional choisi lors de la création de votre espace de travail. Repérez chaque endroit où cet hôte est défini avant la bascule, y compris les variables d'environnement, les gestionnaires de secrets et les manifestes de déploiement, car un oubli échoue à l'exécution plutôt qu'à la compilation.
Votre marque et campagne 10DLC sont enregistrées auprès de The Campaign Registry via l'API d'enregistrement de numéros d'Infobip et ne deviennent pas automatiquement des enregistrements Bird. Confirmez la procédure de migration ou d'enregistrement applicable avant de soumettre un travail payant. Commencez par S'enregistrer pour le 10DLC : cette page couvre la signification de chaque champ, les types d'entité que le registre reconnaît, et l'appel de prérequis qui vous indique ce qu'il faut fournir avant de créer la marque, qui est l'étape facturée.
Les numéros que vous possédez chez Infobip nécessitent un portage que le support organise, selon son propre calendrier et non le vôtre.
Étapes suivantes
-
Comparer Bird et Infobip pour SMS : évaluation produit et considérations de migration
-
Envoyer des SMS : le payload vers lequel vous portez, dans son intégralité
-
Désinscriptions et mots-clés : couverture des mots-clés par pays et gestion des suppressions
-
Événements SMS : le vocabulaire d'événements vers lequel votre handler de rapports migre
-
Webhooks & événements : configuration des endpoints et vérification Standard Webhooks
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.