Índice da Documentação Técnica — API GTI

Lista das documentações disponíveis para consulta.

Documentações

Documentação Técnica — API GTI

Aplicação: extrato — Consulta de Extrato de Atendimentos

1. Objetivo

Esta documentação descreve como consumir a aplicação extrato da API GTI.

A aplicação extrato permite consultar registros detalhados de atendimentos realizados em uma ou mais filas, retornando informações operacionais da chamada, dados do cliente, dados do serviço, agente responsável, gravação, tabulação, avaliação, eventos da ligação e indicadores de tempo.

Os dados retornados podem ser utilizados para auditoria, relatórios analíticos, conferência de atendimento, integração com sistemas externos, dashboards e exportações operacionais.

2. Endpoint

Item Informação
Método HTTP GET
Endpoint {{url}}/agi/app.php
Aplicação extrato
Formato de retorno JSON
Autenticação Query string e headers HTTP

3. URL da Requisição

{{url}}/agi/app.php?user={{user}}&pwd={{pass}}&app=extrato&end_date={{dt_init}}&intervalo=0&key_agents=&key_queues=sac&teste=0

4. Proteção de Dados Sensíveis

A documentação deve utilizar variáveis no lugar de dados reais.

Nunca expor em documentação pública ou compartilhada: IP real, usuário real, senha real, cookies de sessão, tokens, credenciais de produção, dados reais de clientes, telefones reais, CPF/CNPJ reais ou URLs reais de gravações.
Dado sensível Exemplo protegido
URL real do servidor {{url}}
Usuário da API {{user}}
Senha da API {{pass}}
Usuário de header {{header_user}}
Senha de header {{header_pass}}
Cookie de sessão Não documentar
IP real do servidor Usar somente {{url}}
Tokens ou credenciais Usar placeholders
Dados reais de clientes Usar exemplos anonimizados
Telefones reais Usar valores mascarados
CPF/CNPJ reais Usar valores mascarados
URL real de gravação {{url_gravacao}}

5. Variáveis Utilizadas

Variável Descrição
{{url}} URL base do servidor da API
{{user}} Usuário de autenticação da API enviado na URL
{{pass}} Senha de autenticação da API enviada na URL
{{dt_init}} Data final da consulta
{{header_user}} Usuário enviado no header HTTP
{{header_pass}} Senha enviada no header HTTP
{{url_gravacao}} URL protegida/base para gravações, quando aplicável

6. Autenticação

A API utiliza autenticação por parâmetros na URL e também por headers HTTP.

6.1 Autenticação pela URL

Parâmetro Obrigatório Descrição
user Sim Usuário autorizado para acesso à API
pwd Sim Senha do usuário autorizado

6.2 Autenticação via Headers

Header Obrigatório Descrição
user Sim Usuário autorizado no header HTTP
pwd Sim Senha autorizada no header HTTP

6.3 Headers Recomendados

Header Valor
Accept application/json
user {{header_user}}
pwd {{header_pass}}

7. Parâmetros da Query String

Parâmetro Tipo Obrigatório Exemplo Descrição
user string Sim {{user}} Usuário da API
pwd string Sim {{pass}} Senha da API
app string Sim extrato Nome da aplicação consultada
end_date date Sim 2025-10-08 Data final da consulta
intervalo integer Sim 0 Quantidade de dias retroativos a partir de end_date
key_agents string Não vazio Filtro por agente
key_queues string Não sac Filtro por fila
teste integer Não 0 Indicador de execução em modo teste

8. Parâmetro app

Para consultar o extrato de atendimentos, o parâmetro app deve receber o valor:

app=extrato

9. Parâmetro end_date

O parâmetro end_date representa a data final da consulta.

Formato esperado:

YYYY-MM-DD

Exemplo:

end_date=2025-10-08

A API considera a data final até o último segundo do dia.

2025-10-08 23:59:59

10. Parâmetro intervalo

O parâmetro intervalo define a quantidade de dias anteriores que serão incluídos na consulta, usando end_date como referência.

Campo Regra
Data inicial end_date - intervalo
Data final end_date
Hora inicial 00:00:00
Hora final 23:59:59

11. Exemplos de Intervalo

11.1 Exemplo com intervalo igual a 0

Parâmetro Valor
end_date 2025-10-08
intervalo 0

Período calculado:

Campo Valor
start 2025-10-08 00:00:00
end 2025-10-08 23:59:59
intervalo 0

Neste caso, a consulta considera somente o dia 2025-10-08.

