Ligações
Lista as ligações de voz atendidas no WhatsApp da loja, abre uma com a transcrição e entrega a gravação.
Quando a ligação por WhatsApp está ligada, o telefone da loja é atendido por um atendente virtual de voz que conversa com o cliente e pode montar um pedido. Cada chamada vira um registro com duração, resultado, nota que o cliente deu ao final (de 1 a 5), transcrição e gravação. Estas três rotas só leem. Para saber por que o telefone toca e ninguém atende, veja o diagnóstico em conexão e configuração.
O outcome resume o que a chamada produziu:
outcome | Significado |
|---|---|
pedido | A ligação gerou um pedido (order_number preenchido). |
conversou | Houve conversa e uso de ferramentas, mas nenhum pedido. |
sem_interacao | A chamada terminou sem o atendente usar nenhuma ferramenta. |
| (vazio) | A chamada ainda não terminou ou não foi encerrada normalmente. |
Listar ligações
/api/v1/admin/whatsapp-confluence/callsAdminLista as ligações atendidas, as mais recentes primeiro
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador da loja. Veja Tokens.Parâmetros de consulta
limitintegerpadrão: 50phonestring987654321 acha 5511987654321. Vazio não filtra.Exemplo de requisição
curl "$BASE_URL/api/v1/admin/whatsapp-confluence/calls?limit=20" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"calls": [
{
"call_id": "wacid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA",
"phone": "5511987654321",
"started_at": "2026-10-10T14:32:10Z",
"duration_seconds": 184,
"tools_used": 5,
"order_number": "SD-004218",
"outcome": "pedido",
"rating": 5,
"has_audio": true,
"has_transcript": true
}
]
}Campos da resposta
callsarrayDa mais recente para a mais antiga. Lista vazia se não há ligações. A lista não traz o texto da transcrição, só has_transcript; abra a ligação para ler.
call_idstringphonestringstarted_atstring2026-10-10T14:32:10Z).duration_secondsintegertools_usedintegerorder_numberstringoutcomestringpedidoconversousem_interacaopedido, conversou, sem_interacao, ou vazio enquanto a chamada não foi encerrada.ratingintegerhas_audiobooleantrue se há gravação do lado do cliente.has_transcriptbooleantrue se há transcrição.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"} |
| 500 | Banco indisponível para a loja. | {"error":"db_unavailable"} |
Consultar ligação
/api/v1/admin/whatsapp-confluence/calls/{callID}AdminRetorna uma ligação com a transcrição
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador da loja. Veja Tokens.Parâmetros de caminho
callIDstringobrigatóriocall_id de Listar ligações). Texto, não UUID.Exemplo de requisição
curl "$BASE_URL/api/v1/admin/whatsapp-confluence/calls/wacid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"call_id": "wacid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA",
"phone": "5511987654321",
"started_at": "2026-10-10T14:32:10Z",
"duration_seconds": 184,
"tools_used": 5,
"order_number": "SD-004218",
"outcome": "pedido",
"rating": 5,
"has_audio": true,
"has_transcript": true,
"transcript": "Atendente: Olá, em que posso ajudar?\nCliente: Quero fazer um pedido de 3 caixas..."
}Campos da resposta
call_idstringphonestringstarted_atstring2026-10-10T14:32:10Z).duration_secondsintegertools_usedintegerorder_numberstringoutcomestringpedidoconversousem_interacaopedido, conversou, sem_interacao, ou vazio enquanto a chamada não foi encerrada.ratingintegerhas_audiobooleantrue se há gravação do lado do cliente.has_transcriptbooleantrue se há transcrição.transcriptstringErros
| 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"} |
| 404 | Ligação inexistente. | {"error":"call_not_found"} |
| 500 | Falha ao ler o registro. | {"error":"read_failed"} |
Gravação da ligação
Entrega o arquivo de áudio de um dos lados da conversa. O caminho do arquivo vem sempre do registro da loja e é conferido contra a pasta da própria loja antes da leitura; nada que você envie escolhe o arquivo. A resposta aceita pedidos parciais (Range), então um player consegue avançar na gravação.
/api/v1/admin/whatsapp-confluence/calls/{callID}/audioAdminEntrega a gravação de uma ligação
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador da loja. Veja Tokens.Parâmetros de caminho
callIDstringobrigatóriocall_id de Listar ligações). Texto, não UUID.Parâmetros de consulta
sidestringclientecliente é a voz do cliente. Qualquer outro valor, ou omitido, é a voz do atendente virtual.Exemplo de requisição
curl -o ligacao-cliente.ogg "$BASE_URL/api/v1/admin/whatsapp-confluence/calls/wacid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA/audio?side=cliente" \
-H "Authorization: Bearer $TOKEN"Resposta
HTTP/1.1 200 OK
Content-Type: audio/ogg
Cache-Control: private, max-age=300
<bytes do áudio>Campos da resposta
corpobinaryaudio/ogg. Pode ser cacheado de forma privada por 5 minutos.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"} |
| 404 | A ligação não existe, não tem gravação desse lado, ou o arquivo não está mais disponível. O corpo é texto simples em português, não JSON. | sem gravação |
| 403 | O caminho gravado fica fora da pasta da loja (texto simples). | caminho inválido |
| 500 | Banco indisponível para a loja (texto simples). | db unavailable |