Evolution API es probablemente el proyecto open source más usado del ecosistema de automatización de WhatsApp, y la razón es simple: resuelve en veinte minutos un problema que por la vía oficial toma dos semanas.
Eso es un elogio de verdad, no una trampa antes de la crítica. Antes de listar los riesgos vale reconocer por qué tanta gente competente la eligió.
Por qué es tan popular
Para poner un bot o un agente en WhatsApp por la vía oficial necesitas una cuenta de Meta Business, verificación de la empresa, un número que no esté en uso en la app común, templates aprobados antes de poder iniciar cualquier conversación, y un webhook con verificación de firma.
Con Evolution API levantas un container, abres el QR, lo escaneas con el celular y ya estás enviando mensajes. Costo: tu VPS. Plazo: una tarde.
Súmale integraciones listas con n8n, Typebot y Chatwoot, documentación en español y portugués y una comunidad grande, y queda claro por qué se volvió el default en agencias, proyectos internos y MVPs de toda LATAM.
Qué es, técnicamente
Esta es la parte que define todo lo demás, y hay equipos que la usan meses sin tenerlo claro.
Evolution API no habla con Meta. Se conecta a WhatsApp como un dispositivo vinculado, igual que WhatsApp Web. El QR que escaneas es el mismo mecanismo de "vincular un dispositivo" de la aplicación.
Consecuencia directa: desde el punto de vista de Meta, no hay ninguna API corriendo. Hay un celular con un dispositivo vinculado que manda muchos mensajes.
Eso explica todos los comportamientos que confunden al principio. Por qué el número puede ser bloqueado. Por qué no hay sello de cuenta verificada. Por qué no existen templates ni ventana de 24 horas (las reglas de Meta simplemente no aplican, porque Meta no sabe que existes). Y por qué, cuando algo se rompe, no hay a quién llamar.
Qué aceptas junto con eso
Sin alarmismo, y sin omitir nada:
Los términos de Meta prohíben clientes no autorizados. Eso no es interpretación, está escrito. La aplicación se hace bloqueando números, normalmente gatillada por reportes de usuarios o por patrones de envío. Mucha gente corre años sin problemas. Otros pierden el número en su primera campaña.
El bloqueo se lleva el número, no la instancia. Si el número bloqueado es la línea de atención de la empresa, lo que pierdes es el historial de conversaciones de tus clientes y el número que está impreso en las tarjetas, en el sitio y en Google Business. Cambiar de número cuesta más de lo que parece.
El uptime es tuyo. Se cayó la sesión, se reinició el container, el celular estuvo sin internet demasiado rato: tú te enteras y tú lo reconectas. A las tres de la mañana de un sábado.
No hay camino de soporte. Ni de Meta, porque no eres su cliente, ni de un proveedor, porque no hay proveedor. Hay una comunidad generosa, y es genuinamente buena, pero una comunidad no tiene SLA.
La escala es el punto donde un patrón se vuelve una señal. Una instancia mandando pocos mensajes a gente que escribió primero se parece a una persona. La misma instancia mandando mil mensajes en la mañana no.
La decisión
| Tu situación | Elige |
|---|---|
| MVP, prototipo, validar una idea esta semana | Evolution API |
| Automatización interna: alertas a tu propio equipo | Evolution API |
| Proyecto personal, bot de grupo, herramienta para ti | Evolution API |
| El número es la línea de atención oficial de la empresa | Cloud API oficial |
| Vas a mandar campañas o mensajes con volumen | Cloud API oficial |
| Hay un contrato, un SLA o un cliente pagando por esto | Cloud API oficial |
| Necesitas iniciar conversaciones con quien no escribió primero | Cloud API oficial (es la única con templates) |
| Sector regulado, auditorías, requisitos de trazabilidad | Cloud API oficial |
| Quieres el sello de verificado y el nombre de la empresa visible | Cloud API oficial |
La fila que más pesa es la tercera desde abajo. Sin templates aprobados solo puedes responderle a quien te escribió primero. Para soporte eso puede alcanzar. Para recordatorios de cita, confirmaciones de pedido, recuperación de carrito o cualquier cosa que inicias tú, no alcanza, y no hay forma legítima de esquivarlo.
Lo que cuesta cada una de verdad
Evolution API es gratis en el sentido de que el software es gratis. Lo que cuesta:
| Ítem | Evolution API | Cloud API vía Zavu |
|---|---|---|
| Licencia de software | Gratis | Incluida |
| Servidor | Tu VPS, y tiene que quedarse arriba | Nada que mantener |
| Por mensaje | Gratis | Tarifa de Meta pasada a costo, sin fee por conversación de Zavu |
| Mantener la sesión viva | Tu trabajo, indefinidamente | No hay sesión que se caiga |
| Riesgo de perder el número | Real y no asegurable | Cuenta oficial |
| Soporte cuando se rompe | Comunidad | Soporte del proveedor |
Contando el tiempo de quien cuida la instancia, "gratis" suele salir más caro que la cuenta oficial en cualquier operación que ya tenga clientes pagando. Por debajo de esa línea, Evolution API gana cómodo, y es honesto decirlo.
El agente es el mismo en las dos
Esta es la parte tranquilizadora, y la razón por la que la decisión no tiene que ser definitiva.
Tu agente es un prompt más tools. No sabe ni le importa qué canal entregó el mensaje. Cambiar de transporte no es reescribir el agente, es cambiar de transporte.
Si hoy estás en Evolution API, el agente que escribiste sigue sirviendo. Y tampoco lo portas a mano. Instalas las skills y el CLI, y después apuntas tu coding agent al código que ya tienes:
terminalnpx skills add zavudev/zavu-skills npx zavudev@latest login
> Este es mi bot de Evolution API. Muévelo a Zavu sobre la WhatsApp Cloud API oficial, manteniendo el mismo prompt y la misma consulta de disponibilidad. Deployalo y pruébalo con "¿tienen algo libre el jueves?"
Lo que vuelve:
TypeScriptimport { defineAgent, defineTool } from "@zavudev/functions" defineAgent({ senderId: process.env.SENDER_ID!, name: "Ana", provider: "zavu", model: "openai/gpt-4o-mini", prompt:) return res.json() }, })Eres Ana, recepción de una clínica. Responde en dos frases o menos. Nunca confirmes una hora sin revisar la agenda., }) defineTool({ name: "check_availability", description: "Get free appointment slots for a date. Use when the patient asks about scheduling.", parameters: { type: "object", properties: { date: { type: "string" } }, required: ["date"], }, handler: async ({ date }) => { const res = await fetch(https://clinica.example.com/slots?date=${date}
npx zavudev deploy y responde en WhatsApp oficial, y también en SMS, email y voz si el sender tiene esos canales. La misma tool, el mismo prompt.
Al revés también vale: si quieres mantener Evolution API para lo interno y usar la cuenta oficial para atención a clientes, las dos pueden apuntar a la misma lógica de negocio. La tool es una función HTTP, y le da igual quién la llamó.
Cómo se ve la migración
Si decidiste pasar a la cuenta oficial, el camino con menos dolor:
La guía de integración de la WhatsApp Business API cubre los pasos, y el precio por mensaje explicado cubre qué cobra Meta por categoría de conversación, que es la cuenta que vas a querer hacer antes de decidir.
El resumen honesto
Evolution API es un buen proyecto resolviendo un problema real, y el problema que resuelve es la burocracia de la vía oficial. Si estás validando una idea, automatizando algo interno o construyendo para ti, úsalo y sigue.
El momento de salir es cuando la respuesta a "qué pasa si mañana bloquean este número" deja de ser "consigo otro número" y pasa a ser "la empresa se detiene".
Para seguir leyendo
- API de WhatsApp: guía completa: la vía oficial explicada desde el principio.
- Tutorial de WhatsApp Cloud API: paso a paso con código.
- Precio por mensaje de WhatsApp: qué cobra Meta, por categoría.
- Cómo crear un agente de IA: el agente que corre sobre cualquiera de las dos.