11.2 Exemplo com intervalo igual a 1

Parâmetro Valor
end_date 2025-10-08
intervalo 1

Período calculado:

Campo Valor
start 2025-10-07 00:00:00
end 2025-10-08 23:59:59
intervalo 1

Neste caso, a consulta considera o período de 2025-10-07 00:00:00 até 2025-10-08 23:59:59.

12. Limite do Intervalo

O intervalo aceito pela API é de 0 a 91 dias.

Valor de intervalo Comportamento
0 Consulta apenas o dia informado em end_date
1 Consulta o dia informado e 1 dia anterior
7 Consulta o dia informado e 7 dias anteriores
30 Consulta o dia informado e 30 dias anteriores
91 Maior intervalo permitido

13. Filtro por Agente

O parâmetro key_agents permite filtrar os resultados por agente.

Quando vazio:

key_agents=

A API não restringe a consulta a um agente específico.

Quando informado, deve conter a identificação do agente desejado.

key_agents=NOME_DO_AGENTE

14. Filtro por Fila

O parâmetro key_queues permite filtrar os resultados por fila.

key_queues=sac

No retorno, a fila pode aparecer normalizada em caixa alta.

SAC

15. Exemplo de Requisição cURL

curl --location '{{url}}/agi/app.php?user={{user}}&pwd={{pass}}&app=extrato&end_date={{dt_init}}&intervalo=0&key_agents=&key_queues=sac&teste=0' \
--header 'Accept: application/json' \
--header 'user: {{header_user}}' \
--header 'pwd: {{header_pass}}'

16. Exemplo de Retorno Geral

{
  "status": 0,
  "msg": [
    "Login bem sucedido!",
    "A data informada é valida!",
    "O intervalo informado é valido entre 0 e 91 dias",
    "A aplicação exite!",
    "A soma de catacteres em keywords é menor ou igual a 100"
  ],
  "dt": {
    "start": "2025-10-08 00:00:00",
    "end": "2025-10-08 23:59:59",
    "intervalo": 0
  },
  "key_agents": null,
  "key_queues": [
    "sac"
  ],
  "csv": {},
  "filas": []
}

17. Estrutura Principal do Retorno

Campo Tipo Descrição
status integer Código de status da requisição
msg array Lista de mensagens de validação e processamento
dt object Objeto com o período calculado da consulta
key_agents array/null Lista de agentes filtrados ou null quando não informado
key_queues array/null Lista de filas filtradas
csv object Dados detalhados do extrato em estrutura indexada
filas array Lista de filas disponíveis no sistema

18. Campo status

O campo status indica o resultado geral da execução.

{
  "status": 0
}
Valor Significado
0 Requisição processada com sucesso

19. Campo msg

O campo msg retorna uma lista de mensagens referentes às validações realizadas pela API.

Mensagem Significado
Login bem sucedido! As credenciais foram aceitas
A data informada é valida! O parâmetro end_date foi validado
O intervalo informado é valido entre 0 e 91 dias O parâmetro intervalo está dentro do limite permitido
A aplicação exite! O valor informado em app foi reconhecido
A soma de catacteres em keywords é menor ou igual a 100 Os filtros informados respeitam o limite de caracteres

20. Campo dt

O campo dt informa o período efetivamente usado na consulta.

{
  "dt": {
    "start": "2025-10-08 00:00:00",
    "end": "2025-10-08 23:59:59",
    "intervalo": 0
  }
}
Campo Tipo Descrição
start datetime Data e hora inicial da consulta
end datetime Data e hora final da consulta
intervalo integer Intervalo retroativo usado no cálculo

21. Campo key_agents

Quando nenhum agente é informado, o retorno pode vir como:

{
  "key_agents": null
}

Isso indica que a consulta não foi limitada a um agente específico.

22. Campo key_queues

Quando uma fila é informada, o retorno contém a lista de filas filtradas.

{
  "key_queues": [
    "sac"
  ]
}

23. Campo csv

O campo csv contém os registros detalhados do extrato de atendimento.

Diferente da aplicação agent, que retorna dados consolidados por agente, a aplicação extrato retorna registros detalhados com informações da chamada, cliente, serviço, evento, gravação, tabulação, avaliação e indicadores de tempo.

Cada item dentro de csv é identificado por uma chave composta.

Formato observado da chave:

{protocolo}-{agent_id}-{queue_id}-{event_id}

Exemplo protegido:

