Migrar desde Meta
Si ya tienes una integración funcionando contra el Graph, la migración es un cambio de dos cadenas. El resto de esta guía trata de todo lo que hay alrededor.
Desde la Meta Cloud API directa
1. Conecta el número
El número debe salir de tu Business Manager y entrar en el nuestro. En el panel, en Conectar número, el Embedded Signup lo hace — el cliente autoriza desde la ventana de Facebook.
Mientras el número no se migre, tu integración antigua sigue funcionando con normalidad.
2. Cambia dominio y token
- https://graph.facebook.com/v21.0/{PHONE_NUMBER_ID}/messages
+ https://api.joinotify.com/v1/{PHONE_NUMBER_ID}/messages
- Authorization: Bearer EAAG...
+ Authorization: Bearer sk_live_xxx
El phone_number_id cambia en la migración. Toma el nuevo de GET /me o del panel.
Si tu código pasa el token como ?access_token=, eso debe cambiar: en Joinotify el token
va siempre en la cabecera. Consulta
Compatibilidad con Meta.
3. Apunta los webhooks
Ya no configuras callback en Meta. Registra tu endpoint aquí:
curl -X POST https://api.joinotify.com/webhook-endpoints \
-H 'Authorization: Bearer sk_live_xxx' \
-H 'Content-Type: application/json' \
-d '{ "name": "produccion", "url": "https://tu-servidor.com/webhooks", "events": [] }'
El cuerpo entregado es el mismo sobre de Meta, así que tu handler no cambia. Lo que sí cambia es la validación de firma:
- X-Hub-Signature-256: sha256=<hmac del cuerpo con el App Secret>
+ X-Joinotify-Signature-256: sha256=<hmac de "{timestamp}.{cuerpo}" con el whsec_>
El paso a paso está en Verificar la firma.
4. Recrea las plantillas
Las plantillas creadas en tu WABA antigua no vienen contigo. Recréalas y espera la aprobación antes de dar el cambio — es lo que más retrasa una migración.
curl https://api.joinotify.com/templates \
-H 'Authorization: Bearer sk_live_xxx'
5. Da el cambio
Con el número migrado, las plantillas aprobadas y el webhook registrado, cambia la URL
base en producción. El phone_number_id nuevo entra al mismo tiempo.
Desde otro proveedor (BSP)
El camino es el mismo, con un detalle más: el número debe ser liberado por el proveedor actual antes de entrar en nuestro Business Manager. Algunos cobran o imponen un preaviso — revisa el contrato antes de fijar una fecha.
Si el proveedor actual expone una API propietaria en lugar del contrato de Meta, tu código
de envío hay que reescribirlo. El espejo /v1 de Joinotify sigue a Meta, no al proveedor.
Lo que no migra
| Elemento | Situación |
|---|---|
| Historial de conversaciones | No migra. En coexistencia, se puede sincronizar desde el móvil. |
| Plantillas | Hay que recrearlas y volver a aprobarlas. |
| Calidad del número | Empieza de cero. |
| Límite de mensajes en 24h | Empieza en el nivel inicial y sube con el uso. |
phone_number_id y waba_id | Cambian. Actualízalos donde estén guardados. |
Lista de verificación
- Número conectado en el panel de Joinotify
-
phone_number_idywaba_idnuevos anotados - Clave de API creada y guardada en un gestor de secretos
- Token movido a la cabecera
Authorization(nada de?access_token=) - URL base cambiada a
https://api.joinotify.com/v1/ - Plantillas recreadas y aprobadas
- Endpoint de webhook registrado y probado con
POST /webhook-endpoints/{id}/test - Validación de firma cambiada a
X-Joinotify-Signature-256 - Tratamiento del
429conRetry-Afterimplementado - Integración antigua apagada solo tras el primer mensaje entregado por la nueva