GustavoandClaude Sonnet 5 485234dc88 feat(v2): add data-quality audit queue for INSUFFICIENT_CONTEXT, require non-empty next_action
buildDataQualityReview extracts an auditable record per INSUFFICIENT_CONTEXT
ticket (ticket_id, title, ai_reason, context_size, has_description,
followup_count, task_count, has_solution, last_interaction_at) -- not sent
anywhere, just for calibration. Also tightened validateAiClassification to
reject an empty/whitespace-only next_action (was previously accepted).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-24 16:52:22 -03:00

Coordenador GLPI - Chamados Abertos

Projeto n8n para atuar como coordenador diario de Suporte de TI, analisando chamados abertos no GLPI e enviando no Slack os 10 chamados que precisam de acao imediata.

Objetivo

Todos os dias uteis, o workflow consulta o banco do GLPI, calcula um score operacional para cada chamado aberto e envia uma lista priorizada no Slack.

O foco nao e apenas listar chamados antigos. O ranking considera:

  • SLA vencido ou proximo de vencer
  • tempo sem interacao humana
  • prioridade, urgencia e impacto
  • idade do chamado
  • chamado sem tecnico atribuido
  • chamados em categorias e entidades reais do GLPI

Arquivos

  • Coordenador GLPI - Chamados Abertos Slack.n8n.json: workflow importavel no n8n
  • sql/top_10_chamados_abertos_glpi.sql: query base usada pelo workflow
  • .env.example: variaveis para subir n8n localmente
  • docker-compose.yml: n8n local via Docker

Como configurar

  1. Suba o n8n local, se necessario:
docker compose up -d
  1. Acesse:
http://localhost:5678
  1. Importe o workflow:
Coordenador GLPI - Chamados Abertos Slack.n8n.json
  1. Configure a credencial MySQL no node:
MySQL - Top 10 chamados abertos
  1. Abra o node Config - Coordenador GLPI e preencha:
  • slack_webhook_url: webhook do canal Slack
  • dias_sem_interacao_alerta: padrao 2
  • horas_sla_risco: padrao 8
  1. Execute pelo Manual Trigger para validar.

  2. Ative o workflow para rodar pelo Schedule Trigger - Dias uteis 08h.

Metodologia de priorizacao

Cada chamado aberto recebe um score_criticidade, mas a lista final nao e mais apenas o top 10 geral. O workflow monta a lista por blocos para evitar que chamados muito antigos monopolizem todos os dias.

Blocos do top 10:

  • 3 chamados com SLA vencido mais criticos
  • 3 chamados com maior tempo sem interacao
  • 2 chamados sem tecnico atribuido
  • 2 chamados de prioridade alta mais recentes

Se algum bloco nao tiver chamados suficientes, o complemento vem do ranking geral.

O mesmo chamado nao entra duas vezes. Se ele ja apareceu em um bloco anterior, e removido dos blocos seguintes.

Score

Pesos principais:

  • SLA vencido: +100
  • SLA vencendo nas proximas horas configuradas: +45
  • chamado sem interacao ha 7 dias ou mais: +35
  • chamado sem interacao ha 3 a 6 dias: +25
  • chamado sem interacao ha 1 a 2 dias: +10
  • prioridade GLPI: priority * 8
  • urgencia GLPI: urgency * 5
  • impacto GLPI: impact * 5
  • idade do chamado: ate +30
  • sem tecnico atribuido: +25

O resultado e ordenado por:

  1. score_criticidade desc
  2. chamados com SLA vencido primeiro
  3. maior tempo sem interacao
  4. chamados mais antigos

Reincidencia

O workflow controla reincidencia usando staticData global do n8n, sem gravar nada no banco do GLPI.

Regra:

  • apareceu 1 vez: normal
  • apareceu 2 dias seguidos: marcado como reincidente
  • apareceu 3 dias seguidos ou mais: escalar para coordenacao

Campos salvos no staticData:

  • ultima_data_disparo
  • ultimos_chamados_enviados
  • reincidencia_chamados

Se o workflow for duplicado, recriado ou importado como novo workflow, esse historico pode ser perdido porque pertence ao workflow no n8n.

Tempo sem interacao

O campo dias_sem_interacao considera a maior data encontrada entre:

  • followups publicos do chamado: date, date_mod, date_creation
  • tarefas do chamado: date, date_mod, date_creation
  • modificacao do chamado: glpi_tickets.date_mod
  • abertura do chamado: glpi_tickets.date

