La documentación más actualizada de las APIs de Cloud Humans está en docs.cloudhumans.com/api-reference. Si este artículo y la referencia no coinciden, vale lo que dice la referencia.
Cuándo usar
- Quieres iniciar una conversación de WhatsApp por API desde un sistema externo
- Necesitas disparar plantillas aprobadas por Meta con variables dinámicas
- Necesitas entender el comportamiento esperado del ticket creado por esta API
Requisitos previos
-
WhatsApp ya conectado a Cloud Chat con un
inbox_idválido — ver Guía Maestra — Cómo conectar tu número de WhatsApp a Cloud Chat -
Plantilla aprobada por Meta registrada en Cloud Chat — ver Cómo crear, editar y eliminar plantillas de WhatsApp en Cloud Chat
-
API Key a la mano — ver Cómo encontrar tu API Key en Cloud Chat
-
Número de teléfono del destinatario en formato E.164 (ej.:
+5511999998888)
Sobre este artículo
Este endpoint crea una conversación proactiva por WhatsApp usando una plantilla previamente configurada. Los parámetros de la plantilla son dinámicos y varían según la configuración de la plantilla.
Comportamiento de creación del ticket
Como el sistema no sabe qué agente debe recibirlo, el mensaje no nace asignado. Por eso el globo aparece verde (mensajes automáticos), en lugar de naranja.
-
Genera un nuevo ticket — excepto si la bandeja está configurada con conversación única (lock to single conversation), en cuyo caso el mensaje se agrega a la conversación existente del contacto
-
El ticket nace con estado abierto
Si el cliente tiene dos tickets abiertos, los nuevos mensajes enviados por el cliente siempre se dirigirán al ticket más reciente.
Endpoint
POST https://cloudchat.cloudhumans.com/api/v1/accounts/{account_id}/conversations/create_proactive_whatsapp_conversation
Headers
| Header | Valor |
|---|---|
content-type |
application/json |
api_access_token |
Clave de acceso de la API |
Parámetros del body
| Parámetro | Obligatorio | Descripción |
|---|---|---|
inbox_id |
Sí | ID de la bandeja por la que se enviará el mensaje |
phone_number |
Sí | Número del destinatario en formato E.164 |
template_name |
Sí | Nombre exacto de la plantilla aprobada |
labels |
No | Array de strings con etiquetas a aplicar a la conversación creada — ver la sección Aplicando etiquetas (labels) abajo |
header_attachment |
No | URL del adjunto, si la plantilla admite multimedia en el encabezado |
button_param_# |
No | Variables de botones — reemplaza # por el índice (0 a N) |
| Variables de la plantilla | Sí, si la plantilla tiene variables | Un campo para cada variable, con su nombre exacto, en la raíz del JSON (ver abajo) |
Sobre las variables dinámicas
Cada variable de la plantilla se convierte en un campo en la raíz del JSON, junto a inbox_id, phone_number y template_name, con el nombre exacto de la variable:
-
Plantilla con variables con nombre, como
Hola {{cliente}}, tu factura de {{monto}} vence mañana: envía los campos"cliente"y"monto". -
Plantilla con variables numeradas, como
Hola {{1}}, tu factura de {{2}} vence mañana: envía los campos"1"y"2".
Si falta alguna variable, la API rechaza la solicitud con el error missing params. Los campos que no corresponden a ninguna variable se ignoran. Los nombres de variable con punto o tilde (como {{contact.name}} o {{horário}}) no son aceptados por Meta como variable.
Ejemplo de solicitud
curl --location 'https://cloudchat.cloudhumans.com/api/v1/accounts/ACCOUNT_ID/conversations/create_proactive_whatsapp_conversation' \
--header 'content-type: application/json' \
--header 'api_access_token: ACCESS_TOKEN' \
--data '{
"inbox_id": "INBOX_ID",
"phone_number": "+5511999998888",
"template_name": "recordatorio_pago",
"labels": ["campana-x", "vip"],
"header_attachment": "ATTACHMENT_URL",
"button_param_0": "BUTTON PARAMETER",
"button_param_1": "ANOTHER BUTTON PARAMETER",
"cliente": "Juan",
"monto": "$120.00"
}'
Dónde encontrar los parámetros
-
account_id— en el panel administrativo de la cuenta -
inbox_id— ID de la bandeja de entrada configurada (https://cloudchat.cloudhumans.com/app/accounts/{account_id}/settings/inboxes/{inbox_id}) -
api_access_token— genéralo en el panel de configuración de API

- Variables dinámicas — consulta la configuración de la plantilla en el panel administrativo. Estos parámetros van en la raíz del payload.
Asegúrate de que el número de teléfono esté en formato E.164, con el código de país.
Aplicando etiquetas (labels) a la conversación creada
El parámetro opcional labels recibe un array de strings con los títulos de las etiquetas a aplicar a la conversación creada por el disparo — sin necesidad de una segunda llamada a la API de labels.
"labels": ["campana-x", "vip"]
Comportamiento:
-
Los títulos se normalizan: se eliminan los espacios en los extremos, se convierten a minúsculas y se deduplican.
-
Las etiquetas se agregan a la conversación (nunca reemplazan etiquetas existentes) — en bandejas con conversación única, las etiquetas de disparos anteriores y las aplicadas por agentes se preservan.
-
Si la etiqueta todavía no existe en la cuenta, se crea automáticamente (y comienza a aparecer en los filtros del panel) — siempre que el token utilizado sea de un administrador o CX Engineer. Con token de agente (no admin), solo se aplican etiquetas ya existentes en la cuenta; los títulos nuevos se ignoran silenciosamente.
-
Omitir el parámetro (o enviar un array vacío) mantiene el comportamiento anterior — no se aplica ninguna etiqueta.
Límite de solicitudes (rate limit)
Este endpoint acepta como máximo 200 solicitudes por minuto.
Por encima de ese límite, la API responde HTTP 429 y la solicitud no se procesa (el mensaje no se envía). La respuesta incluye los siguientes headers:
| Header | Descripción |
|---|---|
Retry-After |
Segundos hasta que la ventana permita nuevas solicitudes |
X-RateLimit-Limit |
Límite de solicitudes de la ventana (200) |
X-RateLimit-Remaining |
Solicitudes restantes en la ventana actual |
Ejemplo de respuesta al exceder el límite:
{
"error": "Rate limit exceeded. Retry later.",
"retry_after": 42
}
Si tu integración dispara mensajes en lote, maneja la respuesta 429 reenviando la solicitud después del tiempo indicado en Retry-After. Sin este manejo, los envíos que excedan el límite se perderán.
Observaciones
-
Para integrar este endpoint con workflows de HubSpot: Cómo enviar un mensaje proactivo por WhatsApp vía HubSpot
-
Para entender qué APIs están disponibles en Cloud Chat: Guía Maestra — Cómo acceder y operar datos de Cloud Chat vía API
-
Para evitar bloqueos y cuidar la reputación del número: Cómo evitar bloqueos y baneos en WhatsApp