Sign inGet started

Migrar SMS desde Infobip

Esta página relaciona la SMS API, la Blocklist y los informes de entrega de Infobip con Bird. Sigue la guía principal de migración en orden y usa estas correspondencias para los pasos 3, 4 y 5.
Dos diferencias hacen la mayor parte del trabajo. El payload de Infobip está pensado para el caso masivo, así que un mensaje a una persona es un array de mensajes, cada uno con un array de destinos, con el texto dos niveles más abajo en content.text; POST /v1/sms/messages recibe from, to y text en el nivel superior. Además, tu URL base de Infobip es personalizada por cuenta, con la forma xxxxx.api.infobip.com, autenticada con Authorization: App <key>. Bird envía desde un host regional con una clave bearer, así que el host que tu código almacena cambia al mismo tiempo que la forma del payload.

Pasa esto a tu agente

Usa este brief en tu agente de código. Comienza con descubrimiento y produce un plan de migración revisable antes de cualquier cambio en producción.
Ejemplo de código
Help me migrate my SMS integration from Infobip to Bird.
1. Inspect this repository's sends, senders, callbacks, schedules, templates, opt-outs and tests. List the traffic and behavior that must survive the migration.
2. Read the Markdown guides at https://bird.com/docs/guides/sms/migrate/infobip.md and https://bird.com/docs/guides/sms/migrate.md. Use an existing authenticated Bird MCP or CLI connection. If neither is available, follow https://bird.com/docs/ai/set-up-your-agent.md. Discover the actual operations; do not invent commands or ask me to paste credentials into chat.
3. Prepare the code changes, sender/destination requirements, consent migration, webhook verification and rollout/rollback plan. Preserve the scope of each customer's preferences, including requests outside SMS replies. Separate API batches from audience broadcasts and preserve any behavior that has no direct endpoint equivalent.
4. Show me the exact affected resources, destinations, test volume and known costs before an action that sends messages, spends money, registers or changes a sender, or moves production traffic. Require explicit human authorization for each paid submission or production change. Name one-off 10DLC registration and resubmission fees before requesting approval. An existing explicit approval for that exact action is sufficient; broad migration approval is not. Simulated SMS destinations are billable and still require authorization.
5. If I am keeping Infobip numbers, prepare the human support port request and obtain authorization to send it. Read bird support-tickets create --help, then use the available CLI or MCP support operation with the reviewed number list and requirements. Return the ticket ID and follow the reply; support arranges the port on its own schedule, separately from the code cutover.
6. Run local and intercepted tests first. When authorized, perform the agreed bounded integration tests, inspect accepted and final outcomes separately, and report failures or uncertainty. Do not claim a delivery receipt proves reading or that request idempotency guarantees exactly-once delivery.
7. Keep production cutover and retiring the old provider as explicit steps in the approved rollout. Finish with the diff, evidence, unresolved requirements and the next action.

Mapear la llamada de envío

