Bird vs Infobip
Bird vs Infobip pour SMS
L'envoi d'Infobip est conçu pour le cas d'envoi en masse, et vous en payez le prix sur chaque message : un SMS à une personne passe quand même par un tableau de messages, chacun contenant un tableau de destinataires, avec le texte du message deux niveaux plus bas dans content.text. Bird prend from, to et text.
En chiffres
Couverture SMS
Routes opérateurs
Vitesse de livraison
Ce qu'Infobip fait très bien.
Ce qui distingue Bird.
Ce qu'Infobip fait très bien
Une surface d'agent aussi accessible que la nôtre. Infobip exploite quinze serveurs MCP distants via HTTP, authentifiés par une clé API ou OAuth 2.1 avec découverte de scopes. Les séparer par produit maintient la liste d'outils de chaque serveur courte, ce qui aide réellement un agent à choisir le bon outil.
Java et C#, pour lesquels Bird ne fournit pas de SDK serveur. Leurs cinq clients API maintenus sont Java, C#, PHP, Go et Python. Un environnement Java ou .NET est mieux servi chez eux, et interagit avec l'API HTTP de Bird à la place.
Un reporting de livraison paramétrable par message. Chaque message désigne son propre webhook, choisit JSON ou XML, et peut joindre jusqu'à 4 000 caractères de données de callback renvoyées dans le rapport.
Ce qui distingue Bird
Un SDK typé dans le langage dans lequel la majeure partie du web est écrite. Bird fournit un SDK TypeScript propriétaire. Le client Node d'Infobip se trouve dans une organisation communautaire séparée, encore en 0.3.2, dernière publication en novembre 2023.
Une tentative qui ne peut pas envoyer en double. Un en-tête Idempotency-Key sur l'envoi sécurise la répétition. Les clients API générés d'Infobip ne portent aucune clé d'idempotence sur aucun endpoint.
L'intention du message est un champ de premier ordre. Chaque envoi en texte libre porte une catégorie : transactionnel, marketing, authentification ou service, sans équivalent dans les options de message d'Infobip.
La matrice
Fonctionnalité par fonctionnalité.
C'est le tableau le plus serré de la série. Infobip égale Bird sur la surface d'agent, sur un hôte unique pour l'ensemble du canal, sur l'enregistrement 10DLC via une API, et sur les événements de livraison, et fournit des bibliothèques client dans deux langages que Bird ne couvre pas. Bird l'emporte sur les tentatives sécurisées, l'intention du message et un SDK maintenu en TypeScript. Les deux lectures sont exactes aujourd'hui.
| Capability | Bird | Infobip | Who wins? |
|---|---|---|---|
| Requête d'envoi | JSON vers /v1/sms/messages sur votre hôte régional, avec une clé API bearer. | JSON vers un endpoint messages versionné sur leur hôte API, authentifié avec une clé App. La charge utile est pensée pour le masse : un tableau de messages, chacun avec un tableau de destinataires, et le texte sous content. | |
| Tentatives sécurisées | Un en-tête Idempotency-Key sur l'envoi sécurise la tentative. | Leurs clients API générés, construits à partir de leur propre spécification, ne portent aucune clé ou en-tête d'idempotence sur aucun endpoint, si bien qu'une tentative après un timeout peut envoyer deux fois. | |
| Intention du message | Chaque envoi en texte libre porte une catégorie : transactionnel, marketing, authentification ou service. | Les options de message couvrent la période de validité, la fenêtre de livraison, le flash et les paramètres régionaux, mais aucune ne déclare de finalité. campaignReferenceId ressemble assez à une intention pour qu'on s'y trompe dans une liste de champs, mais Infobip le définit comme un ID de suivi de la performance d'une campagne. | |
| Serveur MCP hébergé | Un serveur hébergé sur mcp.bird.com. Claude Code, Cursor, ChatGPT ou votre propre runtime se connecte une fois et pilote tout le workspace avec les mêmes outils. | Quinze serveurs distants via HTTP, séparés par produit, authentifiés par une clé API ou OAuth 2.1 avec découverte de scopes. Accéder à SMS, à l'enregistrement et à la gestion de compte nécessite d'en connecter trois, et la liste d'outils de chaque serveur reste courte. | |
| Enregistrement A2P 10DLC | /v1/sms/10dlc/* enregistre les marques et les campagnes via l'API. | Les marques et campagnes s'enregistrent via leur API d'enregistrement de numéros, ou via un portail guidé, avec un examen de conformité avant soumission au Campaign Registry. | |
| Un seul hôte pour tout le canal | L'envoi, l'enregistrement 10DLC et les événements de livraison partagent une URL de base et une clé communes. | Une URL de base personnalisée par compte dessert chaque produit. L'envoi et l'enregistrement de numéros sont tous deux des chemins sous cette URL, et leur propre client API ne définit aucun hôte spécifique par opération. | |
| Événements de livraison | Un webhook d'espace de travail abonné aux types d'événements SMS que vous spécifiez, tels que sms.sent, sms.delivered et sms.failed, transmis en JSON et signés selon le standard Standard Webhooks. | Chaque message désigne son propre webhook, choisit JSON ou XML, et peut joindre jusqu'à 4 000 caractères de données de callback retournées dans le rapport. Les rapports peuvent aussi être récupérés manuellement. | |
| Langages SDK | SDK typés pour TypeScript, Python, Go et PHP, ainsi que des clients Realtime pour Swift, Kotlin et le navigateur. | Cinq clients API maintenus : Java, C#, PHP, Go et Python. Le client Node se trouve dans une organisation communautaire distincte, à la version 0.3.2, dernière publication en novembre 2023. |
Le même envoi
Un message, trois niveaux d'imbrication.
Envoi d'un SMS. Le panneau Infobip utilise un fetch brut plutôt que leur SDK, car leurs cinq clients maintenus sont Java, C#, PHP, Go et Python : une base de code TypeScript écrit cette requête à la main. Bird renvoie un résultat typé que vous pouvez déstructurer, et category est le champ sans équivalent chez Infobip.
Infobip
const response = await fetch("https://api.infobip.com/sms/3/messages", {
method: "POST",
headers: {
Authorization: `App ${process.env.INFOBIP_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
messages: [
{
sender: "+15557654321",
destinations: [{ to: "+15551234567" }],
content: { text: "Your table is ready." },
},
],
}),
});
const { messages } = await response.json();
console.log(messages[0].messageId, messages[0].status.name);
Bird
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.sms
.send({
from: "+15557654321",
to: "+15551234567",
text: "Your table is ready.",
category: "transactional",
})
.safe();
if (error) console.error(error.message);
else console.log(data.id, data.status);
Quel est le coût du SMS par pays ?
Chaque pays de destination a un tarif publié sur la page de tarification SMS, et les frais opérateur et 10DLC sont détaillés séparément sur les frais opérateur SMS plutôt qu'inclus dans le tarif. Vous pouvez chiffrer une campagne avant de parler à qui que ce soit.
Coût de migration
Faible.
Les champs se transposent une fois aplatis. sender devient from, le tableau destinations se réduit à un seul to, et content.text devient text. Votre webhook par message devient un webhook d'espace de travail abonné à sms.sent, sms.delivered et sms.failed, et callbackData trouve sa place dans les metadata de Bird.
Deux éléments relèvent de la planification plutôt que de l'ingénierie : lancez-les tôt et ils avanceront en parallèle du changement de code. Votre marque et campagne 10DLC sont enregistrées auprès du Campaign Registry via Infobip, donc le même enregistrement est soumis à nouveau via Bird ; et les numéros que vous possédez là-bas sont portés selon le calendrier du support.
Questions que les gens posent vraiment
Bird est-il une bonne alternative à Infobip pour le SMS ?
Quelle différence y a-t-il dans l'appel d'envoi ?
Infobip dispose-t-il d'un serveur MCP ?
Infobip fournit-il un SDK Node ou TypeScript ?
Que peut réellement faire l'agent dans mon compte ?
Quel est le coût du SMS Bird par pays ?
Prochaines étapes
Le guide de migration est celui par lequel commencer : il mappe l'API champ par champ.