Bird vs Twilio
Bird vs Twilio pour Verify
Twilio Verify est le produit le plus large et cette page le dit dès le départ. Bird Verify est plus ciblé et plus simple : un seul appel de création sans Service dans le chemin, un en-tête d'idempotence inclus, et un échec de vérification qui vous indique si le code était incorrect ou si les tentatives sont épuisées. Voici où chacun s'inscrit.
Ce en quoi Twilio Verify excelle.
Ce qui distingue Bird.
Ce en quoi Twilio Verify excelle
Des canaux que Bird ne couvre pas. Un code dicté par appel vocal, et une vérification réseau silencieuse qui authentifie un appareil sans que l'utilisateur ne saisisse quoi que ce soit. Bird Verify envoie par e-mail, SMS, WhatsApp et Telegram ; son propre canal vocal est indiqué comme en cours de déploiement plutôt que livré, et il ne propose aucun équivalent silencieux.
Une couche anti-fraude intégrée à la requête. RiskCheck et l'adresse IP de l'appareil accompagnent l'appel de création, Fraud Guard se positionne derrière en tant que paramètre de Service avec trois niveaux de protection, et Twilio répond avec une décision fondée sur ces deux éléments. Bird n'expose rien de tel via l'API, donc un parcours d'inscription qui repose sur cette décision doit la prendre avant d'appeler Bird.
Le message est le vôtre. Un template, une locale et un nom convivial sont des paramètres par requête, et un Service regroupe la longueur du code, sa durée de vie et les limites de débit sous un ID que vous choisissez à chaque appel. Chez Bird, ce sont des paramètres de workspace, et le texte du code est celui de Bird ; le canal e-mail fait exception : vous pouvez envoyer depuis un domaine vérifié qui vous appartient.
Ce qui distingue Bird
Une tentative qui ne peut pas envoyer un second code. Un en-tête Idempotency-Key sur la création rend la répétition sûre, et une requête rejouée revient identifiée comme telle. La création Twilio Verify ne documente aucune clé d'idempotence, donc une nouvelle tentative après un timeout peut délivrer deux codes au même appareil.
Un échec de vérification précise le type d'erreur et le nombre de tentatives restantes. Bird répond avec une raison incorrect_code, expired ou attempts_exhausted, accompagnée de attempts_remaining, pour que l'écran puisse indiquer à l'utilisateur qu'il lui reste deux essais. Twilio signale bien les tentatives épuisées, avec un statut max_attempts_reached, mais un code erroné avec des essais restants est simplement pending et aucun champ n'indique le décompte.
Pas de segment Service à contourner. Bird s'adresse directement à /v1/verify/verifications, donc il n'y a pas d'ID dans le chemin ni rien à sélectionner par requête. C'est une vraie perte de flexibilité et un vrai gain en termes de simplicité, et le choix dépend de si vous appliquez une seule politique de vérification ou plusieurs.
La matrice
Fonctionnalité par fonctionnalité.
Twilio Verify l'emporte sur l'étendue : plus de canaux, une configuration par requête, et une couche anti-fraude que Bird n'expose pas. Bird l'emporte sur la mécanique précise des deux appels que vous effectuez réellement, et sur ce qu'un agent peut en faire. Les aspects où Bird n'offre rien du tout sont des concessions mentionnées plus haut plutôt que des lignes ici.
| Capability | Bird | Twilio Verify | Who wins? |
|---|---|---|---|
| Requête de création | JSON vers /v1/verify/verifications sur votre hôte régional, avec une clé API bearer. Le destinataire est to.phone_number ou to.email. | Encodé en formulaire vers un chemin Verifications sous le Service que vous adressez, avec un Account SID et un auth token en HTTP Basic. Le Service ID fait partie de l'URL. | |
| Tentatives sécurisées | Un en-tête Idempotency-Key sur la création rend la tentative sûre. | La création Verify ne documente aucune clé ni en-tête d'idempotence, donc une nouvelle tentative après un timeout peut émettre un second code au même destinataire. | |
| Ce qu'un échec de vérification vous indique | success est false avec une raison incorrect_code, expired ou attempts_exhausted, accompagnée de attempts_remaining. | Un statut pending, approved, canceled, max_attempts_reached, deleted, failed ou expired, avec un booléen valid associé. Un code erroné laisse la vérification en pending ; l'épuisement des tentatives déclenche max_attempts_reached et Twilio supprime la vérification, donc la vérification suivante renvoie un 404. Rien n'indique combien de tentatives il reste. | |
| Canaux par lesquels un code peut être envoyé | E-mail, SMS, WhatsApp et Telegram. Le canal vocal est indiqué comme en cours de déploiement plutôt que livré, et il n'existe aucun canal silencieux ou basé sur le réseau. | Leur création accepte email, sms, whatsapp, call, sna et auto. RCS apparaît dans la réponse plutôt que parmi les valeurs que vous pouvez demander. | |
| Configuration par requête | options.code_length et options.channels. La durée de vie du code et les limites de tentatives sont des paramètres de workspace plutôt que des paramètres de requête. | Un Service ID sélectionné par requête définit la longueur du code, sa durée de vie et les limites de débit, et l'appel accepte aussi un template, une locale, un code personnalisé, un hash d'application Android et un nom convivial. | |
| Serveur MCP hébergé | Trois outils de vérification sur le serveur hébergé à mcp.bird.com : démarrer une vérification, vérifier un code, et passer au canal suivant. La configuration n'en fait pas partie, donc un agent peut exécuter des vérifications mais ne peut pas les reconfigurer. | mcp.twilio.com/docs ne nécessite aucun compte et, selon les termes de Twilio, indexe uniquement les spécifications API publiques. Il aide un agent à écrire du code Verify plutôt qu'à gérer un compte Verify. | |
| Événements de livraison | Un webhook de workspace abonné aux types d'événements verify que vous nommez, tels que verify.verification.verified et verify.attempt.delivered, envoyés en JSON signé selon Standard Webhooks. | Des webhooks configurés sur le Service, avec la vérification et son statut postés au fil des changements. | |
| Repli de canal | Le plan de canaux du pays est parcouru automatiquement : un échelon qui échoue passe au canal suivant, et un minuteur de livraison par tentative le fait avancer lorsqu'aucun statut de livraison n'arrive. Un appel canal suivant fait également avancer une vérification à la demande, de sorte que le repli est à la fois une politique et une requête que vous pouvez effectuer. | Le choix automatique du canal et le repli se font côté Twilio, et le Service détient la politique. |
La même vérification
Lancer une vérification.
Le Service ID est la différence visible : Twilio adresse un Service dans le chemin, pas Bird, donc les paramètres que ce Service détient migrent vers votre workspace. Le create de Bird accepte aussi un Idempotency-Key, ce qui rend une nouvelle tentative après un timeout sûre plutôt que de générer un second code.
Twilio Verify
import twilio from "twilio";
const client = twilio(process.env.TWILIO_ACCOUNT_SID!, process.env.TWILIO_AUTH_TOKEN!);
try {
const verification = await client.verify.v2
.services(process.env.TWILIO_VERIFY_SERVICE_SID!)
.verifications.create({
to: "+15551234567",
channel: "sms",
});
console.log(verification.sid, verification.status);
} catch (err) {
console.error(err);
}
Bird
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const signupId = crypto.randomUUID();
const { data, error } = await bird.verify.verifications
.create(
{
to: { phone_number: "+15551234567" },
options: { code_length: 6, channels: ["sms"] },
},
{ idempotencyKey: signupId },
)
.safe();
if (error) console.error(error.message);
else console.log(data.id, data.status);
Coût de migration
Modéré.
Les deux appels se portent proprement. To devient to.phone_number ou to.email, le segment Service sort de l'URL, et votre gestion de statut migre vers un webhook de workspace abonné aux types d'événements verify que vous nommez. Ce qui rend cela modéré plutôt que faible, c'est tout ce que le Service contenait : longueur du code, durée de vie, limites de tentatives et limites de débit deviennent des paramètres du workspace, donc plusieurs Services avec des politiques différentes n'ont pas d'équivalent au sein d'un même workspace.
Deux points nécessitent une décision plutôt qu'un changement de code. Un flux qui utilise l'appel vocal comme repli d'accessibilité, ou la vérification silencieuse comme parcours sans code, n'a pas d'équivalent Bird vers lequel migrer. Et comme un code émis par Twilio ne peut pas être vérifié par Bird, vous basculez au niveau de l'appel create et continuez à router chaque vérification vers celui qui a émis cette vérification jusqu'à expiration de la dernière.
Questions réellement posées
Bird est-il une bonne alternative à Twilio Verify ?
Que deviennent mes paramètres de Service Twilio Verify ?
Un agent IA peut-il exécuter des vérifications sur Bird ?
Bird Verify dispose-t-il d'un canal vocal ?
Puis-je conserver mon propre template de message ?
Prochaines étapes
Le guide de migration est celui par lequel commencer : il mappe l'API champ par champ.