fix(n8n): usa canal/API dedicados deste projeto para o envio (nao mais compartilhado)

O envio estava saindo pelo canal do bot de agendamento (sub-workflow
enviar_texto, projeto diferente) -- por isso recebia num numero e
respondia por outro. Cria credencial httpHeaderAuth propria ('ZPRO API
Token - Orcamento de Exames') e troca o envio para uma chamada HTTP direta
dentro deste workflow, isolada do projeto de agendamento.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Eric
2026-08-21 10:40:16 -03:00
co-authored by Claude Sonnet 5
parent deeefe2b40
commit 2322940264
2 changed files with 55 additions and 65 deletions
@@ -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 <token>`.
- 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/<ApiID
deste projeto>/` 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)
+21 -59
View File
@@ -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": {