Cuándo usarlo
-
Cuando envías una campaña de WhatsApp con una plantilla que tiene botones de respuesta rápida (Quick Reply) y quieres saber, por campaña, quién tocó cuál botón y cuándo.
-
Para armar métricas de campaña y de botones (tasa de respuesta, cuál opción fue la más elegida) desde tu backend, sin necesidad de abrir conversación por conversación en la interfaz.
-
Es un endpoint servidor a servidor, solo de lectura. No hay interfaz para esto en Cloud Chat — los datos salen por la API.
Requisitos previos
-
Un Token de Acceso API de administrador o supervisor de Cloud Chat. Para obtener el tuyo: haz clic en tu avatar (esquina inferior izquierda) → Configuraciones de Perfil y baja hasta la sección "Token de acceso" — el campo viene enmascarado; usa los botones al lado para revelarlo o copiarlo. Con un token de agente el endpoint devuelve
401/403. Los usuarios con acceso solo a ClaudIA no ven esa sección.
-
El
account_idde tu cuenta — es el número justo después de/accounts/en la URL de Cloud Chat. Ejemplo: enhttps://cloudchat.cloudhumans.com/app/accounts/1/dashboard, elaccount_ides1. -
Una campaña de WhatsApp ya enviada, cuya plantilla tenga botones de Quick Reply.
-
El
display_idde la campaña — mira la sección de abajo, "Cómo encontrar el ID de la campaña".
Cómo encontrar el ID de la campaña (display_id)
La interfaz de Cloud Chat no muestra el ID de la campaña (no aparece en el listado ni en la URL). Para encontrarlo, usa el endpoint de listado de campañas con el mismo token:
curl -s 'https://cloudchat.cloudhumans.com/api/v1/accounts/{ACCOUNT_ID}/campaigns?query=TITULO_DE_LA_CAMPANA&campaign_type=one_off' \
-H 'api_access_token: TU_API_ACCESS_TOKEN'
-
querybusca por el título de la campaña (el mismo que aparece en el listado de la interfaz) ycampaign_type=one_offrestringe a las campañas únicas — juntos, normalmente devuelven directo la campaña deseada. -
Para listar todas las campañas (extracción masiva), llámalo sin
query, paginando:
curl -s 'https://cloudchat.cloudhumans.com/api/v1/accounts/{ACCOUNT_ID}/campaigns?page=1&per_page=100' \
-H 'api_access_token: TU_API_ACCESS_TOKEN'
-
La respuesta viene paginada en el formato
{ "data": [...], "meta": {...} }— default 20 por página,per_pagemáximo100; iterapagede1hastameta.total_pages. -
El campo
idde cada campaña devuelta ya es eldisplay_idque usas en el endpoint de respuestas — no lo confundas con ningún id interno.
{ "id": 22081, "title": "Mi campaña", "campaign_status": "completed", "campaign_type": "one_off" }
Cómo funciona
Autenticación
api_access_token: TU_API_ACCESS_TOKEN
Ruta
GET https://cloudchat.cloudhumans.com/api/v1/accounts/{ACCOUNT_ID}/campaigns/{DISPLAY_ID}/responses
-
{ACCOUNT_ID}— id de la cuenta. -
{DISPLAY_ID}— display_id de la campaña.
Parámetros de query (opcionales)
-
page— página (default1). -
per_page— ítems por página (default100, máximo500).
Ejemplo de llamada
curl -s 'https://cloudchat.cloudhumans.com/api/v1/accounts/7/campaigns/156/responses?page=1&per_page=100' \
-H 'api_access_token: TU_API_ACCESS_TOKEN'
Tip: este curl se puede importar directo en Postman (File → Import → Raw text) — solo cambia el token y los ids.
Respuesta
La respuesta tiene tres partes: responses, summary y meta.
{
"responses": [
{
"id": 27749371,
"content": "Sim, tenho interesse e desejo prosseguir",
"inbox_id": 174,
"conversation_id": 1777,
"message_type": 0,
"status": "delivered",
"additional_attributes": {
"campaign_id": 188,
"template_button_reply": true,
"template_button_payload": "Sim, tenho interesse e desejo prosseguir"
},
"created_at": 1784781019,
"sender": {
"id": 1350835,
"type": "contact",
"name": "João da Silva",
"phone_number": "+5511999998888"
}
}
],
"summary": {
"Sim, tenho interesse e desejo prosseguir": 1
},
"meta": {
"current_page": 1,
"total_count": 1,
"total_pages": 1
}
}
-
responses— cada ítem es el mensaje de respuesta del contacto (el toque en el botón). Campos útiles:-
content— el texto del botón tocado. -
sender— el contacto que respondió (nombre + teléfono). -
additional_attributes.template_button_payload— el payload del botón (repite el texto del botón). -
conversation_id/created_at— dónde y cuándo ocurrió la respuesta (created_ates un timestamp Unix, en segundos).
-
-
summary— conteo agregado por texto del botón:{ "<texto del botón>": <cantidad> }. Es el atajo para la métrica "cuántas personas eligieron cada opción". Elsummarysiempre considera la campaña entera, sin importar la página. -
meta— paginación:current_page,total_count(total de respuestas de la campaña),total_pages. Atención:total_pagesdepende delper_pageusado. Para exportar todas las respuestas, usaper_page=500e iterapagede1hastatotal_pages.
Errores comunes
-
401 Unauthorized— token inválido, expirado/regenerado, o el headerapi_access_tokenno fue enviado. -
401/403— el token es de un usuario agente (el endpoint exige administrador o supervisor en la cuenta). -
404 Not Found— campaña no encontrada: o el número usado no es eldisplay_id(mira "Cómo encontrar el ID de la campaña"), o la campaña pertenece a otra cuenta distinta del{ACCOUNT_ID}de la URL. -
responsesvacío con la campaña correcta — la plantilla no tenía botones Quick Reply, nadie tocó un botón todavía, o la campaña fue enviada antes del lanzamiento del recurso (sin datos retroactivos).
Notas importantes
-
Sin historial retroactivo. Solo aparecen respuestas registradas a partir del lanzamiento del recurso. Las campañas antiguas no se completan retroactivamente.
-
El identificador de análisis es el texto del botón. Como las plantillas no definen un payload propio, el payload solo repite el texto del botón. Agrupa/analiza por el texto (es lo que hace el
summary). -
Los conteos son por toque, no por contacto único. Si el mismo contacto toca más de un botón (o el mismo botón más de una vez), cada toque se vuelve una respuesta y entra en el
summary. Para métricas por contacto único, deduplica porsender.idde tu lado. -
Solo cuentan los toques de botón Quick Reply de campaña. Si el contacto responde con texto libre (en vez de tocar un botón), esa respuesta no entra aquí — el vínculo con la campaña solo existe cuando es un toque de botón de un envío de campaña.