Indicadores

Referencia de la ruta relatorios/resumo: volúmenes de conversaciones y mensajes, tiempos promedio contados en horario de atención, satisfacción y números por departamento y por agente, en un período libre de hasta un año. Cada indicador se explica con la regla exacta de cálculo.

Visión general

La ruta de indicadores entrega, en una sola llamada, el retrato de la atención de un período: cuántas atenciones se abrieron y se cerraron, cuántas resolvió la IA sola, cuánto esperó el cliente por la primera respuesta y en la cola, cuánto duró cada atención y cómo la evaluó el cliente. Los tiempos siguen las mismas reglas de la pantalla Informes: cuentan solo el horario de atención y descuentan la espera de respuesta del cliente.

Casos típicos:

  • BI y paneles de gestión: alimentar Power BI, Metabase, Grafana o una hoja de cálculo con la serie diaria, semanal o mensual.
  • Cierre del mes: exportar los números por departamento y por agente para el informe de la dirección o para la remuneración variable.
  • Seguimiento de metas: verificar todos los días si la primera respuesta promedio está dentro de lo acordado.
RutaMétodoPermiso de la clave
relatorios/resumoGET (o POST)Indicadores

El permiso Indicadores ("Volúmenes, tiempos en horario hábil, satisfacción y números por departamento y agente") se marca en la clave, en Integraciones, tarjeta API de ChatISP. Da acceso solo a números agregados: aparecen nombres de agentes y departamentos, pero ningún mensaje ni dato de cliente.


La llamada

GET/api_publica.php?r=relatorios/resumo
ParámetroTipoDescripción
defechaInicio del período. Predeterminado: 00:00 de hace 29 días (con el valor predeterminado de ate, los últimos 30 días contando hoy).
atefechaFin del período. Predeterminado: hoy, 23:59:59. Una fecha sin hora vale hasta las 23:59:59 del día.
departamento_identeroRestringe todos los números a un departamento (vea Filtro por departamento). Sin él, o con 0, toda la empresa.

El período máximo es de 366 días. Las fechas aceptan ISO 8601 (2026-09-01T00:00:00-03:00), AAAA-MM-DD o AAAA-MM-DD HH:MM:SS en la zona horaria del servidor.

curl
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
<?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);
Python
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()
Respuesta
{
  "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
    }
  ]
}

Los tiempos vienen en segundos, con un decimal. Cuando no hay ninguna muestra en el período (ninguna conversación respondida, ninguna cerrada), el tiempo viene null, no cero: trate null como "sin dato" en su panel.


Bloque conversaciones

CampoCómo se cuenta
abertasAtenciones (protocolos) abiertas dentro del período, en cualquier estado hoy. Incluye las conversaciones de aviso que nacen cerradas (envío por la API o campaña a quien no tenía conversación abierta).
encerradasAtenciones cerradas dentro del período, sin importar cuándo se abrieron (incluidas las conversaciones de aviso).
em_andamento_agoraAtenciones no cerradas en el momento de la llamada (con la IA, en un flujo, en la cola o con un agente). No depende del período: es la fotografía del momento.
resolvidas_pela_iaCerradas en el período que terminaron sin agente y tuvieron al menos un mensaje de la IA. Es el volumen que la IA resolvió sin que nadie del equipo asumiera.

Para la tasa de resolución por la IA, divida resolvidas_pela_ia por encerradas.


Bloque mensajes

Mensajes creados dentro del período. Las notas internas del equipo no entran en ningún número.

CampoCómo se cuenta
recebidasMensajes que enviaron los clientes.
enviadasTodo lo que salió del proveedor: IA, agentes, flujos, mensajes automáticos, campañas y envíos por la API.
pela_iaEnviados por la IA.
pelos_atendentesEnviados por personas del equipo.

La diferencia entre enviadas y la suma de pela_ia con pelos_atendentes es el volumen automático (flujos, avisos, campañas, integraciones).


Bloque tiempos

Horario hábil

Los tres tiempos cuentan solo lo que cae dentro del horario de atención: vale el horario del departamento de la conversación cuando tiene uno; si no, el horario general. La madrugada, el almuerzo cerrado y el fin de semana no cuentan. Sin ningún horario registrado, el reloj corre las 24 horas. Ejemplo: con jornada de 08:00 a 18:00, un cliente que escribe a las 19:50 y es atendido a las 08:05 del día siguiente cuenta 5 minutos de espera, no 12 horas. La regla completa está en Tiempos en horario de atención.

CampoDesde qué hasta quéQué atenciones entran
primeira_resposta_media_segDesde el primer mensaje del cliente hasta la primera respuesta de la empresa, sea de la IA o de un agente.Abiertas en el período, con mensaje del cliente y respuesta dentro del período. Una atención sin respuesta no entra. Los mensajes automáticos de flujo y los avisos no cuentan como respuesta.
espera_fila_media_segDesde la apertura de la atención hasta la primera vez que una persona asumió la conversación o la distribución automática se la entregó a alguien.Abiertas en el período que llegaron a ser asumidas o distribuidas dentro del período. Una conversación resuelta solo por la IA no entra.
duracao_media_segDesde la apertura hasta el cierre, descontados los períodos en que la conversación quedó marcada como esperando respuesta del cliente.Cerradas en el período.

