Migrar de Evolution API a ZapZap: guía paso a paso
Migrar de Evolution API a ZapZap cambia un sistema que alojas tú por un servicio gestionado. Dejas de operar servidor, base de datos y actualizaciones, y pasas a pagar R$15 por número activo al mes. El cambio en el código es pequeño: URL y encabezados de envío y el lector de webhook. Los datos sobre Evolution vienen del repositorio y de la documentación oficial, leídos el 27/10/2026.
Publicado el · 4 min de lectura
Este artículo también está disponible en: Português · English
Qué cambia al salir del autoalojado
Evolution API es de código abierto: el repositorio oficial indica licencia Apache 2.0 con condiciones adicionales de preservación de logo y aviso de uso, Node.js 20 o superior, PostgreSQL o MySQL y Redis recomendado. La propia descripción del proyecto dice que la conexión por Baileys depende de WhatsApp Web y puede tener limitaciones frente a las APIs oficiales. Tú eliges el servidor, la versión y cuándo actualizar.
En ZapZap, el servidor, la actualización y el monitoreo quedan con nosotros, y el cobro es por número activo. A cambio, no controlas la infraestructura ni el código. Los dos son no oficiales, así que el riesgo de bloqueo del número es del mismo tipo.
Cuánto cuesta mantener Evolution: la cuenta abierta
Software libre no es costo cero. Arma la cuenta con tus números: servidor (VPS o nube) que corre Node, base y Redis; respaldo; monitoreo; y las horas de quien actualiza e investiga cuando cae una sesión. Suma el costo mensual del servidor al valor de la hora del responsable por las horas al mes y divide por el número de instancias.
Compara con R$15 por número activo al mes. Si operas muchas instancias y ya tienes DevOps, la cuenta puede favorecer a Evolution. Con pocas instancias y nadie dedicado, suele favorecer lo gestionado. El post sobre Evolution y WAHA alojados frente a API gestionada trae la fórmula completa.
Mapa de endpoints: Evolution API a ZapZap
La columna de Evolution viene de la documentación oficial (docs.evolutionfoundation.com.br, 27/10/2026). Versiones distintas de Evolution usan formatos distintos, así que revisa la tuya.
| Acción | Evolution API | ZapZap |
|---|---|---|
| Autenticación | encabezado apikey (clave global o de la instancia) | x-api-key y x-api-secret |
| Enviar texto | POST /message/sendText/{instanceName}, con number y textMessage.text | POST /api/v1/{instanceId}/send/text, con number y text |
| Enviar archivo | endpoints de multimedia por tipo | POST /api/v1/{instanceId}/send/media con type, file, text y docName |
| Verificar número | revisar la documentación de Evolution | POST /api/v1/{instanceId}/chat/check con numbers |
| Eventos | MESSAGES_UPSERT, MESSAGES_UPDATE, CONNECTION_UPDATE y otros, por instancia | messages, messages_update, connection y otros, en PUT /api/v1/instances/{id}/webhook |
| Conectar | código QR o código de emparejamiento en la instancia | código QR en QR de la instancia o código de emparejamiento en conectar |
Cómo cambiar el envío y el webhook
El envío cambia en URL, encabezados y forma del cuerpo: en Evolution, el texto va dentro de un objeto textMessage; en ZapZap, es el campo text en el nivel superior. Mantén una función única de envío y cambia solo su interior.
En el webhook, Evolution envía el nombre del evento en mayúsculas (por ejemplo, MESSAGES_UPSERT); ZapZap envía event en minúsculas (messages) dentro de un sobre con data.message. Escribe un adaptador y activa en ZapZap solo el evento messages, más messages_update si usas el estado de entrega.
Node.js: envio e adaptador
// ANTES: Evolution API
// POST {EVOLUTION_URL}/message/sendText/{instancia} header: apikey
// body: { number: "5511999999999", textMessage: { text: "Olá!" } }
// DEPOIS: ZapZap
export async function enviarWhatsApp(numero, texto) {
const r = await fetch(
"https://api.zapzapapi.com/api/v1/" + process.env.ZAPZAP_INSTANCE_ID + "/send/text",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.ZAPZAP_API_KEY,
"x-api-secret": process.env.ZAPZAP_API_SECRET,
},
body: JSON.stringify({ number: numero, text: texto }),
signal: AbortSignal.timeout(15000),
}
);
if (!r.ok) throw new Error("ZapZap " + r.status + " " + (await r.text()));
return r.json();
}
export function deZapZap(evento) {
const m = evento?.data?.message;
if (evento?.event !== "messages" || !m || m.fromMe) return null;
return { telefone: String(m.chatid || "").replace(/\D/g, ""), texto: m.text || "" };
}Cómo mover el número y lista de cambio
Crea la instancia en ZapZap (Crear Instancia) y conecta el número por código QR. Los mensajes y contactos guardados en tu base de Evolution siguen siendo tuyos: expórtalos antes de apagar el servidor. No mantengas el mismo número conectado en los dos a la vez.
Lista: 1) crear la cuenta y probar con un número tuyo; 2) cambiar la función de envío; 3) apuntar el webhook al adaptador y validar la firma (guía); 4) exportar lo que quieras guardar de Evolution; 5) hacer el cambio en un horario tranquilo; 6) apagar el servidor antiguo solo después de unos días estables.
Cuándo seguir en Evolution
Sigue en Evolution si tienes DevOps y quieres el código y los datos dentro de tu entorno, si operas muchas instancias y la cuenta del servidor te favorece, o si dependes de una integración específica suya. Mira también la comparativa Evolution API y ZapZap. Si necesitas un canal homologado por Meta, la opción es la API oficial.
Resumen rápido
- El cambio en el código es pequeño: URL y encabezados de envío y un adaptador de webhook.
- El software libre tiene costo de servidor, actualización y tiempo: haz la cuenta con tus números.
- Los dos son no oficiales; el riesgo del número es del mismo tipo.
- Exporta los datos que quieras guardar antes de apagar el servidor de Evolution.
Sigue leyendo
Lee también
Preguntas frecuentes
¿Mis datos de Evolution pasan a ZapZap?
No automáticamente. Evolution guarda datos en tu base; exporta lo que necesites. ZapZap empieza con la instancia vacía, conectada por código QR.
¿ZapZap usa Baileys como Evolution?
No publicamos detalles de implementación como criterio de elección. Desde el punto de vista de quien usa, la conexión es por código QR, como en WhatsApp Web, y el riesgo de una solución no oficial existe en las dos.
¿Puedo migrar poco a poco?
Sí: migra una instancia a la vez, empezando por una de menor riesgo, y mantén la función de envío configurable por instancia durante la transición.
¿ZapZap garantiza que el número no será bloqueado?
No. Ninguna API no oficial puede garantizarlo. El retraso y el escribiendo automáticos reducen el riesgo, pero opt-in, ritmo y lista limpia siguen siendo tuyos.
Compara en la práctica
Crea la cuenta, conecta un número de prueba y ejecuta el mapa de endpoints. R$15 por número activo al mes, sin cobro por mensaje.