{
  "PROTOCOLO_EXEMPLO-AGENT_ID-QUEUE_ID-EVENT_ID": {
    "Protocolo ": "PROTOCOLO_EXEMPLO",
    "callerid": "TELEFONE_MASCARADO",
    "telefone_primario": "TELEFONE_MASCARADO",
    "telefone_de_cadastro_igual": 1,
    "nome_razaosocial": "CLIENTE_EXEMPLO",
    "cpf_cnpj": "DOCUMENTO_MASCARADO",
    "date": "2025-10-08 08:06:35",
    "event": "COMPLETEAGENT",
    "queue_id": "129",
    "queue": "SAC",
    "agent_id": "0000",
    "agent": "NOME_DO_AGENTE",
    "filename": "{{url_gravacao}}/arquivo.mp3",
    "nota_avaliacao": "3",
    "situacao": "Não Opinou.",
    "tabulacao": "DESCRICAO_DA_TABULACAO",
    "TME": "00:00:02",
    "TMA": "00:03:03",
    "SLA": "1",
    "SLA-P": "100,00%",
    "all_call": "00:03:03",
    "all_esp": "00:00:02",
    "max_esp": "00:00:02"
  }
}

24. Grupos de Campos do Extrato

Grupo Descrição
Identificação da chamada Protocolo, callerid, data, evento
Dados do cliente Nome, documento, telefones, endereço
Dados do serviço ID do serviço, nome do serviço, valor, status
Dados de atendimento Fila, agente, evento, gravação
Indicadores da chamada CONNECT, TRANSFER, COMPLETEAGENT, COMPLETECALLER
Indicadores de tempo TME, TMA, SLA, all_call, all_esp, max_esp
Avaliação Nota e situação da avaliação
Rechamada Dados de retorno/rechamada
Tabulação Tabulação registrada pelo agente
Atualização cadastral Informações de atualização do cadastro do cliente

25. Campos de Identificação da Chamada

Campo Tipo Descrição
Protocolo string Identificador único da chamada/protocolo
callerid string/integer Número de origem da chamada
date datetime Data e hora do evento
event string Evento registrado na chamada
filename string/null URL do arquivo de gravação da chamada
O campo Protocolo possui um espaço no final do nome da chave. O sistema consumidor deve respeitar exatamente o nome retornado pela API ao acessar esse campo.

26. Campos de Cliente

Campo Tipo Descrição
telefone_primario string/integer/null Telefone principal localizado no cadastro
telefone_de_cadastro_igual integer Indica se o telefone da chamada é igual ao telefone do cadastro
nome_razaosocial string/null Nome ou razão social do cliente
cpf_cnpj string/null CPF ou CNPJ do cliente
cidade string/null Cidade do cliente
uf string/null Estado/UF do cliente
bairro string/null Bairro do cliente
endereco string/null Endereço do cliente
numero string/null Número do endereço
completo string/null Complemento do endereço
cep string/null CEP do cliente
pais string/null País do cliente

27. Campos de Serviço

Campo Tipo Descrição
id_cliente_servico integer/null ID interno do serviço do cliente
uuid_cliente_servico string/null UUID do serviço do cliente
id_servico integer/null ID interno do plano/serviço
nome_servico string/null Nome do serviço contratado
valor decimal/null Valor associado ao serviço
status_servico string/null Status atual do serviço

28. Campos de Atualização Cadastral

Campo Tipo Descrição
cliente_cadastro_atualizado integer Indica se houve atualização cadastral
dt_up_Cliente datetime/null Data e hora da atualização cadastral
colaborador_up_Cliente string/null Colaborador responsável pela atualização cadastral
ramal_up_Cliente string/null Ramal associado à atualização cadastral
atualizado_pelo_colaborador string/null Informação complementar sobre atualização feita pelo colaborador

29. Campos de Fila e Agente

Campo Tipo Descrição
queue_id string ID interno da fila
queue string Nome da fila
agent_id string ID interno do agente
agent string Nome ou identificação do agente

30. Campos de Eventos e Indicadores da Chamada

Campo Tipo Descrição
event string Evento da chamada
RINGNOANSWER integer/string Chamadas que tocaram e não foram atendidas
COMPLETEAGENT integer/string Chamadas completadas e finalizadas pelo agente
COMPLETECALLER integer/string Chamadas completadas e finalizadas pelo cliente
TRANSFER integer/string Chamadas transferidas
CONNECT integer Indicador de chamada conectada

31. Eventos Observados