Espera de respuesta descontada

Cuando el agente marca la conversación como esperando respuesta del cliente (por ejemplo, "reinicie el router y avíseme"), el tiempo hasta que el cliente vuelve no pesa en la duración de la atención. Cada intervalo de espera se descuenta, también solo en la parte que cae dentro del horario hábil. Una espera todavía abierta al cierre se descuenta hasta el cierre.

Los tiempos miden la atención, no el reloj de pared. Para verificar una conversación específica, la exportación CSV de la pantalla Informes trae la duración hábil de cada conversación cerrada, ya con las mismas reglas.


Bloque satisfacción

Proviene de la encuesta de satisfacción enviada al final de la atención (cuando está activada en Configuración), con una nota de 1 a 5. Vea Encuesta de satisfacción.

CampoCómo se cuenta
pesquisas_enviadasEncuestas enviadas dentro del período.
respostasDe esas, cuántas respondió el cliente con una nota.
mediaPromedio de las notas de esas respuestas, con dos decimales; null sin ninguna respuesta.

Tasa de respuesta: respostas dividido por pesquisas_enviadas.


Por departamento

por_departamento lista los departamentos que tuvieron atenciones abiertas en el período, del mayor volumen al menor. Un departamento sin ninguna atención en el período no aparece.

CampoDescripción
departamento_id / departamentoIdentificación del departamento.
abertasAtenciones abiertas en el período que hoy están en ese departamento.
encerradasDe esas mismas atenciones, cuántas ya están cerradas.

Aquí encerradas es distinto del bloque conversas: cuenta las atenciones abiertas en el período que ya se cerraron (es la cohorte del período), mientras que conversas.encerradas cuenta todo lo que se cerró en el período, incluso lo que se abrió antes. Por eso las sumas por departamento no coinciden con el total general.

El departamento considerado es el actual de la conversación: una atención que comenzó en Comercial y fue transferida a Soporte cuenta en Soporte.


Por agente

por_atendente lista las personas que son responsables de atenciones abiertas en el período, de quien atendió más a quien atendió menos.

CampoCómo se cuenta
atendente_id / atendenteIdentificación de la persona.
atendidasAtenciones abiertas en el período de las que es la responsable actual.
encerradasDe esas, cuántas ya están cerradas.
duracao_media_segDuración promedio, en horario hábil y con la espera de respuesta descontada, de sus atenciones cerradas en el período. null si no hay ninguna.
satisfacao_mediaPromedio de las notas de encuesta atribuidas a ella y respondidas en el período; null si no hay ninguna.
avaliacoesCuántas notas recibió en el período.

La atención cuenta para quien es el responsable actual. Si la conversación se transfirió de una persona a otra, cuenta solo para quien se quedó con ella.


Filtro por departamento

Con departamento_id, todos los números pasan a considerar solo ese departamento: conversaciones, mensajes, tiempos, la lista por departamento (que queda con una sola fila) y los volúmenes y duraciones por agente consideran las atenciones que hoy están en el departamento; la satisfacción (general y por agente) usa el departamento registrado en la encuesta.

Para armar una tabla con todos los departamentos lado a lado, llame una vez sin filtro (el total de la empresa) y una vez por departamento, con los ids de departamentos/listar. La receta Exportar indicadores mensuales hace esto.


Buenas prácticas

  • Cierre períodos completos. Para la serie histórica, consulte días, semanas o meses ya terminados y guarde el resultado en su BI. El mes en curso cambia con cada atención.
  • Prefiera varias llamadas cortas a una larga. Se acepta un año entero, pero una serie mensual (12 llamadas) da más información y cada llamada es más liviana.
  • No consulte en un bucle corto. Los números se calculan en el momento; una consulta cada 5 o 15 minutos es suficiente para un panel en vivo. Respete la cuota de la clave (X-RateLimit-Remaining).
  • Zona horaria. Las fechas sin zona horaria se interpretan en la zona horaria del servidor (vea servidor.fuso_horario en chave/info). Al armar el período desde otra zona horaria, envíe la fecha en ISO 8601 con la zona horaria explícita.
  • Promedios de promedios. Para unir períodos, no saque el promedio de los promedios: pondere por el volumen (por ejemplo, duracao_media_seg por encerradas).

Errores

Además de los errores comunes a toda la API, descritos en Errores:

errorHTTPCausa
permissao403La clave no tiene el permiso Indicadores (escopo igual a relatorios).
periodo_invalido400ate anterior a de, o período de más de 366 días (la respuesta trae maximo_dias).
data_invalida400de o ate que no se pudo leer (vea campo).
parametro_invalido400departamento_id que no es un número entero.
Ejemplo de error
{"ok": false, "error": "periodo_invalido", "maximo_dias": 366}