fix(n8n): so processa mensagens quando o ticket esta no fluxo de Orcamento

O Webhook do Canal dispara pra toda mensagem do numero, entao o bot estava
respondendo (pedindo exames) pra qualquer coisa -- CPF, agendamento,
resultado de exame etc. Filtra por ticket.stepChatFlow, so seguindo quando
o ticket esta parado no passo Menu Orcamento ou Menu Orcamento 2; qualquer
outra coisa e ignorada sem resposta.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Eric
2026-08-21 10:50:13 -03:00
co-authored by Claude Sonnet 5
parent 2322940264
commit 091878d484
2 changed files with 106 additions and 3 deletions
@@ -357,6 +357,29 @@ ApiID e token dedicados a este projeto. Correção aplicada:
- Isso mantém este projeto completamente independente do de agendamento —
nenhum node ou credencial é compartilhado entre os dois.
### Descoberta 7: filtro por fluxo/fila (o bot respondia a qualquer mensagem)
Como o "Webhook do Canal" dispara pra **toda mensagem do número** (não só
pra quem está no menu de Orçamento), o bot estava respondendo pra qualquer
coisa — cliente mandando foto do CPF, pedindo agendamento, etc. — sempre
pedindo exames. Isso não reflete o atendimento real: o cliente manda
mensagem, recebe o menu de filas, escolhe "Orçamento", e só a partir daí a
automação deve agir.
Correção: o payload do webhook traz `ticket.stepChatFlow`, identificando em
qual passo do ChatFlow o ticket está parado. Os passos `Menu Orçamento` e
`Menu Orçamento 2` (os únicos dois pontos do ChatFlow que levam a essa
automação) têm ids fixos: `node-1787312722889` e `node-1787312980617`.
Adicionado o node **"Está no fluxo de Orçamento?"**, logo após extrair os
campos: só segue adiante (pro resto do pipeline) se `stepChatFlow` for um
desses dois; qualquer outra coisa cai num `NoOp` e é ignorada — sem
resposta nenhuma, deixando pra fila/fluxo correspondente cuidar.
**Risco conhecido:** esse filtro depende dos ids de step atuais do
ChatFlow. Se o `Menu Orçamento`/`Menu Orçamento 2` forem recriados (não só
editados) no editor do Z-PRO, os ids mudam e o filtro precisa ser
atualizado no node `Está no fluxo de Orçamento?`.
### Ainda em aberto
- Remover as interações antigas "Webhook Avançado"/"Mensagem" dos passos
@@ -364,6 +387,9 @@ ApiID e token dedicados a este projeto. Correção aplicada:
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.
- Validar que o filtro por `stepChatFlow` realmente bloqueia mensagens fora
do fluxo de Orçamento (CPF, agendamento, resultado de exame etc.) e não
bloqueia as de dentro.
- Trocar a tabela de exames de exemplo pela lista real, direto no `system
message` do node `AI Agent - Orçamento`.
+80 -3
View File
@@ -66,6 +66,12 @@
"name": "mediaToken",
"type": "string",
"value": "={{ ($json.body.ticket.whatsapp && $json.body.ticket.whatsapp.bmToken) || '' }}"
},
{
"id": "campo-stepchatflow",
"name": "stepChatFlow",
"type": "string",
"value": "={{ $json.body.ticket.stepChatFlow || '' }}"
}
]
},
@@ -80,6 +86,59 @@
0
]
},
{
"id": "if-esta-em-orcamento",
"name": "Está no fluxo de Orçamento?",
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
-240,
0
],
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "cond-step-menu-orcamento-1",
"leftValue": "={{ $json.stepChatFlow }}",
"rightValue": "node-1787312722889",
"operator": {
"type": "string",
"operation": "equals"
}
},
{
"id": "cond-step-menu-orcamento-2",
"leftValue": "={{ $json.stepChatFlow }}",
"rightValue": "node-1787312980617",
"operator": {
"type": "string",
"operation": "equals"
}
}
]
},
"options": {}
}
},
{
"id": "noop-fora-orcamento",
"name": "Não é fluxo de Orçamento - ignora",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
-240,
200
],
"parameters": {}
},
{
"parameters": {
"conditions": {
@@ -357,7 +416,18 @@
"main": [
[
{
"node": "É mensagem de imagem?",
"node": "Está no fluxo de Orçamento?",
"type": "main",
"index": 0
}
]
]
},
"Montar corpo da resposta": {
"main": [
[
{
"node": "Enviar orçamento (Z-PRO)",
"type": "main",
"index": 0
}
@@ -375,11 +445,18 @@
]
]
},
"Montar corpo da resposta": {
"Está no fluxo de Orçamento?": {
"main": [
[
{
"node": "Enviar orçamento (Z-PRO)",
"node": "É mensagem de imagem?",
"type": "main",
"index": 0
}
],
[
{
"node": "Não é fluxo de Orçamento - ignora",
"type": "main",
"index": 0
}