Migración

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ónEvolution APIZapZap
Autenticaciónencabezado apikey (clave global o de la instancia)x-api-key y x-api-secret
Enviar textoPOST /message/sendText/{instanceName}, con number y textMessage.textPOST /api/v1/{instanceId}/send/text, con number y text
Enviar archivoendpoints de multimedia por tipoPOST /api/v1/{instanceId}/send/media con type, file, text y docName
Verificar númerorevisar la documentación de EvolutionPOST /api/v1/{instanceId}/chat/check con numbers
EventosMESSAGES_UPSERT, MESSAGES_UPDATE, CONNECTION_UPDATE y otros, por instanciamessages, messages_update, connection y otros, en PUT /api/v1/instances/{id}/webhook
Conectarcódigo QR o código de emparejamiento en la instanciacó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.

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.