WhatsApp Cloud API
el transporte
El WhatsApp real. El mensaje del cliente llega crudo: texto, foto, voz, PDF y el ctwa_clid de anuncios. La pregunta es quién es dueño de este número.
Documento técnico · arquitectura
El cerebro · tu integración
Un robot que atiende WhatsApp solo con IA. Nuestro cerebro es agnóstico al transporte: se conecta al CRM y a la integración que ustedes ya tienen. Solo necesitamos una puerta de entrada al mensaje y una de salida.
Clez no usa Kommo: tienen su propio módulo de CRM y su propia integración con Meta. Perfecto — nuestro sistema no impone plataforma. Kommo es solo la implementación con la que ya probamos todo esto de punta a punta (Servicare). Lo único que define cómo nos enchufamos es una pregunta: ¿pueden entregarnos el mensaje crudo, o nos dan un canal para espejar? (§ Cómo nos conectamos).
Meta transporta, nuestro Worker piensa, y el CRM de ustedes es la sala de control. El cerebro se sienta en el medio, sin casarse con ninguna plataforma.
el transporte
El WhatsApp real. El mensaje del cliente llega crudo: texto, foto, voz, PDF y el ctwa_clid de anuncios. La pregunta es quién es dueño de este número.
cerebro + manos
Serverless en el edge. Razona con Gemini, responde por WhatsApp y sincroniza con el CRM. Aquí vive «la automatización», y es lo único que ponemos nosotros.
la sala de control
El módulo propio de Clez. Sus agentes ven la conversación, cambian de etapa y retoman el chat. Sigue siendo su fuente de verdad; nosotros solo agregamos el cerebro.
Todo depende de quién es dueño del número de WhatsApp y de qué puede exponernos la plataforma de Clez. Son dos caminos, y solo necesitamos saber cuál aplica.
Si Clez es BSP / dueño de la integración y puede exponernos un webhook o API que nos entregue el mensaje crudo (texto y media), nuestro Worker es el cerebro completo: multimodal intacto (OCR de fotos, notas de voz) y devolvemos la respuesta por su API de envío. Su CRM sigue mandando; nosotros solo agregamos IA.
Si no pueden entregarnos el payload crudo, entonces nosotros somos dueños del número (WABA propio) y corremos todo el cerebro. Clez nos entrega un canal personalizado (endpoint de entrada/salida hacia su inbox) y nosotros espejamos la conversación hacia su CRM y traemos de vuelta las respuestas de sus agentes.
Así corre hoy en producción (Servicare, sobre Kommo). Para Clez el diagrama es idéntico — solo cambia la caja de la derecha por su CRM. Todo el ciclo ocurre en menos de 8 segundos.
El truco de escala es el Durable Object: cada cliente tiene su propio objeto con memoria persistente. Miles de conversaciones = miles de objetos aislados, cada uno con su estado. Esto no cambia según el CRM.
El mensaje entra por /webhook (Meta directo, o la API de Clez). El Worker responde 200 en <2s (o reintentan) y hace fire-and-forget hacia el DO de esa conversación (idFromName(teléfono)).
El DO acumula los mensajes ~8s y procesa el lote de una: si el cliente manda 3 mensajes seguidos, el bot responde una vez coherente, no tres. Esa misma alarma está multiplexada: también dispara el «nudge» de retoma a las 23h.
Antes de contestar, lee la etapa del lead en el CRM (cacheada ~30s). Si está en Atiende humano → se calla y solo espeja. Si está en la etapa bot → procede.
Extrae datos del cliente (nombre, teléfono, producto) de texto y notas de voz. Si llega una foto, Gemini hace OCR y saca los datos. Todo queda en el estado del DO. Esto solo funciona si recibimos el payload crudo (Modo 1 o número propio).
Con el prompt del turno = persona + FAQ + datos conocidos + fotos disponibles. Voz y texto nativos, ~$0.02–0.03 por conversación.
Gemini emite marcas invisibles que el Worker parsea y limpia antes de enviar: [[GANADA]] mueve el lead a «Ganado» + crea tarea; [[HUMANO]] hace handoff; [[FOTOS]] envía imágenes del catálogo.
Envía por WhatsApp y, en paralelo, espeja entrante y saliente al CRM. El espejo es fail-open: si el CRM falla, el cliente igual recibe respuesta — el bot nunca se traba por la copia.
No importa la plataforma: nuestro cerebro solo pide una puerta para los mensajes y otra para los datos del CRM. Así lo resolvimos con Kommo — sirve de plantilla de lo que pediríamos a Clez.
Un canal de mensajería de entrada/salida. En Kommo es la Chats API «amojo»: connect → create-chat → import messages, firmando cada request con X-Signature = HMAC-SHA1(channel_secret, …). En Clez sería su API equivalente (webhook de entrada + endpoint de envío).
Por aquí entran y salen los mensajes. O nos dan el mensaje crudo (mejor), o nos dan un canal para espejar. Con un sello de firma para que confíen que somos nosotros.
Una API REST para operar la ficha. En Kommo es la REST v4 con Authorization: Bearer {token}: PATCH /leads/{id} (etapa), POST /tasks, POST /notes. En Clez sería su API de CRM propia — leer etapa (para el gating) y escribir tarea/nota.
Por aquí movemos la ficha del cliente: cambiarlo de etapa, crear tarea, dejar nota. Los datos del negocio, no los mensajes.
Así funciona la seguridad en nuestra referencia (Kommo). Es el patrón estándar que replicaríamos con la API de Clez. Firma cuando el canal es de mensajería; Bearer cuando son operaciones sobre datos.
| Puerta | Cómo se autentica | El secreto… |
|---|---|---|
| Mensajería (amojo) | Firma HMAC-SHA1 por request con el channel_secret | nunca viaja — solo viaja la firma que resulta de él |
| CRM (REST v4) | Authorization: Bearer {long-lived token} (un JWT) | viaja entero en cada request → HTTPS obligatorio |
| OAuth2 | access_token de 24h + refresh_token | rota cada 24h |
Sin comandos raros ni código: el control es la etapa del embudo en el CRM de ustedes.
El stage-gating lee la etapa real del lead. La etapa Atiende humano pone el DO en paused; el bot deja de responder pero sigue espejando entrantes. Volver a la etapa bot lo reactiva.
Para apagar el robot en un chat, el agente mueve la tarjeta a «Atiende humano». El robot se calla al instante pero sigue mostrándole todo. Cuando termina, la devuelve y el robot retoma.
| Tema | Dato |
|---|---|
| Costo por conversación | ~$0.02–0.03 USD (Gemini 3 Flash). Respuestas dentro de 24h en WhatsApp = gratis; solo se pagan templates fuera de ventana. |
| Latencia | Respuesta al cliente en <8 s, con memoria de contexto. |
| Seguridad | Cada request va firmado (HMAC-SHA1) o con Bearer. El webhook de entrada se verifica. Nada entra sin credencial. |
| Multimodal | Depende del Modo 1 (payload crudo) o de que el número sea propio. Sin acceso al mensaje crudo, no hay OCR ni voz. |
| Aislamiento | Cada cliente = instancia/deployment separado (DOs y secrets propios). Las conversaciones no se mezclan. |
| Lo que necesitamos de Clez | Definir el modo (1 o 2) y entregar: el webhook/API del mensaje, el endpoint de envío, y la API del CRM (leer etapa + escribir tarea/nota) con sus credenciales. |
fail-open: envuelto en try/catch, un fallo de copia nunca rompe el flujo de WhatsApp. Cuando el CRM vuelve, se reanuda el espejo.paused y solo escucha. El agente tiene control exclusivo hasta que devuelve la tarjeta a la etapa del bot.Quod est superius est sicut quod inferius. El bot abajo, el humano arriba — un mismo hilo, coherente.