La tabla de renombrado es corta porque el cambio de forma es el trabajo real:
Qué haceInfobipBird
Destinatariomessages[].destinations[].toto (uno por solicitud)
Remitentemessages[].senderfrom
Cuerpomessages[].content.texttext
Intención(ninguno)category, obligatorio en texto libre
Informes de entregawebhooks.delivery, por mensajeun webhook del espacio de trabajo suscrito a los eventos de entrega de abajo
Contexto de ida y vueltawebhooks.callbackDatametadata, pero consulta la nota de tamaño abajo
Agrupación de campañaoptions.campaignReferenceIdtags, solo para filtrado; consulta abajo
Flashoptions.flashsin equivalente
Validezoptions.validityPeriodsin equivalente: validity_period se rechaza
Ventana de entregaoptions.deliveryTimeWindowsin equivalente
Reintentos seguros(ninguno en sus clientes generados)encabezado Idempotency-Key
Notas de portabilidad:
  • Tres niveles pasan a ninguno. El anidamiento existe para llevar muchos mensajes y muchos destinos en una solicitud. Para enviar un mensaje a una persona, Bird toma los tres campos en el nivel superior, así que el builder que arma los arrays se elimina en lugar de traducirse.
  • callbackData es más grande que metadata. Infobip acepta hasta 4000 caracteres y lo devuelve en el informe de entrega. metadata de Bird tiene un límite de 2 KB serializado y se repite en cada evento del mensaje, no solo en el terminal. La repetición es mejor trato; el límite no, así que todo lo que se acerque al tope debe recortarse a una clave que puedas consultar en lugar de enviarse completo.
  • campaignReferenceId es contexto de reportes, no una migración de campaña. Los tags de Bird son pares {name, value} que se convierten en dimensiones de consulta, para que puedas segmentar analíticas por campaña como lo hacías. Lo que no incluyen es un objeto de campaña: una etiqueta no crea ni configura un envío masivo. Evalúa el flujo de campaña por separado cuando migres campañas de audiencia.
  • campaignReferenceId no es una clave de idempotencia. Infobip lo define como un ID para rastrear el rendimiento de una campaña, así que agrupa pero no deduplica. Si dependías de él para hacer seguro un reintento, no estabas cubierto; el encabezado Idempotency-Key es lo que cumple esa función aquí.
  • Nada corresponde a category. Las opciones de mensaje de Infobip cubren validez, ventana de entrega, flash y configuraciones regionales, y ninguna declara por qué se envía el mensaje. Decide por tipo de mensaje si es transactional, marketing, authentication o service.
  • Dos campos de opciones no tienen destino. validityPeriod está reservado y responde a 422 SMSUnsupportedFeature; deliveryTimeWindow no tiene contraparte, así que las ventanas de programación pasan a tu propio dispatcher.

Trasladar las cancelaciones de suscripción

Infobip mantiene una Blocklist: una lista de destinatarios que han cancelado tu comunicación, gestionada a través de la API de Blocklist o mediante People en la interfaz web, y cualquier envío a alguien en ella se rechaza. Los disparadores por palabra clave la alimentan automáticamente, así que un suscriptor que envía STOP queda ahí sin que tu aplicación haga nada.
Eso hace que la exportación sea la más fácil de cualquier proveedor en este conjunto, y la expansión la mayor. Una entrada de Blocklist es un suscriptor para toda la cuenta; una supresión de Bird es un par remitente-suscriptor. Así que cada entrada se convierte en tantas supresiones como remitentes tengas: una Blocklist de mil entradas y seis remitentes son seis mil registros. Calcula el multiplicador antes de empezar, porque es la diferencia entre una importación que toma un minuto y una que necesita procesamiento por lotes y un registro de progreso.
Conserva el alcance original de la Blocklist. No reduzcas una revocación durante la migración solo porque el nuevo modelo técnico puede expresar pares más estrechos. Una preferencia a nivel de espacio de trabajo puede representar una solicitud más amplia; es un propietario separado de las supresiones por remitente. Verifica ambos al decidir la elegibilidad.
Importa a través del ciclo de supresión. Lectura y gestión de supresiones contiene el comando y la razón por la que una supresión manual bloquea todas las categorías, incluida la transaccional.
Una vez que estás aquí, Bird responde las palabras clave de parada por sí mismo desde su propio catálogo por país, así que los disparadores de palabras clave que configuraste no tienen contraparte que reconstruir, y los personalizados se convierten en reglas de palabras clave. Las razones se apilan en lugar de fusionarse, así que un par que importaste como manual que luego envía STOP conserva dos registros, y los mensajes siguen detenidos hasta que ambos hayan terminado.

Traducir estados de entrega

