Sign inGet Started

Migrar Verify desde Twilio

Esta página relaciona Twilio Verify v2 con Bird Verify. Sigue la guía principal de migración en orden y usa estas correspondencias para los pasos 1 y 3.
El Service es la pieza sin equivalente. Twilio se dirige a POST https://verify.twilio.com/v2/Services/{ServiceSid}/Verifications, y el Service contiene la longitud del código, el TTL, la consulta de número, el manejo de líneas fijas y los límites de tasa. Bird se dirige a POST /v1/verify/verifications sin segmento de servicio: esos ajustes pertenecen a tu espacio de trabajo en lugar de a un ID en la ruta. Múltiples Service IDs no tienen equivalente dentro de un espacio de trabajo, y no puedes seleccionar una configuración por solicitud.

Pasa esto a tu agente

Pega esto en Claude Code, Cursor o Codex. El agente trabaja con esta página contra tu propio repositorio, usando cualquier superficie de Bird que ya tenga: el servidor MCP si hay uno conectado, o CLI si está instalado y con sesión iniciada.
Ejemplo de código
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.

Relacionar la llamada de creación

Qué haceTwilio VerifyBird
DestinatarioToto.phone_number o to.email
CanalChanneloptions.channels; de lo contrario, el orden configurado del país
Longitud del códigoService CodeLengthoptions.code_length; de lo contrario, el valor predeterminado del espacio de trabajo
Vigencia del códigoService TTLel ajuste Duration del espacio de trabajo
Límite de intentosService max attemptsel ajuste Maximum Retries del espacio de trabajo
CorrelaciónTagsmetadata
Reintentos seguros(ninguno)encabezado Idempotency-Key
Código personalizadoCustomCodesin equivalente
LocalizaciónLocaleoptions.language
Contenido del mensajeTemplateSid, CustomFriendlyName, ChannelConfigurationsin equivalente por solicitud; selecciona una plantilla de autenticación WhatsApp aprobada en la configuración de Verify
Limitaciones por claveRateLimitslímites fijos de la plataforma
Controles antifraudeRiskCheck, Fraud Guard, DeviceIpno expuesto en la API
Autocompletado SMSAppHashsin equivalente
PSD2Amount, Payeesin equivalente
Los canales tampoco se corresponden uno a uno:
Twilio ChannelBird
smssms
emailemail
whatsappwhatsapp
callsin equivalente
sna, autosin equivalente
rcssin equivalente
(ninguno)telegram, disponible para números registrados en Telegram
Un flujo que usa call como respaldo de accesibilidad, o sna y auto para un camino sin código, necesita replanteo antes de comprometerte con una fecha. Todo lo demás es un cambio de orden de canales en la página Countries en lugar de un parámetro por solicitud.

Relacionar la llamada de verificación

El POST /v2/Services/{ServiceSid}/VerificationCheck de Twilio recibe To o VerificationSid, más Code. El POST /v1/verify/verifications/check de Bird recibe solo el destinatario y el código, así que la ruta VerificationSid desaparece junto con la columna donde lo almacenabas. Envía exactamente el conjunto de direcciones con el que creaste la verificación.
La forma de la respuesta difiere donde más importa:
  • Twilio responde con un campo status; Bird responde con un booleano. success: true significa verificado. success: false incluye un reason de incorrect_code, expired o attempts_exhausted, más attempts_remaining, así que la cifra de "how many tries left" que quizá estés contando tú mismo vuelve en la respuesta.
  • Ambos pasan a 404 una vez que la verificación se consume. Twilio elimina la verificación cuando se aprueba, expira o agota los intentos; Bird deja de aceptar comprobaciones en cualquier estado final. Almacena la primera respuesta definitiva en lugar de volver a comprobar.

Traducir estados

Estado en TwilioEstado en BirdRazón en Bird
pendingpendingninguna
approvedverifiedninguna
max_attempts_reachedfailedattempts_exhausted
expiredexpiredttl_elapsed
canceledsin equivalente: una verificación no se puede cancelar
No hay endpoint de actualización, así que el patrón de Twilio de forzar una verificación a approved o canceled desde tu backend no tiene equivalente. Una verificación termina cuando el usuario la verifica, agota los intentos o la deja expirar.

Mover el flujo de eventos

Twilio Verify reporta actividad a través de Event Streams: un destino más una suscripción a eventos de estado de verificación, configurados fuera de la API de Verify. Bird usa el mismo mecanismo de webhooks que cualquier otro canal. Suscribe un endpoint a los tipos de evento que necesites, nombrando cada uno: verify.verification.created, verify.verification.verified y verify.verification.failed para eventos de sesión, y verify.attempt.sent, verify.attempt.delivered y verify.attempt.undelivered para entregas individuales de códigos. No existe un comodín que los agrupe. Verifica la firma según Standard Webhooks. Consulta Verify events.
Los dos ejes importan cuando portas dashboards. Los eventos de estado de verificación de Twilio se corresponden con los eventos de sesión de Bird, y los eventos de intento de Bird añaden resultados de entrega por envío en la misma sesión, incluidos los envíos que produce un reenvío o un failover de canal.

Transición

La regla de transición en la guía principal es la que debes planificar: un código emitido por Twilio no se puede comprobar con Bird, así que cambia en la llamada de creación y sigue enrutando las comprobaciones al proveedor que emitió la verificación hasta que expire el último código de Twilio.
Verifica el remitente antes de la transición. Puedes elegir Bird Verify o Authifly, usar tu dominio de correo verificado, seleccionar un Sender ID SMS existente o vincular tu número WhatsApp conectado con una plantilla de autenticación aprobada. Bird no elige entre un grupo de remitentes. Si mantienes un Sender ID SMS como valor predeterminado de la configuración, Verify recurre a Bird Verify solo donde ese ID no es elegible para el destino; una elección explícita de país no lo hace. Confirma lo que los usuarios ven en cada país y actualiza los guiones de soporte donde cambie.

Próximos pasos