CRM Oficina Martech
ReferênciaRelatórios

Relatório de atendimento

GET /analytics/reports/service — SLA atual, volume de mensagens por dia e por canal, e CSAT/NPS respondidos na janela.

GET/analytics/reports/serviceBeta

Escopo 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/service

Parâmetros de query

ParâmetroTipoDescrição
daysint (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

CampoDefinição
captured_at, windowInstante do cálculo (UTC) e janela: days, timezone, start e end (dia seguinte ao último).
slaEstado atual das conversas abertas. Não depende da janela.
sla.breached, warning, pausedConversas abertas com o prazo comercial estourado, em alerta e com o prazo pausado.
sla.waiting_contactConversas abertas em que a equipe respondeu e o contato ainda não.
sla.operator_actionConversas abertas em que a última mensagem do contato ainda não foi respondida pela equipe.
sla.first_response_pendingDessas, as que a equipe nunca respondeu.
sla.follow_up_pendingDessas, as que a equipe já respondeu antes e o contato escreveu de novo.
sla.actionableConversas com o prazo estourado ou em alerta (breached + warning).
sla.ai_blockedConversas abertas com pendência registrada porque a IA não conseguiu concluir o atendimento.
receivedMensagens recebidas dos contatos.
sent_humanEnviadas pela equipe. A mensagem enviada sem autor identificado conta aqui.
sent_automation, sent_campaign, sent_ai, sent_otherEnviadas por automação, por campanha, pela IA e por outra origem.
messages_by_channel[].channel_typewhatsapp ou instagram; null quando a mensagem não tem canal.
csat_responses, csat_averageRespostas de CSAT na janela e a nota média. csat_average é null sem respostas.
nps_responsesRespostas de NPS na janela.
nps_promoters, nps_passives, nps_detractorsNotas 9–10, 7–8 e 0–6.
nps_score(promotores − detratores) / respostas × 100. null sem respostas.
satisfaction_by_operatorO 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

StatusCódigoQuando
400invalid_querydays fora de 1–90 ou parâmetro desconhecido.
401missing_api_key / invalid_api_keyAPI key ausente, inválida, expirada ou revogada.
403missing_scopeA chave não tem o escopo analytics:read.
413report_too_largeO relatório passou do limite de tamanho. Reduza days.
429rate_limitedAcima 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.

On this page