Evento Descrição
CONNECT Chamada conectada ao agente
COMPLETEAGENT Chamada finalizada pelo agente
COMPLETECALLER Chamada finalizada pelo cliente
TRANSFER Chamada transferida

32. Campos de Gravação

Campo Tipo Descrição
filename string/null URL da gravação da chamada

O campo filename pode retornar uma URL de gravação em formato .mp3.

Por segurança, em documentações públicas ou exemplos externos, a URL real da gravação deve ser substituída por placeholder.

{{url_gravacao}}/gravacoes/2025-10-08/arquivo.mp3

33. Campos de Avaliação

Campo Tipo Descrição
nota_avaliacao string/integer/null Nota da avaliação do atendimento
situacao string/null Situação da avaliação

Exemplo de situação observada:

Não Opinou.

34. Campos de Rechamada

Campo Tipo Descrição
recal_datetime datetime/null Data e hora da rechamada
recal_queue string/null Fila da rechamada
recal_agent string/null Agente da rechamada
recal_position integer Posição relacionada à rechamada
recal_recals integer Quantidade de rechamadas
recal_conexao integer Indicador de conexão em rechamada

35. Campos de Tabulação

Campo Tipo Descrição
tabulacao string/null Tabulação registrada para o atendimento
tabulacao_agente string/null Agente responsável pela tabulação
tabulacao_fila string/null Fila associada à tabulação

Exemplos de tabulação podem representar motivos como informação, cancelamento, atualização cadastral, segunda via, suporte, indisponibilidade, transferência ou outros tipos definidos na operação.

36. Campos Complementares

Campo Tipo Descrição
MASSIVA string/null Informação relacionada a massiva, quando houver
update_service string/null Informação de atualização de serviço, quando houver
bread_path string/null Caminho complementar ou trilha de navegação, quando houver

37. Indicadores de Tempo

Campo Tipo Descrição
TME time/null Tempo médio de espera
TMA time/null Tempo médio de atendimento
SLA integer/string/null Total de chamadas dentro do SLA
SLA-P string/null Percentual de SLA
all_call time/null Tempo total em chamada
all_esp time/null Tempo total de espera
max_esp time/null Maior tempo de espera registrado
Nem todos os eventos retornam todos os indicadores de tempo. Em alguns registros, esses campos podem aparecer apenas em eventos de finalização da chamada, como COMPLETEAGENT, COMPLETECALLER ou TRANSFER.

38. Campo filas

O campo filas retorna a lista de filas disponíveis na base da aplicação.

{
  "filas": [
    {
      "queue_id": "129",
      "queue": "SAC"
    }
  ]
}
Campo Tipo Descrição
queue_id string ID interno da fila
queue string Nome da fila

39. Exemplo de Consumo em PHP

<?php

$urlBase = '{{url}}/agi/app.php';

$params = [
    'user'       => '{{user}}',
    'pwd'        => '{{pass}}',
    'app'        => 'extrato',
    'end_date'   => '{{dt_init}}',
    'intervalo'  => 0,
    'key_agents' => '',
    'key_queues' => 'sac',
    'teste'      => 0,
];

$url = $urlBase . '?' . http_build_query($params);

$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL            => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Accept: application/json',
        'user: {{header_user}}',
        'pwd: {{header_pass}}',
    ],
]);

$response = curl_exec($ch);

if ($response === false) {
    throw new Exception('Erro na requisição: ' . curl_error($ch));
}

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

$data = json_decode($response, true);

if ($httpCode !== 200) {
    throw new Exception('Erro HTTP: ' . $httpCode);
}

if (!isset($data['status']) || $data['status'] !== 0) {
    throw new Exception('Erro retornado pela API.');
}

print_r($data);

40. Exemplo de Consumo em JavaScript

const url = new URL('{{url}}/agi/app.php');

url.searchParams.set('user', '{{user}}');
url.searchParams.set('pwd', '{{pass}}');
url.searchParams.set('app', 'extrato');
url.searchParams.set('end_date', '{{dt_init}}');
url.searchParams.set('intervalo', '0');
url.searchParams.set('key_agents', '');
url.searchParams.set('key_queues', 'sac');
url.searchParams.set('teste', '0');

const response = await fetch(url, {
  method: 'GET',
  headers: {
    Accept: 'application/json',
    user: '{{header_user}}',
    pwd: '{{header_pass}}',
  },
});

if (!response.ok) {
  throw new Error(`Erro HTTP: ${response.status}`);
}

const data = await response.json();

