Relatório de atendimento
GET /analytics/reports/service — SLA atual, volume de mensagens por dia e por canal, e CSAT/NPS respondidos na janela.
/analytics/reports/serviceBetaEscopo necessário: analytics:read
Responde como está o atendimento: a situação atual do SLA das conversas abertas, quantas mensagens entraram e saíram por dia e por canal (separadas por autor) e como os clientes avaliaram o atendimento. O relatório é agregado: não traz contatos nem texto de mensagens.
Endpoint
GET https://crm.oficinamartech.com/api/v1/analytics/reports/serviceParâmetros de query
| Parâmetro | Tipo | Descrição |
|---|---|---|
days | int (1-90) | Janela em dias. Default: 30. Termina no fim de hoje, no fuso da organização. |
Um parâmetro fora desta lista é recusado com 400.
window.start é o primeiro dia da janela e window.end é o dia seguinte ao último. Os dias de messages_by_day seguem o fuso da organização (window.timezone). A resposta usa Cache-Control: private, no-store.
Exemplo
curl -s "https://crm.oficinamartech.com/api/v1/analytics/reports/service?days=7" \
-H "Authorization: Bearer crm_live_SEU_PREFIXO_SEU_SEGREDO"Resposta 200
{
"captured_at": "2026-11-13T15:20:41.318Z",
"window": {
"days": 7,
"timezone": "America/Sao_Paulo",
"start": "2026-11-07",
"end": "2026-11-14"
},
"sla": {
"breached": 4,
"warning": 7,
"paused": 2,
"waiting_contact": 31,
"operator_action": 18,
"first_response_pending": 5,
"follow_up_pending": 9,
"actionable": 22,
"ai_blocked": 1
},
"messages_by_day": [
{
"date": "2026-11-13",
"received": 212,
"sent_human": 148,
"sent_automation": 35,
"sent_campaign": 0,
"sent_ai": 40,
"sent_other": 2
}
],
"messages_by_channel": [
{
"channel_id": "ab12ab12-58cc-4372-a567-0e02b2c3d479",
"channel_type": "whatsapp",
"channel_name": "Comercial",
"received": 1320,
"sent_human": 905,
"sent_automation": 210,
"sent_campaign": 480,
"sent_ai": 260,
"sent_other": 12
}
],
"satisfaction": {
"csat_responses": 42,
"csat_average": 4.6,
"nps_responses": 30,
"nps_promoters": 22,
"nps_passives": 5,
"nps_detractors": 3,
"nps_score": 63
},
"satisfaction_by_operator": [
{
"operator_id": "11111111-58cc-4372-a567-0e02b2c3d479",
"operator_name": "Ana Souza",
"csat_responses": 18,
"csat_average": 4.8,
"nps_responses": 12,
"nps_promoters": 10,
"nps_passives": 1,
"nps_detractors": 1,
"nps_score": 75
}
]
}Campos
| Campo | Definição |
|---|---|
captured_at, window | Instante do cálculo (UTC) e janela: days, timezone, start e end (dia seguinte ao último). |
sla | Estado atual das conversas abertas. Não depende da janela. |
sla.breached, warning, paused | Conversas abertas com o prazo comercial estourado, em alerta e com o prazo pausado. |
sla.waiting_contact | Conversas abertas em que a equipe respondeu e o contato ainda não. |
sla.operator_action | Conversas abertas em que a última mensagem do contato ainda não foi respondida pela equipe. |
sla.first_response_pending | Dessas, as que a equipe nunca respondeu. |
sla.follow_up_pending | Dessas, as que a equipe já respondeu antes e o contato escreveu de novo. |
sla.actionable | Conversas com o prazo estourado ou em alerta (breached + warning). |
sla.ai_blocked | Conversas abertas com pendência registrada porque a IA não conseguiu concluir o atendimento. |
received | Mensagens recebidas dos contatos. |
sent_human | Enviadas pela equipe. A mensagem enviada sem autor identificado conta aqui. |
sent_automation, sent_campaign, sent_ai, sent_other | Enviadas por automação, por campanha, pela IA e por outra origem. |
messages_by_channel[].channel_type | whatsapp ou instagram; null quando a mensagem não tem canal. |
csat_responses, csat_average | Respostas de CSAT na janela e a nota média. csat_average é null sem respostas. |
nps_responses | Respostas de NPS na janela. |
nps_promoters, nps_passives, nps_detractors | Notas 9–10, 7–8 e 0–6. |
nps_score | (promotores − detratores) / respostas × 100. null sem respostas. |
satisfaction_by_operator | O mesmo CSAT/NPS por quem resolveu a conversa. operator_id null agrupa as sem responsável. |
O SLA considera conversas abertas ou pendentes, sem grupos. O volume não conta conversas de grupo, reações nem mensagens apagadas. CSAT e NPS contam as respostas recebidas na janela.
Erros
| Status | Código | Quando |
|---|---|---|
400 | invalid_query | days fora de 1–90 ou parâmetro desconhecido. |
401 | missing_api_key / invalid_api_key | API key ausente, inválida, expirada ou revogada. |
403 | missing_scope | A chave não tem o escopo analytics:read. |
413 | report_too_large | O relatório passou do limite de tamanho. Reduza days. |
429 | rate_limited | Acima de 120 req/min por chave ou por organização. |
500 | — | Erro interno. |
Um nome de relatório desconhecido no caminho responde 404 not_found.
Relatório do funil
GET /analytics/reports/funnel — entradas, saídas e tempo por etapa, e envelhecimento dos negócios abertos por etapa e por responsável.
Relatório de disparos e canais
GET /analytics/reports/dispatch — campanhas iniciadas na janela, entrega das mensagens enviadas e custo em dólar por dia e por categoria.