Usa esta tabla para comparar conceptos del ciclo de vida, no para renombrar eventos mecánicamente. Bird elige un evento de fallo a partir del estado y la razón reportados. Una solicitud API rechazada no crea ningún mensaje; un rechazo después de la aceptación puede producir sms.rejected, incluido un rechazo del operador. La evidencia de entrega faltante queda como desconocida. Conserva el estado y el código sin procesar del proveedor junto con tu resultado normalizado.
Infobip reporta un grupo de estado y un nombre de estado en cada informe de entrega, y Bird emite un tipo de evento:
ResultadoGrupo de estado de InfobipBird
API aceptó el mensajePENDINGsms.accepted
Entregado al operadorPENDINGsms.sent
El operador confirmó la entregaDELIVEREDsms.delivered
El operador reportó no entregaUNDELIVERABLEsms.undelivered
Fallo permanenteREJECTEDsms.failed
Rechazado antes del envíoREJECTEDsms.rejected
Ventana de validez agotadaEXPIREDsms.expired
EXPIRED es la fila que debes leer con atención, porque cubre dos cosas distintas en su lado y solo una de ellas existe aquí. Infobip expira un mensaje cuando se agota el periodo de validez de su propia plataforma, que por defecto es 48 horas, o cuando el operador devuelve expirado como estado final. Bird no establece una ventana de validez propia ni ejecuta un temporizador que finalice un mensaje, así que sms.expired solo proviene del acuse de recibo del operador. La mitad reportada por el operador se mapea directamente; la mitad del temporizador de plataforma no tiene contraparte, y un mensaje que habría expirado en su reloj permanece en tránsito aquí hasta que el operador decida.
REJECTED aparece dos veces a propósito. Infobip lo usa tanto para un mensaje que rechazó él mismo como para uno que el operador devolvió como rechazado, que son los eventos de Bird elegidos a partir del resultado de procesamiento o del operador y su razón; un rechazo del operador puede producir sms.rejected. El nombre de estado dentro del grupo es lo que los diferencia, así que un handler que se ramificaba solo por el grupo necesita el nombre una vez que está aquí. PENDING también cubre dos filas, porque es el grupo en el que se encuentra el mensaje desde la aceptación hasta que llega un informe terminal.
Tres mecánicas cambian con los nombres:
  • Las suscripciones reemplazan los webhooks por mensaje. Infobip nombra un webhook en cada mensaje, así que el destino lo elige quien escribe la llamada, y el tipo de contenido se elige con él. Bird entrega JSON a endpoints que tu espacio de trabajo registra, cada uno suscrito a los tipos de evento que desea, así que un segundo consumidor es una segunda suscripción en lugar de un cambio en cada punto de llamada.
  • Pierdes la elección por mensaje, incluido XML. Infobip permite que un mensaje elija JSON o XML y adjunte hasta 4000 caracteres de datos de callback. Bird envía solo JSON, y callbackData se convierte en metadata, que se repite en cada evento de ese mensaje en lugar de solo en el informe.
  • Pull se convierte en push. Infobip te permite obtener informes desde un endpoint de reportes además de recibirlos. Bird no tiene un sondeo equivalente para eventos; suscríbete y lee el estado del mensaje a través de API cuando lo necesites bajo demanda.
Registra el endpoint una vez, indicando los tipos de evento que tu handler necesita: los eventos sms.* de arriba son la lista a la que suscribirte, y no hay un comodín que los sustituya. Bird envía JSON firmados según Standard Webhooks; Crear un endpoint tiene el comando y lo único que debes hacer bien en la primera llamada, que es almacenar el secreto de firma que la respuesta muestra una sola vez.
Bird reporta un fallo con un código error estandarizado como invalid_destination, content_rejected, provider_unavailable o recipient_opted_out; la lista completa está en la página de eventos. Mapea tus alertas a esos en lugar de a los pares numéricos de grupo y nombre de Infobip.

Corte de migración

Destinos, remitentes y la rampa de tráfico son independientes del proveedor y están cubiertos en la guía principal. Tres elementos específicos de Infobip pertenecen al plan de corte.
El host cambia, y es configuración en lugar de código. Tu URL base de Infobip se emite por cuenta; Bird envía desde un host regional elegido cuando se creó tu espacio de trabajo. Encuentra cada lugar donde ese host está configurado antes del corte, incluidas variables de entorno, gestores de secretos y manifiestos de despliegue, porque uno que se pase por alto falla en tiempo de ejecución en lugar de en la compilación.
Tu marca y campaña 10DLC están registradas en The Campaign Registry a través de la API de registro de números de Infobip y no se convierten automáticamente en registros de Bird. Confirma el procedimiento de migración o registro aplicable antes de enviar trabajo de pago. Comienza desde Registrarse para 10DLC: cubre qué significa cada campo, los tipos de entidad que el registro reconoce y la llamada de requisitos que te indica qué proporcionar antes de crear la marca, que es el paso con cargo.
Los números que posees en Infobip necesitan una portabilidad que soporte gestiona, en su propio calendario en lugar del tuyo.

Próximos pasos

Recursos relacionados

Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.