Indicadores
Referência da rota relatorios/resumo: volumes de conversas e mensagens, tempos médios contados em horário de atendimento, satisfação e números por departamento e por atendente, num período livre de até um ano. Cada indicador é explicado com a regra exata de cálculo.
Visão geral
A rota de indicadores entrega, numa única chamada, o retrato do atendimento de um período: quantos atendimentos abriram e encerraram, quanto a IA resolveu sozinha, quanto o cliente esperou pela primeira resposta e pela fila, quanto durou cada atendimento e como o cliente avaliou. Os tempos seguem as mesmas regras da tela de Relatórios: contam só o horário de atendimento e descontam a espera de retorno do cliente.
Casos típicos:
- BI e painéis de gestão: alimentar Power BI, Metabase, Grafana ou uma planilha com a série diária, semanal ou mensal.
- Fechamento do mês: exportar os números por departamento e por atendente para o relatório da diretoria ou para a remuneração variável.
- Acompanhamento de meta: conferir todo dia se a primeira resposta média está dentro do combinado.
| Rota | Método | Permissão da chave |
|---|---|---|
relatorios/resumo | GET (ou POST) | Indicadores |
A permissão Indicadores ("Volumes, tempos em horário útil, satisfação e números por departamento e atendente") é marcada na chave, em Integrações, card API do ChatISP. Ela dá acesso apenas a números agregados: nomes de atendentes e departamentos aparecem, mas nenhuma mensagem nem dado de cliente.
A chamada
/api_publica.php?r=relatorios/resumo| Parâmetro | Tipo | Descrição |
|---|---|---|
de | data | Começo do período. Padrão: 00:00 de 29 dias atrás (com o padrão de ate, os últimos 30 dias contando hoje). |
ate | data | Fim do período. Padrão: hoje, 23:59:59. Data sem hora vale até 23:59:59 do dia. |
departamento_id | inteiro | Restringe todos os números a um departamento (veja Filtro por departamento). Sem ele, ou com 0, a casa inteira. |
O período máximo é de 366 dias. Datas aceitam ISO 8601 (2026-09-01T00:00:00-03:00), AAAA-MM-DD ou AAAA-MM-DD HH:MM:SS no fuso do servidor.
curl -s -G "https://atendimento.seuprovedor.com.br/api_publica.php" \ -H "Authorization: Bearer $CHATISP_CHAVE" \ --data-urlencode "r=relatorios/resumo" \ --data-urlencode "de=2026-09-01" \ --data-urlencode "ate=2026-09-30"
<?php
$url = 'https://atendimento.seuprovedor.com.br/api_publica.php?' . http_build_query([
'r' => 'relatorios/resumo',
'de' => '2026-09-01',
'ate' => '2026-09-30',
]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CHATISP_CHAVE')],
]);
$resposta = json_decode(curl_exec($ch), true);import os, requests
resposta = requests.get(
"https://atendimento.seuprovedor.com.br/api_publica.php",
params={"r": "relatorios/resumo", "de": "2026-09-01", "ate": "2026-09-30"},
headers={"Authorization": "Bearer " + os.environ["CHATISP_CHAVE"]},
timeout=30,
).json(){
"ok": true,
"periodo": {"de": "2026-09-01T00:00:00-03:00", "ate": "2026-09-30T23:59:59-03:00"},
"departamento_id": null,
"conversas": {
"abertas": 2184,
"encerradas": 2161,
"em_andamento_agora": 37,
"resolvidas_pela_ia": 912
},
"mensagens": {
"recebidas": 25390,
"enviadas": 27713,
"pela_ia": 11240,
"pelos_atendentes": 12988
},
"tempos": {
"primeira_resposta_media_seg": 41.7,
"espera_fila_media_seg": 318.2,
"duracao_media_seg": 1146.9
},
"satisfacao": {
"pesquisas_enviadas": 1240,
"respostas": 433,
"media": 4.62
},
"por_departamento": [
{"departamento_id": 3, "departamento": "Suporte técnico", "abertas": 1402, "encerradas": 1381},
{"departamento_id": 2, "departamento": "Financeiro", "abertas": 611, "encerradas": 609},
{"departamento_id": 1, "departamento": "Comercial", "abertas": 171, "encerradas": 168}
],
"por_atendente": [
{
"atendente_id": 7,
"atendente": "Carlos Lima",
"atendidas": 402,
"encerradas": 398,
"duracao_media_seg": 1310.4,
"satisfacao_media": 4.71,
"avaliacoes": 151
},
{
"atendente_id": 4,
"atendente": "Paula Andrade",
"atendidas": 377,
"encerradas": 377,
"duracao_media_seg": 1022.0,
"satisfacao_media": 4.55,
"avaliacoes": 138
}
]
}Tempos vêm em segundos, com uma casa decimal. Quando não há nenhuma amostra no período (nenhuma conversa respondida, nenhuma encerrada), o tempo vem null, não zero: trate null como "sem dado" no seu painel.
Bloco conversas
| Campo | Como é contado |
|---|---|
abertas | Atendimentos (protocolos) abertos dentro do período, em qualquer estado hoje. Inclui as conversas de aviso que nascem encerradas (envio pela API ou campanha para quem não tinha conversa aberta). |
encerradas | Atendimentos encerrados dentro do período, não importa quando abriram (inclusive as conversas de aviso). |
em_andamento_agora | Atendimentos não encerrados no momento da chamada (com a IA, em fluxo, na fila ou com um atendente). Não depende do período: é a fotografia de agora. |
resolvidas_pela_ia | Encerradas no período que terminaram sem atendente e tiveram pelo menos uma mensagem da IA. É o volume que a IA resolveu sem ninguém da equipe assumir. |
Para a taxa de resolução pela IA, divida resolvidas_pela_ia por encerradas.
Bloco mensagens
Mensagens criadas dentro do período. Notas internas da equipe não entram em nenhum número.
| Campo | Como é contado |
|---|---|
recebidas | Mensagens que os clientes mandaram. |
enviadas | Tudo o que saiu do provedor: IA, atendentes, fluxos, mensagens automáticas, campanhas e envios pela API. |
pela_ia | Enviadas pela IA. |
pelos_atendentes | Enviadas por pessoas da equipe. |
A diferença entre enviadas e a soma de pela_ia com pelos_atendentes é o volume automático (fluxos, avisos, campanhas, integrações).
Bloco tempos
Horário útil
Os três tempos contam só o que cai dentro do horário de atendimento: vale a grade de horário do departamento da conversa quando ele tem uma; senão, a grade geral. Madrugada, almoço fechado e fim de semana não entram. Sem nenhuma grade cadastrada, o relógio corre 24 horas. Exemplo: com expediente das 08:00 às 18:00, um cliente que chama às 19:50 e é atendido às 08:05 do dia seguinte conta 5 minutos de espera, não 12 horas. A regra completa está em Tempos contados só no horário de atendimento.
| Campo | Do quê até o quê | Quais atendimentos entram |
|---|---|---|
primeira_resposta_media_seg | Da primeira mensagem do cliente até a primeira resposta da casa, seja da IA ou de um atendente. | Abertos no período, com mensagem do cliente e resposta dentro do período. Atendimento sem resposta não entra. Mensagens automáticas de fluxo e avisos não contam como resposta. |
espera_fila_media_seg | Da abertura do atendimento até a primeira vez que uma pessoa assumiu a conversa ou a distribuição automática a entregou a alguém. | Abertos no período que chegaram a ser assumidos ou distribuídos dentro do período. Conversa resolvida só pela IA não entra. |
duracao_media_seg | Da abertura até o encerramento, descontados os períodos em que a conversa ficou marcada como aguardando retorno do cliente. | Encerrados no período. |
Espera de retorno descontada
Quando o atendente marca a conversa como aguardando retorno do cliente (por exemplo, "reinicie o roteador e me avise"), o tempo até o cliente voltar não pesa na duração do atendimento. Cada intervalo de espera é descontado, também só na parte que cai dentro do horário útil. Uma espera ainda aberta no encerramento é descontada até o encerramento.
Os tempos medem o atendimento, não o relógio da parede. Para conferir uma conversa específica, a exportação CSV da tela de Relatórios traz a duração útil de cada conversa encerrada, já com as mesmas regras.
Bloco satisfação
Vem da pesquisa de satisfação enviada ao fim do atendimento (quando ligada em Configurações), com nota de 1 a 5. Veja Pesquisa de satisfação.
| Campo | Como é contado |
|---|---|
pesquisas_enviadas | Pesquisas enviadas dentro do período. |
respostas | Dessas, quantas o cliente respondeu com uma nota. |
media | Média das notas dessas respostas, com duas casas decimais; null sem nenhuma resposta. |
Taxa de resposta: respostas dividido por pesquisas_enviadas.
Por departamento
por_departamento lista os departamentos que tiveram atendimentos abertos no período, do maior volume para o menor. Departamento sem nenhum atendimento no período não aparece.
| Campo | Descrição |
|---|---|
departamento_id / departamento | Identificação do departamento. |
abertas | Atendimentos abertos no período que estão hoje nesse departamento. |
encerradas | Desses mesmos atendimentos, quantos já estão encerrados. |
Aqui encerradas é diferente do bloco conversas: conta os atendimentos abertos no período que já foram encerrados (é a coorte do período), enquanto conversas.encerradas conta tudo o que encerrou no período, inclusive o que abriu antes. Por isso as somas por departamento não fecham com o total geral.
O departamento considerado é o atual da conversa: um atendimento que começou no Comercial e foi transferido para o Suporte conta no Suporte.
Por atendente
por_atendente lista as pessoas que são responsáveis por atendimentos abertos no período, de quem atendeu mais para quem atendeu menos.
| Campo | Como é contado |
|---|---|
atendente_id / atendente | Identificação da pessoa. |
atendidas | Atendimentos abertos no período em que ela é a responsável atual. |
encerradas | Desses, quantos já estão encerrados. |
duracao_media_seg | Duração média, em horário útil e com a espera de retorno descontada, dos atendimentos dela encerrados no período. null sem nenhum. |
satisfacao_media | Média das notas de pesquisa atribuídas a ela e respondidas no período; null sem nenhuma. |
avaliacoes | Quantas notas ela recebeu no período. |
O atendimento conta para quem é o responsável atual. Se a conversa foi transferida de uma pessoa para outra, ela conta só para quem ficou com ela.
Filtro por departamento
Com departamento_id, todos os números passam a considerar só aquele departamento: conversas, mensagens, tempos, a lista por departamento (que fica com uma linha só) e os volumes e durações por atendente consideram os atendimentos que estão hoje no departamento; a satisfação (geral e por atendente) usa o departamento registrado na pesquisa.
Para montar uma tabela com todos os departamentos lado a lado, chame uma vez sem filtro (o total da casa) e uma vez por departamento, com os ids de departamentos/listar. A receita Exportar indicadores mensais faz isso.
Boas práticas
- Feche períodos completos. Para a série histórica, consulte dias, semanas ou meses já encerrados e grave o resultado no seu BI. O mês corrente muda a cada atendimento.
- Prefira várias chamadas curtas a uma longa. Um ano inteiro é aceito, mas uma série mensal (12 chamadas) dá mais informação e cada chamada é mais leve.
- Não consulte em laço curto. Os números são calculados na hora; uma consulta a cada 5 ou 15 minutos é suficiente para um painel ao vivo. Respeite a cota da chave (
X-RateLimit-Remaining). - Fuso. Datas sem fuso são lidas no fuso do servidor (veja
servidor.fuso_horarioem chave/info). Ao montar o período a partir de outro fuso, mande a data em ISO 8601 com o fuso explícito. - Médias de médias. Para juntar períodos, não tire a média das médias: pondere pelo volume (por exemplo,
duracao_media_segvezesencerradas).
Erros
Além dos erros comuns a toda a API, descritos em Erros:
error | HTTP | Causa |
|---|---|---|
permissao | 403 | A chave não tem a permissão Indicadores (escopo igual a relatorios). |
periodo_invalido | 400 | ate antes de de, ou período acima de 366 dias (a resposta traz maximo_dias). |
data_invalida | 400 | de ou ate que não pôde ser lida (veja campo). |
parametro_invalido | 400 | departamento_id que não é um número inteiro. |
{"ok": false, "error": "periodo_invalido", "maximo_dias": 366}