# Resumo Diário GLPI - MVP Workflow N8N inicial para gerar um resumo diário de chamados usando dados simulados. ## Subir o N8N com Docker 1. Copie `.env.example` para `.env`. 2. Edite `.env` e troque `N8N_BASIC_AUTH_PASSWORD` e `N8N_ENCRYPTION_KEY`. 3. Suba o container: ```powershell docker compose up -d ``` 4. Acesse: ```text http://localhost:5678 ``` 5. Para parar: ```powershell docker compose down ``` ## Arquivo - `Resumo Diario GLPI - MVP.n8n.json` - `Resumo Diario GLPI - Real Slack.n8n.json` - `Resumo Diario GLPI - SQL Slack.n8n.json` - `Resumo Semanal GLPI - SQL Slack.n8n.json` - `sql/indicadores_diario_glpi.sql` - `sql/indicadores_semana_glpi.sql` ## Workflow Recomendado Use este workflow para o relatório automatico correto: - `Resumo Diario GLPI - SQL Slack.n8n.json` Essa versão roda de segunda a sexta as 08:00 e escolhe o periodo automaticamente: - terca-feira: envia o relatorio da segunda-feira - quarta-feira: envia o relatorio da terca-feira - quinta-feira: envia o relatorio da quarta-feira - sexta-feira: envia o relatorio da quinta-feira - segunda-feira: envia o relatorio da semana anterior inteira, de segunda a domingo Essa versão usa a regra aprendida com a query semanal, aplicada ao periodo selecionado: - chamados abertos no periodo: `glpi_tickets.date` entre `data_inicio` e `data_fim` - chamados fechados no periodo: `glpi_tickets.closedate` entre `data_inicio` e `data_fim` - chamados fechados no periodo podem ter sido abertos em qualquer data anterior - filtro `is_deleted = false` - filtro de categorias pelas árvores `7`, `16`, `17` e `18` usando `ancestors_cache` ### Como configurar o SQL automatico 1. Importe `Resumo Diario GLPI - SQL Slack.n8n.json`. 2. Configure a credencial MySQL no node `MySQL - Indicadores diario GLPI`. 3. Configure a credencial de IA/OpenAI no node `Z IA Chat Model`. 4. Abra `Config - Diario SQL` e preencha: - `data_alvo`: deixe vazio para o modo automatico ou use `2026-07-03` para teste manual de um dia especifico - `slack_webhook_url` - `openai_model`, padrão `gpt-5.5` 5. Execute pelo `Manual Trigger` para testar. 6. Ative o workflow para usar o `Schedule Trigger - Dias uteis 08h`. Se o agente de IA falhar, o workflow envia o resumo fallback sem IA com os números SQL. ### Agente de IA O workflow usa os nodes nativos de IA do N8N: - `AI Agent - Coordenador GLPI`: melhora o texto do relatorio antes do Slack - `Z IA Chat Model`: chat model conectado ao agente pela entrada `Chat Model` O agente recebe o resumo tecnico gerado pelo SQL e deve apenas melhorar a comunicacao. Ele foi instruido a nao inventar numeros. ## Workflow SQL Recomendado Para bater exatamente com os indicadores do GLPI, use: - `Resumo Semanal GLPI - SQL Slack.n8n.json` Essa versão consulta diretamente o banco MySQL/MariaDB do GLPI e executa a mesma lógica da query de referência: - abertos pela coluna `glpi_tickets.date` - fechados pela coluna `glpi_tickets.closedate` - filtro `is_deleted = false` - filtro de categorias pelas árvores `7`, `16`, `17` e `18` usando `ancestors_cache` Isso é diferente da API REST, que pode não trazer todos os chamados necessários para reproduzir o indicador semanal, principalmente porque chamados fechados na semana podem ter sido abertos em semanas anteriores. ### Como configurar 1. Importe `Resumo Semanal GLPI - SQL Slack.n8n.json`. 2. Configure a credencial MySQL no node `MySQL - Indicadores semana GLPI`. 3. Abra `Config - Slack e OpenAI` e preencha: - `slack_webhook_url` - `openai_api_key` - `openai_model`, padrão `gpt-5.5` 4. Execute pelo `Manual Trigger`. Se a OpenAI falhar, o workflow envia um resumo fallback sem IA com os números da query. ## Como usar 1. No N8N, vá em `Workflows`. 2. Clique em `Import from File`. 3. Selecione `Resumo Diario GLPI - MVP.n8n.json`. 4. Abra o node `OpenAI - Gerar resumo`. 5. Selecione sua credencial da OpenAI. 6. Execute o workflow pelo `Manual Trigger`. ## Fluxo ```text Manual Trigger ↓ Set - Dados simulados ↓ Code - Calcular indicadores ↓ OpenAI - Gerar resumo ``` ## Próxima etapa Depois que o MVP estiver gerando o texto corretamente, substitua o node `Set - Dados simulados` pelos nodes HTTP Request do GLPI. ## Workflow Real com GLPI e Slack Importe o arquivo: - `Resumo Diario GLPI - Real Slack.n8n.json` Depois da importação, abra o node `Config - GLPI e Slack` e preencha: - `glpi_url`: URL base do GLPI, exemplo `https://glpi.suaempresa.com.br` - `glpi_app_token`: App Token do GLPI - `glpi_user_token`: User Token do usuário de integração - `slack_webhook_url`: URL do Incoming Webhook do Slack - `range_tickets`: quantidade buscada na API, exemplo `0-999` - `page_size`: tamanho de cada pagina buscada no GLPI, padrao `1000` - `page_count`: quantidade de paginas por ordenacao, padrao `2` - `data_alvo`: data do relatório. Deixe vazio para usar o dia atual, ou informe uma data como `2026-07-03` ou `03/07/26` - `openai_api_key`: chave da OpenAI usada pelo node `OpenAI - Gerar resumo` - `openai_model`: modelo usado na OpenAI, padrão `gpt-5.5` O node `OpenAI - Gerar resumo` usa `HTTP Request` direto para `https://api.openai.com/v1/chat/completions`. O workflow busca tickets em paginas e combina duas ordenacoes: - `id DESC`, para capturar chamados abertos recentemente - `date_mod DESC`, para capturar chamados antigos que foram modificados, solucionados ou fechados recentemente Depois ele remove duplicados por `id` e filtra no N8N pela `data_alvo`. O cálculo separa: - chamados abertos na data, usando `date_creation`, `date` ou `data_abertura` - chamados fechados na data, usando `solvedate`, `closedate` ou `data_fechamento` - pendentes, usando o status atual do ticket filtrado Na base atual, o GLPI informou `1216` tickets. Por isso o padrão recomendado é `page_size=1000` e `page_count=2`, cobrindo `0-1999` por ordenação sem estourar o total. Se aumentar `page_count`, o GLPI pode retornar `ERROR_RANGE_EXCEED_TOTAL` para páginas acima do total existente. Execute pelo `Manual Trigger` primeiro. Depois que validar, troque por `Schedule Trigger`. Para gerar o relatório da sexta-feira `03/07/2026`, use no campo `data_alvo`: ```text 2026-07-03 ``` ### Criar Webhook no Slack 1. Acesse `https://api.slack.com/apps`. 2. Crie ou abra um app do Slack. 3. Ative `Incoming Webhooks`. 4. Crie um webhook para o canal desejado. 5. Copie a URL para o campo `slack_webhook_url`. ### Fluxo Real ```text Manual Trigger ↓ Config - GLPI e Slack ↓ HTTP - GLPI initSession ↓ HTTP - GLPI buscar tickets ↓ Code - Filtrar chamados de hoje ↓ Code - Calcular indicadores ↓ OpenAI - Gerar resumo ↓ HTTP - Slack enviar mensagem ↓ HTTP - GLPI killSession ``` ### Observação Os campos retornados pelo GLPI podem variar conforme versão e configuração. Se o node `Code - Filtrar chamados de hoje` retornar categoria ou cliente como ID em vez de nome, ajuste o mapeamento depois de ver o retorno real da API. ### Erro Slack `400 - no_text` Se o node `HTTP - Slack enviar mensagem` retornar `400 - no_text`, o corpo da requisição foi enviado sem o campo `text`. No node `HTTP - Slack enviar mensagem`, configure: - `Method`: `POST` - `Send Body`: ativo - `Body Content Type`: `JSON` - `Specify Body`: `Using JSON` - `JSON Body`: ```json { "text": "{{ $json.text }}" } ``` ### Erro OpenAI `too many requests` Se o node `OpenAI - Gerar resumo` retornar `The service is receiving too many requests from you`, a OpenAI respondeu com limite de uso/rate limit. Verifique: - Se a chave `openai_api_key` está correta - Se a conta OpenAI tem crédito/billing ativo - Se houve muitas execuções seguidas em pouco tempo - Se o modelo `gpt-4o-mini` está disponível para a chave usada O workflow importável já está configurado com retry: - 3 tentativas - 30 segundos entre tentativas - limite de resposta de 700 tokens Se a OpenAI continuar falhando, o workflow continua a execução e envia ao Slack um resumo técnico gerado pelo node `Code - Preparar mensagem Slack`, sem IA.