Migrer Verify depuis Twilio
Cette page fait correspondre Twilio Verify v2 avec Bird Verify. Suivez le guide de migration principal dans l'ordre et utilisez ces correspondances pour les étapes 1 et 3.
Le Service est l'élément sans équivalent. Twilio adresse POST https://verify.twilio.com/v2/Services/{ServiceSid}/Verifications, et le Service contient la longueur du code, le TTL, la recherche, le traitement des lignes fixes et les limites de débit. Bird adresse POST /v1/verify/verifications sans segment de service : ces paramètres appartiennent à votre espace de travail plutôt qu'à un ID dans le chemin. Plusieurs Service ID n'ont pas d'équivalent au sein d'un espace de travail, et vous ne pouvez pas sélectionner une configuration par requête.
Transmettez ceci à votre agent
Collez ceci dans Claude Code, Cursor ou Codex. L'agent parcourt cette page en s'appuyant sur votre propre dépôt, en utilisant la surface Bird dont il dispose déjà : le serveur MCP s'il est connecté, le CLI s'il est installé et authentifié.
Exemple de code
I am moving a phone verification integration from Twilio Verify to Bird Verify. Route through it with me.
1. Check what you already have before setting anything up. If Bird's MCP server is connected, use its tools. If the Bird CLI is installed and signed in, use that. Either one is enough, and every step below is an action you take with whichever you have. Only if neither is present, follow https://bird.com/docs/ai/set-up-your-agent.md to set one up and sign me in. Every Bird docs page serves Markdown at its own URL with `.md` appended, so fetch that rather than the HTML.
2. Read https://bird.com/docs/guides/verify/migrate/twilio.md for the create, check and status mapping, and https://bird.com/docs/guides/verify/migrate.md for the order the steps go in.
3. Find and list my Twilio Verify usage in this repository before you change anything: the Verifications and VerificationCheck call sites, every Service SID they name and what each Service is configured with, and any place I read a verification status. Bird has no Service segment and no per-request configuration selection, so tell me if I use more than one Service and what differs between them.
4. Tell me early which of these I depend on. Bird Verify has no voice channel and no silent or network-based authentication. It generates the code itself and never returns it, so I cannot supply my own. It accepts `options.language` but no per-request template or message body. Bird can use an existing SMS Sender ID or a connected WhatsApp number with an approved authentication template, configured per channel or country rather than per request; tell me whether my current sender can be kept. Twilio's Service holds code length, TTL, lookup, landline handling and rate limits; on Bird those belong to the workspace rather than to an ID in the path, so tell me which of my Service settings have no home.
5. Configure my channels and destinations following https://bird.com/docs/guides/verify/countries.md and https://bird.com/docs/guides/verify/senders.md. While you are there, disable every country I do not actually verify into. An enabled destination I never send to is not reach, it is exposure to SMS pumping, so ask me which countries I serve rather than leaving the defaults.
6. Port the create and check calls using the mapping tables on the provider page, and move my status handling to Bird's events: https://bird.com/docs/guides/verify/sending-verifications.md and https://bird.com/docs/guides/verify/events.md.
7. Cut over at the create call, not all at once, because a code issued by Twilio Verify cannot be checked by Bird and a code issued by Bird cannot be checked by Twilio Verify. From the moment I say go, send every NEW verification to Bird, and keep routing each check to whichever provider issued that verification. Keep both paths live for one full code lifetime plus margin, then retire the old one. Tell me how you will decide which provider issued a given verification before you write any of it.
8. Test before any real traffic. Bird Verify has no simulated recipients, so do not look for a sandbox: the thing worth testing is the code arriving. Run the integration against a phone number and a mailbox I control, on each channel I enabled, and show me what arrived on each one.
9. Stop and ask me wherever a step needs a decision. Do not start routing new verifications to Bird until I have seen those test results and replied with the words cut over to Bird. Retiring the Twilio Verify path is a separate step: ask me again and wait for me to reply with the words retire the Twilio Verify path, and do not retire it while any code it issued could still be checked. A reply that agrees without naming what it is authorising is not authorisation. Finish by telling me what is left that only a person can do.Faire correspondre l'appel de création
| Fonction | Twilio Verify | Bird |
|---|---|---|
| Destinataire | To | to.phone_number ou to.email |
| Canal | Channel | options.channels, sinon l'ordre configuré pour le pays |
| Longueur du code | Service CodeLength | options.code_length, sinon la valeur par défaut de l'espace de travail |
| Durée de vie du code | Service TTL | le paramètre Duration de l'espace de travail |
| Limite de tentatives | Service max attempts | le paramètre Maximum Retries de l'espace de travail |
| Corrélation | Tags | metadata |
| Réessais sûrs | (aucun) | en-tête Idempotency-Key |
| Code personnalisé | CustomCode | pas d'équivalent |
| Localisation | Locale | options.language |
| Contenu du message | TemplateSid, CustomFriendlyName, ChannelConfiguration | pas d'équivalent par requête ; sélectionnez un modèle d'authentification WhatsApp approuvé dans la configuration Verify |
| Limitation par clé | RateLimits | garde-fous fixes de la plateforme |
| Contrôles anti-fraude | RiskCheck, Fraud Guard, DeviceIp | non exposé sur l'API |
| Remplissage auto SMS | AppHash | pas d'équivalent |
| PSD2 | Amount, Payee | pas d'équivalent |
Les canaux ne correspondent pas non plus un pour un :
| Twilio Channel | Bird |
|---|---|
| sms | sms |
| call | pas d'équivalent |
| sna, auto | pas d'équivalent |
| rcs | pas d'équivalent |
| (aucun) | telegram, disponible pour les numéros enregistrés sur Telegram |
Un flux qui utilise call comme solution d'accessibilité de secours, ou sna et auto pour un parcours sans code, doit être repensé avant de vous engager sur une date. Tout le reste est un changement d'ordre de canaux sur la page Countries plutôt qu'un paramètre par requête.
Faire correspondre l'appel de vérification
Le POST /v2/Services/{ServiceSid}/VerificationCheck de Twilio prend To ou VerificationSid, plus Code. Le POST /v1/verify/verifications/check de Bird prend uniquement le destinataire et le code, le chemin VerificationSid disparaît donc avec la colonne que vous stockiez. Fournissez exactement le jeu d'adresses avec lequel vous avez créé la vérification.
La forme de la réponse diffère là où cela compte le plus :
- Twilio répond avec un champ status ; Bird répond avec un booléen. success: true signifie vérifié. success: false porte un reason de incorrect_code, expired ou attempts_exhausted, plus attempts_remaining, de sorte que le nombre de "how many tries left" que vous comptez peut-être vous-même revient dans la réponse.
- Les deux passent à 404 une fois la vérification consommée. Twilio supprime la vérification lorsqu'elle est approuvée, expirée ou à court de tentatives ; Bird cesse d'accepter les vérifications dans tout état final. Conservez la première réponse définitive plutôt que de revérifier.
Traduire les statuts
| Statut Twilio | Statut Bird | Raison Bird |
|---|---|---|
| pending | pending | aucune |
| approved | verified | aucune |
| max_attempts_reached | failed | attempts_exhausted |
| expired | expired | ttl_elapsed |
| canceled | pas d'équivalent : une vérification ne peut pas être annulée |
Il n'y a pas d'endpoint de mise à jour, donc le schéma Twilio consistant à forcer une vérification à approved ou canceled depuis votre backend n'a pas d'équivalent. Une vérification prend fin lorsque l'utilisateur la valide, épuise les tentatives ou la laisse expirer.
Migrer le flux d'événements
Twilio Verify signale l'activité via Event Streams : un sink plus un abonnement aux événements de statut de vérification, configurés en dehors de l'API Verify. Bird utilise le même mécanisme de webhook que tous les autres canaux. Abonnez un endpoint aux types d'événements souhaités en nommant chacun : verify.verification.created, verify.verification.verified et verify.verification.failed pour les événements de session, et verify.attempt.sent, verify.attempt.delivered et verify.attempt.undelivered pour les livraisons individuelles de codes de vérification. Il n'existe pas de joker qui les remplace. Vérifiez la signature conformément aux Standard Webhooks. Voir Verify events.
Ces deux axes comptent lorsque vous portez vos tableaux de bord. Les événements de statut de vérification de Twilio correspondent aux événements de session de Bird, et les événements de tentative de Bird ajoutent les résultats de livraison par envoi sur la même session, y compris les envois produits par un renvoi ou un basculement de canal.
Basculer
La règle de bascule du guide principal est celle autour de laquelle planifier : un code émis par Twilio ne peut pas être vérifié par Bird, alors basculez au niveau de l'appel de création et continuez à router les vérifications vers le fournisseur qui a émis la vérification, jusqu'à l'expiration du dernier code Twilio.
Vérifiez l'expéditeur avant la bascule. Vous pouvez choisir Bird Verify ou Authifly, utiliser votre domaine e-mail vérifié, sélectionner un Sender ID SMS existant, ou associer votre numéro WhatsApp connecté à un modèle d'authentification approuvé. Bird ne sélectionne pas parmi un pool d'expéditeurs. Si vous conservez un Sender ID SMS comme valeur par défaut de la configuration, Verify bascule sur Bird Verify uniquement là où cet ID n'est pas éligible pour la destination ; un choix de pays explicite ne le fait pas. Confirmez ce que les utilisateurs voient dans chaque pays et mettez à jour les scripts de support là où cela change.
Étapes suivantes
- Envoi de vérifications : le contrat complet pour les deux appels, les statuts et les limites
- Configuration par pays : où l'ordre et la disponibilité des canaux se trouvent désormais
- Expéditeurs et personnalisation : ce que le destinataire voit sur chaque canal
- Événements Verify : les événements vers lesquels votre consommateur Event Streams migre
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet.