diff --git a/docs/superpowers/specs/2026-08-20-orcamento-exames-imagem-design.md b/docs/superpowers/specs/2026-08-20-orcamento-exames-imagem-design.md index ddd1acf..9ca344f 100644 --- a/docs/superpowers/specs/2026-08-20-orcamento-exames-imagem-design.md +++ b/docs/superpowers/specs/2026-08-20-orcamento-exames-imagem-design.md @@ -330,14 +330,42 @@ em vez de `image`. O workflow foi reconstruído em cima desse webhook: - O prompt do `AI Agent` voltou a aceitar/pedir foto normalmente, já que a imagem agora chega de verdade. +### Teste ponta-a-ponta validado + +Com uma imagem real de teste, o fluxo completo funcionou: download +autenticado da mídia (44.9 kB, jpg) → IA de visão leu a imagem e +identificou 2 exames da tabela + 1 fora da tabela (avisando que precisa de +confirmação) → resposta enviada com sucesso pelo Z-PRO. Texto puro também +validado (cliente manda "oi" → IA pede pra digitar/mandar os exames). + +### Descoberta 6: canal/API errados no envio (corrigido) + +O envio estava reaproveitando o sub-workflow `enviar_texto` +(`Y4ndG7GuIUrmVRxV`), que pertence a **outro projeto** (bot de agendamento) +e usa um ApiID/canal diferente — por isso as respostas saíam por um número +errado (recebendo num número, respondendo por outro). O usuário criou um +ApiID e token dedicados a este projeto. Correção aplicada: + +- Nova credencial `httpHeaderAuth` **"ZPRO API Token - Orçamento de + Exames"** (nome deliberadamente diferente de "ZPRO API Token - Canal QR - + MC AGENDAMENTO", pra não confundir entre projetos), header `Authorization: + Bearer `. +- O envio deixou de chamar o sub-workflow compartilhado — agora é uma + chamada HTTP direta (`POST`) dentro deste próprio workflow, isolada, + usando a URL `https://apigchat.gtigrupo.com.br/v2/api/external//` e a credencial acima. +- Isso mantém este projeto completamente independente do de agendamento — + nenhum node ou credencial é compartilhado entre os dois. + ### Ainda em aberto -- Confirmar, depois de remover os passos antigos do ChatFlow, que não há - mais resposta duplicada. -- Validar ponta a ponta com uma foto real de pedido de exames (a extração - do `imagemUrl`/`mediaToken` foi validada com uma imagem de teste, mas o - fluxo completo — download autenticado + IA de visão — ainda não foi - testado de ponta a ponta após esta reconstrução). +- Remover as interações antigas "Webhook Avançado"/"Mensagem" dos passos + `Menu Orçamento`/`Menu Orçamento 2` no ChatFlow (apontavam pro endpoint + antigo, que não existe mais no n8n — não causam mais duplicidade, mas + ficam como chamada morta até serem removidas). +- Confirmar que o número de envio agora bate com o número que recebe. +- Trocar a tabela de exames de exemplo pela lista real, direto no `system + message` do node `AI Agent - Orçamento`. ## Fora de escopo (por enquanto) diff --git a/n8n/orcamento-exames-imagem.workflow.json b/n8n/orcamento-exames-imagem.workflow.json index 069b14a..81b18eb 100644 --- a/n8n/orcamento-exames-imagem.workflow.json +++ b/n8n/orcamento-exames-imagem.workflow.json @@ -246,72 +246,34 @@ "name": "Simple Memory" }, { - "id": "enviar-orcamento-zpro", + "id": "enviar-orcamento-zpro-http", "name": "Enviar orçamento (Z-PRO)", - "type": "n8n-nodes-base.executeWorkflow", - "typeVersion": 1.3, + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.4, "position": [ 900, -128 ], "parameters": { - "workflowId": { - "__rl": true, - "mode": "id", - "value": "Y4ndG7GuIUrmVRxV", - "cachedResultName": "MCP Server - Mensageria ZPRO - enviar_texto" - }, - "workflowInputs": { - "mappingMode": "defineBelow", - "value": { - "number": "={{ $json.number }}", - "body": "={{ $json.body }}", - "externalKey": "={{ $json.externalKey }}", - "isClosed": "={{ $json.isClosed }}" - }, - "matchingColumns": [], - "schema": [ - { - "id": "number", - "displayName": "number", - "required": false, - "defaultMatch": false, - "display": true, - "canBeUsedToMatch": true, - "type": "string" - }, - { - "id": "body", - "displayName": "body", - "required": false, - "defaultMatch": false, - "display": true, - "canBeUsedToMatch": true, - "type": "string" - }, - { - "id": "externalKey", - "displayName": "externalKey", - "required": false, - "defaultMatch": false, - "display": true, - "canBeUsedToMatch": true, - "type": "string" - }, - { - "id": "isClosed", - "displayName": "isClosed", - "required": false, - "defaultMatch": false, - "display": true, - "canBeUsedToMatch": true, - "type": "boolean" - } - ], - "attemptToConvertTypes": false, - "convertFieldsToString": false + "method": "POST", + "url": "https://apigchat.gtigrupo.com.br/v2/api/external/fc30a773-0089-43b9-8b05-a5d92c48eb9b/", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendBody": true, + "contentType": "json", + "specifyBody": "json", + "jsonBody": "={{ JSON.stringify({ body: $json.body, number: $json.number, externalKey: $json.externalKey, isClosed: $json.isClosed }) }}", + "options": { + "timeout": 15000 } - } + }, + "credentials": { + "httpHeaderAuth": { + "id": "6IxSBH9y4fXsIoyA", + "name": "ZPRO API Token - Orçamento de Exames" + } + }, + "onError": "continueErrorOutput" } ], "connections": {