Mensagens e CSV
Pagina as mensagens de uma conversa do WhatsApp e exporta as mais recentes em um arquivo CSV.
Depois de escolher uma conversa em Conversas, estas rotas devolvem o que foi dito nela: uma página de mensagens em JSON, com um resumo da conversa para montar o cabeçalho da tela, ou um arquivo CSV para guardar ou auditar.
Mensagens da conversa
As mensagens vêm da mais nova para a mais antiga. Para paginar para trás, passe o next_before da resposta anterior como before.
/api/v1/admin/whatsapp-confluence/threads/{id}/messagesAdminPagina as mensagens de uma conversa
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador da loja. Veja Tokens.Parâmetros de caminho
iduuidobrigatórioId da conversa (
id de Listar conversas). Um UUID válido que não existe também responde, veja os erros de cada rota.Parâmetros de consulta
beforeintegerDevolve só mensagens com
id menor que este valor. Omitido, 0 ou não numérico devolve as mais recentes.limitintegerpadrão: 50Mensagens por página, de 1 a 200. Fora disso vale 50.
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/whatsapp-confluence/threads/7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60/messages?limit=20" \
-H "Authorization: Bearer $TOKEN"Resposta
200Mensagens
json
{
"messages": [
{
"id": 28,
"thread_id": "7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60",
"wamid": "wamid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA",
"direction": "O",
"origin": "A",
"msg_type": "text",
"body": "Olá, Maria! Seu pedido sai amanhã.",
"status": "S",
"meta_timestamp": "2026-10-10T14:35:00Z",
"created_at": "2026-10-10T14:35:00Z"
}
],
"next_before": 28,
"thread": {
"id": "7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60",
"account_id": "3b9d8c52-1f0a-4e7b-8a21-6d5c4b3a2f10",
"customer_phone": "5511987654321",
"contact_name": "Maria Souza",
"assignee_user_id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"assignee_name": "Ana Lima",
"unread_count": 2,
"last_message_at": "2026-10-10T14:32:10Z",
"last_message_preview": "Quero 3 caixas, pode entregar amanhã?",
"last_message_origin": "C",
"csw_expires_at": "2026-10-11T14:32:10Z",
"status": "A",
"bot_mode": "H",
"bot_mode_updated_at": "2026-10-10T14:20:00Z",
"created_at": "2026-09-28T21:56:44Z",
"updated_at": "2026-10-10T14:32:10Z"
}
}Campos da resposta
messagesarrayMensagens da página, da mais nova para a mais antiga. Cada item tem os campos abaixo.
next_beforeintegerid da mensagem mais antiga da página: o before da próxima chamada. Vale 0 se a página veio vazia.threadobjectResumo da conversa (bot, responsável, janelas), no formato de Conversas. Omitido se a conversa não existe. Quando a conversa voltou sozinha para o assistente por falta de resposta, traz também
handoff_timeout (reason e at).Campos de cada mensagem:
idintegerId numérico da mensagem. Cresce com o tempo; serve de cursor e de
messageID em Mídia da mensagem.thread_iduuidConversa.
wamidstringId da mensagem na Meta. Omitido se ainda não houve envio.
directionstringIOI recebida do cliente, O enviada pela loja.originstringCABEHC cliente, A API ou atendente, B assistente, E eco do aplicativo WhatsApp Business, H histórico.msg_typestringTipo:
text, image, audio, voice, video, document, sticker, interactive, template, order e outros que a Meta enviar.bodystringTexto da mensagem, ou a descrição quando não é texto.
media_idstringId da mídia na Meta. Omitido sem mídia.
media_mimestringTipo MIME da mídia. Omitido sem mídia.
media_captionstringLegenda da mídia. Omitido quando não há.
filenamestringNome do arquivo, para documentos.
media_urlstringLink assinado e temporário (12 horas) para exibir a mídia sem cabeçalho
Authorization. Presente em mensagens de imagem, áudio, voz, vídeo, documento e figurinha.transcriptionstringTexto transcrito de um áudio, quando existe.
interactiveobjectConteúdo de botões, listas e links enviados ou recebidos, no formato que a Meta define.
order_payloadobjectCarrinho enviado pelo cliente pelo catálogo do WhatsApp.
statusstringQSDRFEntrega:
Q na fila, S enviada, D entregue, R lida, F falhou.errorstringMotivo da falha quando
status é F.meta_timestampstringHorário na Meta (RFC 3339).
created_atstringQuando a plataforma gravou (RFC 3339).
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um administrador. | {"error":"insufficient permissions"} |
| 400 | Um segmento do caminho é 0 ou um inteiro negativo. | {"error":"invalid id parameter"} |
| 404 | id que não é um UUID. | {"error":"thread not found"} |
| 500 | Falha interna ao ler ou gravar. | {"error":"..."} |
Exportar em CSV
Gera um arquivo CSV com as mensagens em ordem cronológica (da mais antiga para a mais nova). Cobre no máximo as 200 mensagens mais recentes: conversas mais longas saem cortadas no começo.
/api/v1/admin/whatsapp-confluence/threads/{id}/export.csvAdminBaixa as mensagens da conversa em CSV
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador da loja. Veja Tokens.Parâmetros de caminho
iduuidobrigatórioId da conversa (
id de Listar conversas). Um UUID válido que não existe também responde, veja os erros de cada rota.Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/whatsapp-confluence/threads/7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60/export.csv" \
-H "Authorization: Bearer $TOKEN"Resposta
200Arquivo CSV
csv
id,created_at,origin,direction,msg_type,status,body
27,2026-10-10T14:30:00Z,C,I,text,S,"Quero 3 caixas, pode entregar amanhã?"
28,2026-10-10T14:35:00Z,A,O,text,S,"Olá, Maria! Seu pedido sai amanhã."Campos da resposta
Content-Typeheadertext/csv; charset=utf-8. O arquivo sai como anexo wa-thread-{id}.csv.colunascsvid, created_at (UTC, RFC 3339), origin, direction, msg_type, status, body. Aspas no texto são dobradas e quebras de linha viram espaço. Mídia não vai no arquivo, só o texto ou a legenda.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O token não é de um administrador. | {"error":"insufficient permissions"} |
| 400 | Um segmento do caminho é 0 ou um inteiro negativo. | {"error":"invalid id parameter"} |
| 500 | id que não é um UUID (a mensagem de erro é um texto técnico, sem tratamento). | {"error":"..."} |