Checklist de migración de otra API de WhatsApp a ZapZap sin perder el historial
Quien ya opera en una API de WhatsApp (Evolution, Z-API, WAHA u otra) y quiere migrar teme tres cosas: quedar fuera del aire, perder el historial y romper el sistema de los clientes. La buena noticia es que, para una API REST con webhook, la migración es cambio de dirección y de formato, hecha número a número. El historial de conversaciones de tu sistema sigue siendo tuyo y no migra solo: ZapZap no importa la base de datos de la API anterior. ZapZap es una solución no oficial, como buena parte de las alternativas citadas, y WhatsApp puede limitar o bloquear números en cualquiera de ellas.
Publicado el · 4 min de lectura
Este artículo también está disponible en: Português · English
Paso 1: inventario antes de tocar nada
Lista, por número: cliente, quién lo usa, volumen diario, integraciones que llaman a la API (CRM, n8n, chatbot), la dirección de webhook actual y el formato de eventos que tu sistema espera. Marca los números críticos y los de bajo riesgo. El primero en migrar es el de menor riesgo, no el mayor cliente.
Haz también el inventario del historial: lo que está en tu base (conversaciones, leads) y lo que existe solo en la API antigua. Exporta lo que solo existe allí antes de cancelar nada. Para comparar lo que entrega cada alternativa, mira los comparativos.
Paso 2: cambia el cliente HTTP, no tu sistema
Crea una capa pequeña en tu código (una función enviarTexto) y deja que el cambio de API ocurra solo en ella. En ZapZap, el envío de texto es POST https://api.zapzapapi.com/api/v1/{instanceId}/send/text, con number y text en el cuerpo y los encabezados x-api-key y x-api-secret. La referencia y el archivo OpenAPI listan los demás endpoints (medios, botones, encuestas, grupos), y hay SDKs en Node.js, Python y PHP.
Haz lo mismo con el webhook: un adaptador que convierte el sobre de ZapZap al formato interno de tu sistema. Valida la firma y deduplica, como en la guía de webhooks idempotentes.
The main calls of a migration
# 1) Inventory: list the instances already created on ZapZap
curl "https://api.zapzapapi.com/api/v1/instances" \
-H "x-api-key: $ZAPZAP_API_KEY" -H "x-api-secret: $ZAPZAP_API_SECRET"
# 2) Point the new webhook at your system and keep the old one running during the cutover
curl -X PUT "https://api.zapzapapi.com/api/v1/instances/INSTANCE_ID/webhook" \
-H "Content-Type: application/json" \
-H "x-api-key: $ZAPZAP_API_KEY" -H "x-api-secret: $ZAPZAP_API_SECRET" \
-d '{"webhook_url":"https://your-system.example/webhook","events":"messages,messages_update"}'
# 3) Optional: ask for older messages of ONE chat (they arrive through the webhook, not in the response)
curl -X POST "https://api.zapzapapi.com/api/v1/INSTANCE_ID/message/history-sync" \
-H "Content-Type: application/json" \
-H "x-api-key: $ZAPZAP_API_KEY" -H "x-api-secret: $ZAPZAP_API_SECRET" \
-d '{"number":"5511999999999@s.whatsapp.net","count":50}'
# 4) Switch the send call: same idea, new base URL and headers
curl -X POST "https://api.zapzapapi.com/api/v1/INSTANCE_ID/send/text" \
-H "Content-Type: application/json" \
-H "x-api-key: $ZAPZAP_API_KEY" -H "x-api-secret: $ZAPZAP_API_SECRET" \
-d '{"number":"5511999999999","text":"Test after migration"}'Paso 3: conecta el número y corre los dos lados en paralelo
Conectar el número en ZapZap es escanear un código QR, y eso exige el aparato en mano: programa la ventana con el cliente. Cambiar de herramienta es un cambio de sesión del número, así que evita envíos en las primeras horas y empieza por conversaciones de quien ya habla con el cliente.
Durante el corte, mantén el webhook antiguo y el nuevo activos para el mismo número solo si tu sistema deduplica. Prueba con el POST de prueba del webhook, envía un mensaje de prueba y confirma la recepción de una respuesta real.
Paso 4: qué hacer con el historial
El historial de conversaciones que está en tu base sigue allí: no hay nada que migrar. Lo que la API antigua guardaba y tu sistema no, lo exportas por ella. Del lado de ZapZap existe POST /{instanceId}/message/history-sync, que solicita la sincronización de mensajes antiguos de un chat; los mensajes llegan por el webhook o por SSE, no en la respuesta, y los parámetros son el JID del chat, un mensaje de referencia y la cantidad. Pide por chat y maneja el volumen recibido, porque lo que WhatsApp devuelve depende de lo que aún conserve.
No le prometas al cliente el historial completo. Acuerda lo que queda: lo que está en tu base, más lo que traiga la sincronización. Consulta mensajes ya recibidos con POST /{instanceId}/message/find.
Paso 5: corte gradual, un número a la vez
Migra un número, observa un día hábil completo (entregas, respuestas, errores en el webhook, estado de la instancia) y solo entonces migra el siguiente. Mantén la API antigua pagada hasta que el último número se estabilice, porque es tu plan de vuelta. El costo de ZapZap es R$15 por número activo al mes, prepago y sin cobro por mensaje, más la tarifa de activación por instancia: consulta GET /instances/cost y la página de precios.
Cierra cada número con una revisión corta: webhook con baja tasa de error, tasa de respuesta parecida a la anterior y el cliente avisado. Para quien opera a escala, mira agencias con IA, reventa con la marca del cliente y el calentamiento de chip.
Resumen rápido
- Migrar es cambiar llamadas HTTP, webhook y la conexión del número; tu sistema debe tener una capa única de envío.
- El historial que está en tu base sigue siendo tuyo; ZapZap no importa la base de la API anterior.
- message/history-sync pide mensajes antiguos de un chat y los entrega por webhook o SSE, sin garantía de historial completo.
- Migra un número a la vez, observa un día hábil y mantén la API antigua hasta el final.
- ZapZap es una solución no oficial: el riesgo de límite o bloqueo existe en cualquier API no oficial.
Sigue leyendo
Lee también
Preguntas frecuentes
¿ZapZap importa el historial de mi API actual?
No hay importación de la base de otra API. El historial de tu sistema permanece contigo, y puedes solicitar mensajes antiguos de un chat con message/history-sync.
¿Necesito reconectar el número por código QR?
Sí. Cada número se conecta a ZapZap por código QR, con el aparato en mano. Programa la ventana con el cliente.
¿Puedo mantener la API antigua durante la migración?
Puedes y debes, hasta que el último número se estabilice. Deja los dos webhooks activos solo si tu sistema deduplica eventos.
¿El formato del webhook es igual al de mi API actual?
Probablemente no. El sobre de ZapZap tiene delivery_id, event_id, instance_id, event y data; crea un adaptador al formato interno.
¿Migrar reduce el riesgo de bloqueo?
No por sí solo. ZapZap es una solución no oficial y WhatsApp puede limitar o bloquear números. Lo que ayuda es ritmo, consentimiento y calentamiento.
Migra el primer número y compara
Crea la cuenta, conecta un número de prueba y cambia una llamada. R$15 por número activo al mes, sin cobro por mensaje. Al verificar el teléfono hay un crédito de bienvenida, sujeto a la campaña vigente.