Isso evita marcar um chamado como parado quando alguem acabou de adicionar ou alterar uma tarefa no GLPI, mesmo que a tarefa esteja planejada para outro dia.

Se a maior data encontrada estiver no futuro por causa de uma tarefa planejada, o contador fica em 0 dias sem interacao, evitando valores negativos no relatorio.

Regra de chamados abertos

O SQL considera abertos todos os chamados com:

is_deleted = false
AND status NOT IN (5, 6)

Este gatilho principal ignora chamados das categorias:

  • ADMINISTRATIVO
  • DESENVOLVIMENTO
  • INFRA

O filtro usa o nome completo da categoria (completename) ou o nome simples (name) iniciando com esses termos, entao tambem remove subcategorias dessas filas.

No GLPI, normalmente:

  • 5: solucionado
  • 6: fechado

Campos usados

A query usa tabelas comuns do GLPI:

  • glpi_tickets
  • glpi_itilcategories
  • glpi_entities
  • glpi_itilfollowups
  • glpi_tickettasks
  • glpi_tickets_users
  • glpi_users

Se sua versao do GLPI tiver customizacoes, valide primeiro a query sql/top_10_chamados_abertos_glpi.sql diretamente no banco.

Saida no Slack

O Slack recebe uma mensagem curta com:

  • top 10 chamados para atacar hoje
  • tecnico atribuido, quando existir
  • SLA
  • dias sem interacao
  • dias aberto
  • reincidencia
  • link do chamado, se glpi_base_url estiver configurado no workflow

Campos removidos da mensagem para reduzir ruido:

  • motivo
  • acao
  • prazo

Se o agente de IA falhar, o workflow envia a mensagem curta gerada por codigo, sem depender da IA.

Agente de IA do n8n com Z IA

O workflow usa o node:

AI Agent - Revisar mensagem

Por padrao, ele esta conectado ao node:

Z IA Chat Model

Esse node usa o chat model compativel com OpenAI do n8n, mas a credencial deve ser configurada para a Z IA.

A IA nao monta mais a mensagem do zero. O node Code - Reincidencia e mensagem curta monta a mensagem final de forma deterministica, e a IA apenas revisa clareza e reduz texto.

Regras do prompt:

  • nao adicionar fatos
  • nao criar motivo
  • nao criar acao
  • nao criar prazo
  • nao alterar IDs, tecnicos, datas, SLA, dias, reincidencia ou links
  • nao usar tom agressivo

No n8n, abra o node:

Z IA Chat Model

Configure:

  • credencial Z IA
  • endpoint/base URL da Z IA, se a credencial permitir
  • modelo correto disponibilizado pela Z IA, por exemplo glm-4.5-flash

No arquivo importavel deixei o modelo como glm-4.5-flash. Se sua conta Z IA usar outro nome de modelo, troque pelo nome exato exibido na plataforma.

Se aparecer The resource you are requesting could not be found, revise principalmente:

  • Base URL da credencial: normalmente https://api.z.ai/api/paas/v4
  • Modelo: precisa existir na sua conta, por exemplo glm-4.5-flash
  • Chave API: precisa ser da Z IA, nao da OpenAI
  • Node usado: mantenha Z IA Chat Model conectado ao AI Agent - Revisar mensagem

Se a Z IA aparecer no seu n8n como node proprio, mantenha o AI Agent - Revisar mensagem e substitua somente o subnode Z IA Chat Model pelo modelo oficial da Z IA.

Recomendacao direta

Nao trate isso como relatorio bonito. Trate como fila diaria de comando.

Minha sugestao operacional:

  • rodar as 08h no canal da lideranca de suporte
  • exigir responsavel e prazo para cada um dos 10 chamados ate 10h
  • repetir apenas os chamados que continuarem parados no dia seguinte
  • se um chamado aparecer 3 dias seguidos, escalar para coordenacao/gestao
  • separar um segundo workflow para chamados sem tecnico atribuido, porque isso e falha de triagem, nao backlog comum
  • criar outro alerta intradiario para SLA vencendo nas proximas 2 horas

Se quiser resultado real, nao basta notificar. Tem que transformar a mensagem do Slack em ritual diario de cobranca.

S
Description
No description provided
Readme
353 KiB
Languages
JavaScript 99.3%
Python 0.7%