if (data.status !== 0) {
  throw new Error('Erro retornado pela API.');
}

console.log(data);

41. Exemplo de Leitura do Campo csv em JavaScript

const registros = Object.values(data.csv);

registros.forEach((item) => {
  console.log({
    protocolo: item['Protocolo '],
    data: item.date,
    evento: item.event,
    fila: item.queue,
    agente: item.agent,
    telefone: item.callerid,
    cliente: item.nome_razaosocial,
    documento: item.cpf_cnpj,
    servico: item.nome_servico,
    statusServico: item.status_servico,
    gravacao: item.filename,
    tabulacao: item.tabulacao,
    nota: item.nota_avaliacao,
    situacao: item.situacao,
    tme: item.TME,
    tma: item.TMA,
    sla: item['SLA-P'],
  });
});

42. Exemplo de Leitura com Proteção de Dados

const registros = Object.values(data.csv);

const dadosProtegidos = registros.map((item) => ({
  protocolo: item['Protocolo '],
  data: item.date,
  evento: item.event,
  fila: item.queue,
  agente: item.agent,
  telefone: item.callerid ? '***' : null,
  cliente: item.nome_razaosocial ? 'CLIENTE_PROTEGIDO' : null,
  documento: item.cpf_cnpj ? 'DOCUMENTO_PROTEGIDO' : null,
  servico: item.nome_servico,
  statusServico: item.status_servico,
  tabulacao: item.tabulacao,
  nota: item.nota_avaliacao,
  situacao: item.situacao,
  tme: item.TME,
  tma: item.TMA,
  sla: item['SLA-P'],
}));

console.log(dadosProtegidos);

43. Tratamento de Retorno Vazio

A API pode retornar sucesso, mas sem dados no período consultado.

{
  "status": 0,
  "csv": {}
}

Nesse caso, a aplicação consumidora deve tratar como consulta válida sem registros.

44. Validações Recomendadas no Sistema Consumidor

Validação Descrição
status == 0 Confirma que a API processou a requisição com sucesso
dt.start existe Confirma que a data inicial foi retornada
dt.end existe Confirma que a data final foi retornada
csv existe Confirma que a estrutura de extrato foi retornada
filas existe Confirma que a lista de filas foi retornada

45. Possíveis Erros

Situação Possível causa
Login inválido Usuário ou senha incorretos
Data inválida end_date fora do formato esperado
Intervalo inválido intervalo menor que 0 ou maior que 91
Aplicação inexistente Valor de app não reconhecido
Retorno sem dados Não existem registros no período ou filtro informado
Erro HTTP Falha de comunicação com o servidor
Erro de permissão Credenciais sem autorização para a consulta

46. Boas Práticas de Segurança

47. Boas Práticas de Performance

48. Checklist de Homologação

Item Validação
URL Confirmar se {{url}} aponta para o ambiente correto
Credenciais Confirmar se {{user}} e {{pass}} estão corretos
Headers Confirmar se {{header_user}} e {{header_pass}} estão corretos
Data Confirmar se {{dt_init}} está no formato YYYY-MM-DD
Aplicação Confirmar se app=extrato está sendo enviado
Intervalo Confirmar se o valor está entre 0 e 91
Fila Confirmar se key_queues contém a fila desejada
Agente Confirmar se key_agents está correto quando utilizado
Retorno Confirmar se status retorna 0
Extrato Confirmar se csv é tratado corretamente
Dados pessoais Confirmar se informações sensíveis são protegidas
Gravações Confirmar se URLs de gravação não são expostas indevidamente
Segurança Confirmar se credenciais não aparecem em logs ou no frontend

49. Resumo Técnico

Item Valor
Nome da aplicação extrato
Endpoint {{url}}/agi/app.php
Método GET
Retorno JSON
Autenticação Query string e headers HTTP
Data base end_date
Intervalo permitido 0 a 91 dias
Estrutura principal csv
Lista de filas filas
Filtro por agente key_agents
Filtro por fila key_queues
Uso principal Consulta detalhada de atendimentos

50. Observação Final

A aplicação extrato deve ser utilizada para consultas detalhadas de atendimentos.

O retorno fornece uma estrutura indicada para análise individual de chamadas, contendo protocolo, cliente, serviço, evento, fila, agente, gravação, avaliação, tabulação e indicadores operacionais.

Por retornar dados sensíveis, a integração deve aplicar cuidados adicionais de segurança, principalmente em relação a credenciais, dados pessoais de clientes e links de gravações.