A documentação mais atualizada das APIs da Cloud Humans fica em docs.cloudhumans.com/api-reference. Em caso de divergência entre este artigo e a referência, vale o que está lá.
Quando usar
-
Quando você dispara uma campanha de WhatsApp com um template que tem botões de resposta rápida (Quick Reply) e quer saber, por campanha, quem tocou em qual botão e quando.
-
Para montar métricas de campanha e de botões (taxa de resposta, qual opção foi mais escolhida) a partir do seu backend, sem precisar abrir conversa a conversa na interface.
-
É um endpoint servidor-para-servidor, somente leitura. Não há interface para isso no Cloud Chat — os dados saem pela API.
Pré-requisitos
-
Um Token de Acesso API de administrador ou supervisor do Cloud Chat. Para pegar o seu: clique no seu avatar (canto inferior esquerdo) → Configurações de Perfil e role até a seção "Token de acesso" — o campo vem mascarado, use os botões ao lado para revelar ou copiar. Com token de agente o endpoint retorna
401/403. Usuários com acesso somente à ClaudIA não veem essa seção.
-
O
account_idda sua conta — é o número logo após/accounts/na URL do Cloud Chat. Exemplo: emhttps://cloudchat.cloudhumans.com/app/accounts/1/dashboard, oaccount_idé1. -
Uma campanha de WhatsApp já disparada, cujo template tenha botões de Quick Reply.
-
O
display_idda campanha — veja a seção abaixo "Como descobrir o ID da campanha".
Como descobrir o ID da campanha (display_id)
A interface do Cloud Chat não exibe o ID da campanha (ele não aparece na listagem nem na URL). Para descobrir, use o endpoint de listagem de campanhas com o mesmo token:
curl -s 'https://cloudchat.cloudhumans.com/api/v1/accounts/{ACCOUNT_ID}/campaigns?query=TITULO_DA_CAMPANHA&campaign_type=one_off' \
-H 'api_access_token: SEU_API_ACCESS_TOKEN'
-
querybusca pelo título da campanha (o mesmo que aparece na listagem da interface) ecampaign_type=one_offrestringe às campanhas únicas — juntos, normalmente devolvem direto a campanha desejada. -
Para listar todas as campanhas (extração em massa), chame sem
query, paginando:
curl -s 'https://cloudchat.cloudhumans.com/api/v1/accounts/{ACCOUNT_ID}/campaigns?page=1&per_page=100' \
-H 'api_access_token: SEU_API_ACCESS_TOKEN'
-
A resposta vem paginada no formato
{ "data": [...], "meta": {...} }— default 20 por página,per_pagemáximo100; iterepagede1atémeta.total_pages. -
O campo
idde cada campanha retornada já é odisplay_idque você usa no endpoint de respostas — não confunda com nenhum id interno.
{ "id": 22081, "title": "Minha campanha", "campaign_status": "completed", "campaign_type": "one_off" }
Como funciona
Autenticação
api_access_token: SEU_API_ACCESS_TOKEN
Rota
GET https://cloudchat.cloudhumans.com/api/v1/accounts/{ACCOUNT_ID}/campaigns/{DISPLAY_ID}/responses
-
{ACCOUNT_ID}— id da conta. -
{DISPLAY_ID}— display_id da campanha.
Parâmetros de query (opcionais)
-
page— página (default1). -
per_page— itens por página (default100, máximo500).
Exemplo de chamada
curl -s 'https://cloudchat.cloudhumans.com/api/v1/accounts/7/campaigns/156/responses?page=1&per_page=100' \
-H 'api_access_token: SEU_API_ACCESS_TOKEN'
Dica: esse curl pode ser importado direto no Postman (File → Import → Raw text) — basta trocar o token e os ids.
Resposta
A resposta tem três partes: responses, summary e 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 item é a mensagem de resposta do contato (o toque no botão). Campos úteis:-
content— o texto do botão tocado. -
sender— o contato que respondeu (nome + telefone). -
additional_attributes.template_button_payload— o payload do botão (ecoa o texto do botão). -
conversation_id/created_at— onde e quando a resposta aconteceu (created_até um timestamp Unix, em segundos).
-
-
summary— contagem agregada por texto do botão:{ "<texto do botão>": <quantidade> }. É o atalho para a métrica "quantas pessoas escolheram cada opção". Osummarysempre considera a campanha inteira, independente da página. -
meta— paginação:current_page,total_count(total de respostas da campanha),total_pages. Atenção:total_pagesdepende doper_pageusado. Para exportar todas as respostas, useper_page=500e iterepagede1atétotal_pages.
Erros comuns
-
401 Unauthorized— token inválido, expirado/regenerado, ou o headerapi_access_tokennão foi enviado. -
401/403— o token é de um usuário agente (o endpoint exige administrador ou supervisor na conta). -
404 Not Found— campanha não encontrada: ou o número usado não é odisplay_id(veja "Como descobrir o ID da campanha"), ou a campanha pertence a outra conta que não a do{ACCOUNT_ID}da URL. -
responsesvazio com a campanha certa — o template não tinha botões Quick Reply, ninguém tocou em botão ainda, ou a campanha foi disparada antes do lançamento do recurso (sem dados retroativos).
Notas importantes
-
Sem histórico retroativo. Só aparecem respostas registradas a partir do lançamento do recurso. Campanhas antigas não são preenchidas retroativamente.
-
O identificador de análise é o texto do botão. Como os templates não definem um payload próprio, o payload apenas repete o texto do botão. Agrupe/analise pelo texto (é o que o
summaryfaz). -
As contagens são por toque, não por contato único. Se o mesmo contato tocar em mais de um botão (ou no mesmo botão mais de uma vez), cada toque vira uma resposta e entra no
summary. Para métricas por contato único, deduplique porsender.idno seu lado. -
Só contam toques de botão Quick Reply de campanha. Se o contato responder com texto livre (em vez de tocar num botão), essa resposta não entra aqui — o vínculo com a campanha só existe quando é um toque de botão de um envio de campanha.