From f6f12c53d8eaa28376aa501aa5ea7d0e4622907e Mon Sep 17 00:00:00 2001 From: Automacao GLPI Date: Tue, 25 Aug 2026 09:34:58 -0300 Subject: [PATCH] Corrige bug real: insert de log de envio (falha) quebrava por coluna 'erro' inexistente Encontrado ao vivo durante o teste controlado de envio (secao 14): a Data Table dev_glpi_v2_send_log tem schema fixo (imutavel apos criacao) sem coluna 'erro'. O Code node 'Preparar Log de Envio (Falha)' incluia esse campo, e o autoMapInputData tentava mapear para uma coluna que nao existe -> 'Validation error with data table request: unknown column name erro' (execucao 16724). O erro fica agora so no console.log do node, nao mais no payload enviado a Data Table. Confirmado no mesmo teste: nenhuma mensagem real chegou a ser enviada (Slack node retornou channel_not_found e foi corretamente capturado pelo onError:continueErrorOutput antes deste bug secundario aparecer). Co-Authored-By: Claude Sonnet 5 --- Resumo Operacional GLPI v2 - IA.n8n.json | 4 ++-- tools/build_v2_workflow_assemble.js | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Resumo Operacional GLPI v2 - IA.n8n.json b/Resumo Operacional GLPI v2 - IA.n8n.json index fa52819..14787e3 100644 --- a/Resumo Operacional GLPI v2 - IA.n8n.json +++ b/Resumo Operacional GLPI v2 - IA.n8n.json @@ -144,7 +144,7 @@ "id": "SLACK_DESTINATION", "name": "SLACK_DESTINATION", "type": "string", - "value": "" + "value": "D06JK4GEK8E" }, { "id": "EXTENDED_METRICS_ENABLED", @@ -767,7 +767,7 @@ 300 ], "parameters": { - "jsCode": "const relatorio = $('Code - Motor V2: Relatorio Completo').first().json;\nconst envio = relatorio.envio;\nconst erro = $input.first().json.error || null;\nreturn [{ json: {\n send_key: envio.send_key,\n report_type: envio.report_type,\n period_start: envio.period_start,\n period_end: envio.period_end,\n destination: envio.destino,\n message_hash: envio.message_hash,\n trigger_type: envio.trigger_type,\n status: 'failed',\n sent_at: new Date().toISOString(),\n erro: erro ? String((erro && erro.message) || erro) : null,\n} }];\n" + "jsCode": "const relatorio = $('Code - Motor V2: Relatorio Completo').first().json;\nconst envio = relatorio.envio;\nconst erro = $input.first().json.error || null;\n// erro NAO e persistido na Data Table (schema imutavel apos criacao, sem\n// coluna 'erro' — mandar esse campo quebra o insert com \"unknown column\n// name 'erro'\", bug real encontrado e corrigido em 2026-08-25 no teste\n// controlado de envio). Fica so no console.log, visivel no log de\n// execucao do n8n.\nif (erro) console.log('Falha no envio Slack:', erro);\nreturn [{ json: {\n send_key: envio.send_key,\n report_type: envio.report_type,\n period_start: envio.period_start,\n period_end: envio.period_end,\n destination: envio.destino,\n message_hash: envio.message_hash,\n trigger_type: envio.trigger_type,\n status: 'failed',\n sent_at: new Date().toISOString(),\n} }];\n" } }, { diff --git a/tools/build_v2_workflow_assemble.js b/tools/build_v2_workflow_assemble.js index 9bed742..db0d0ca 100644 --- a/tools/build_v2_workflow_assemble.js +++ b/tools/build_v2_workflow_assemble.js @@ -82,10 +82,13 @@ module.exports = function build(codeBodies) { // ate a promocao explicita deste workflow para producao. setAssignment('SEND_ENABLED', 'SEND_ENABLED', 'boolean', true), setAssignment('FORCE_SEND', 'FORCE_SEND', 'boolean', false), - // Canal Slack de destino do Resumo Diario/Semanal. Vazio ate - // confirmacao explicita do usuario sobre qual canal deve receber - // (nao deve ser adivinhado — ver secao 6 da missao). - setAssignment('SLACK_DESTINATION', 'SLACK_DESTINATION', 'string', ''), + // Canal Slack de destino do Resumo Diario/Semanal. Confirmado + // explicitamente pelo usuario em 2026-08-25 (ver secao 6 da + // missao — nao foi adivinhado). D06JK4GEK8E: prefixo "D" indica + // uma conversa direta (DM)/IM, nao um canal publico/privado + // ("C"/"G") — comportamento identico via chat.postMessage, so + // registrando aqui para quem for auditar depois. + setAssignment('SLACK_DESTINATION', 'SLACK_DESTINATION', 'string', 'D06JK4GEK8E'), setAssignment('EXTENDED_METRICS_ENABLED', 'EXTENDED_METRICS_ENABLED', 'boolean', false), setAssignment('ANOMALY_MULTIPLIER', 'ANOMALY_MULTIPLIER', 'number', 2.0), setAssignment('ANOMALY_MIN_DELTA', 'ANOMALY_MIN_DELTA', 'number', 3), @@ -432,6 +435,12 @@ module.exports = function build(codeBodies) { "const relatorio = $('Code - Motor V2: Relatorio Completo').first().json;\n" + 'const envio = relatorio.envio;\n' + 'const erro = $input.first().json.error || null;\n' + + '// erro NAO e persistido na Data Table (schema imutavel apos criacao, sem\n' + + "// coluna 'erro' — mandar esse campo quebra o insert com \"unknown column\n" + + '// name \'erro\'\", bug real encontrado e corrigido em 2026-08-25 no teste\n' + + '// controlado de envio). Fica so no console.log, visivel no log de\n' + + '// execucao do n8n.\n' + + 'if (erro) console.log(\'Falha no envio Slack:\', erro);\n' + 'return [{ json: {\n' + ' send_key: envio.send_key,\n' + ' report_type: envio.report_type,\n' + @@ -442,7 +451,6 @@ module.exports = function build(codeBodies) { ' trigger_type: envio.trigger_type,\n' + " status: 'failed',\n" + ' sent_at: new Date().toISOString(),\n' + - ' erro: erro ? String((erro && erro.message) || erro) : null,\n' + '} }];\n', }, },