Bird vs Twilio
Bird vs Twilio pour WhatsApp
Les deux sont des Meta Business Solution Providers, donc les messages atteignent WhatsApp de la même manière et il n'y a pas de débat sur l'opérateur. La différence réside dans l'interface : Twilio place WhatsApp derrière un préfixe sur la Messages API que vous utilisez déjà, tandis que Bird lui consacre une API propre.
Ce que Twilio fait bien.
Ce qui différencie Bird.
Ce que Twilio fait bien
Une seule API pour les deux canaux. Un préfixe whatsapp: sur To et From envoie du WhatsApp via la même Messages API que le SMS, et le webhook entrant conserve la structure que votre handler SMS sait déjà parser. Si vous êtes sur Twilio pour le SMS, ajouter WhatsApp est un préfixe, pas une intégration.
Quinze ans de réponses. La Messages API est l'endpoint le plus documenté de cette catégorie : presque toutes les questions ont déjà une réponse publique, et les bibliothèques d'aide existent dans plus de langages que Bird n'en propose.
Des templates de contenu avec un éditeur. Les templates sont créés dans le Content Template Builder et référencés par ID à l'envoi, permettant à un non-développeur de rédiger et modifier le message vu par le client sans toucher à l'intégration.
Ce qui différencie Bird
Un agent gère tout le canal, pas seulement l'envoi. Le serveur MCP hébergé de Bird propose 43 opérations WhatsApp sur un vrai workspace : envoyer un message, créer un template et le soumettre à Meta pour approbation, gérer ses versions et langues, enregistrer un numéro et configurer son profil, et consulter les statistiques.
Un retry qui ne peut pas envoyer en double. Un header Idempotency-Key sur l'envoi sécurise la répétition. La Messages API de Twilio n'annonce aucun header d'idempotence, et un message WhatsApp en double coûte une conversation ainsi que la patience du client.
Un seul body, tous les types de contenu. La requête d'envoi prend en charge texte, template, image, vidéo, audio, sticker, document, localisation, cartes interactives ou de contact en tant que champs sur un seul endpoint : ajouter un type de contenu revient à ajouter un champ, pas un nouvel appel.
La matrice
Fonctionnalité par fonctionnalité.
Les deux sont des Meta BSPs, donc la délivrabilité n'est pas le critère. Twilio l'emporte sur la symétrie des canaux et sur la taille de sa base de réponses publiques. Bird l'emporte sur les retries sécurisés, sur un seul body pour tous les types de contenu, et sur l'étendue du canal qu'un agent peut opérer. Lisez la ligne requête d'envoi en regard de la page SMS : la même architecture qui rend le WhatsApp de Twilio facile à adopter est celle qui rend sa requête form-encoded.
| Capability | Bird | Twilio | Who wins? |
|---|---|---|---|
| Requête d'envoi | JSON vers /v1/whatsapp/messages sur votre hôte régional avec une clé API bearer. WhatsApp a son propre endpoint au lieu de partager celui du SMS. | Form-encoded en PascalCase vers le même Messages.json utilisé pour le SMS, avec un Account SID et un auth token via HTTP Basic. WhatsApp est sélectionné par un préfixe whatsapp: sur To et From. | |
| Retries sécurisés | Un header Idempotency-Key sur l'envoi sécurise le retry. | La Messages API n'annonce aucun header d'idempotence, donc un retry après un timeout peut envoyer le message deux fois. | |
| Types de contenu | Un seul body d'envoi permet de sélectionner texte, template, image, vidéo, audio, sticker, document, localisation, cartes interactives ou de contact. | Le même appel Messages create transporte un body et des URL de médias, le contenu enrichi étant géré via un content template référencé par ID. | |
| Création et approbation de templates | Les templates sont créés, versionnés par langue et soumis à Meta pour approbation via l'API, et chacune de ces étapes est aussi un outil sur le serveur MCP. | Les templates sont créés dans le Content Template Builder et référencés par ID à l'envoi, la console étant l'interface principale. | |
| Surface agent | 43 opérations WhatsApp sur le serveur hébergé à mcp.bird.com, couvrant l'envoi, le cycle de vie des templates, l'enregistrement et le profil des numéros, et les statistiques. | mcp.twilio.com/docs ne nécessite aucun compte et, selon les termes de Twilio, indexe uniquement les spécifications publiques de l'API : il aide un agent à écrire du code Twilio plutôt qu'à opérer un compte. | |
| Événements entrants et de livraison | Un webhook de workspace abonné aux types d'événements WhatsApp que vous spécifiez, tels que whatsapp.delivered, whatsapp.read et whatsapp.received, délivrés en JSON signés selon Standard Webhooks. | Un webhook au même format que le SMS entrant, avec To et From définis sur des adresses WhatsApp et les médias sur des champs MediaUrl numérotés. | |
| Groupes WhatsApp natifs | Groupes natifs via l'API : les créer et les lister, gérer les participants et les messages épinglés, approuver les demandes d'adhésion et renouveler le lien d'invitation. Les envois adressent un group id et sont facturés et limités comme des envois de groupe. Ce n'est pas encore dans la référence publique de l'API ni dans les SDK, et ce n'est pas l'un des outils agent. | Leur Conversations API gère un chat WhatsApp multi-participants jusqu'à 50 personnes, documenté et utilisable dès maintenant — leur propre exemple décrit un fonctionnement via un expéditeur WhatsApp plutôt qu'un groupe WhatsApp natif. La documentation Programmable Messaging WhatsApp couvre le one-to-one. | |
| Les deux canaux derrière une seule intégration | SMS et WhatsApp sont des endpoints distincts sous la même URL de base et la même clé, le client est donc partagé mais les points d'appel ne le sont pas. | Un seul endpoint envoie les deux, de sorte qu'une intégration SMS existante ajoute WhatsApp en changeant le préfixe d'adresse. |
Le même message
Envoi d'un template WhatsApp.
Le préfixe est la différence architecturale en une ligne : Twilio adresse WhatsApp à l'intérieur de l'API SMS, Bird lui donne son propre endpoint. L'envoi Bird accepte aussi un Idempotency-Key, ce qui compte davantage sur WhatsApp que sur SMS, car un doublon ouvre une seconde conversation facturée.
Twilio
import twilio from "twilio";
const client = twilio(process.env.TWILIO_ACCOUNT_SID!, process.env.TWILIO_AUTH_TOKEN!);
try {
const message = await client.messages.create({
from: "whatsapp:+15557654321",
to: "whatsapp:+15551234567",
contentSid: "HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
contentVariables: JSON.stringify({ 1: "ord_8f21" }),
});
console.log(message.sid, message.status);
} catch (err) {
console.error(err);
}
Bird
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const orderId = "ord_8f21";
const { data, error } = await bird.whatsapp
.send(
{
from: "+13124495648",
to: "+15551234567",
template: {
slug: "order_shipped",
language: "en_US",
components: [{ type: "body", parameters: [{ type: "text", text: orderId }] }],
},
},
{ idempotencyKey: orderId },
)
.safe();
if (error) console.error(error.message);
else console.log(data.id, data.status);
Coût de migration
Modéré.
L'envoi est une réécriture plutôt qu'un renommage, car les structures diffèrent réellement : du form-encoded PascalCase avec un préfixe whatsapp: devient du JSON vers un endpoint WhatsApp, et un template de contenu référencé par ID devient un objet template dans le corps de la requête. Votre handler entrant change aussi, du webhook au format SMS à un abonnement workspace sur les types d'événements WhatsApp.
L'élément de planification relève de Meta plutôt que de l'un ou l'autre fournisseur. Un numéro WhatsApp est enregistré auprès d'un compte business et vos templates sont approuvés par Meta : prévoyez donc un délai d'approbation des deux côtés de la migration et maintenez l'ancien chemin actif jusqu'à la validation des nouveaux templates.
Questions que les gens posent vraiment
Bird est-il une bonne alternative à Twilio pour WhatsApp ?
Passer à Bird signifie-t-il faire réapprouver mes templates ?
Que peut réellement faire un agent IA avec Bird WhatsApp ?
Puis-je continuer à envoyer SMS et WhatsApp en un seul appel ?
Et ensuite
Le guide d'envoi est celui par lequel commencer : il couvre l'appel d'envoi et les règles de fenêtre.