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:
@@ -357,6 +357,29 @@ ApiID e token dedicados a este projeto. Correção aplicada:
|
|||||||
- Isso mantém este projeto completamente independente do de agendamento —
|
- Isso mantém este projeto completamente independente do de agendamento —
|
||||||
nenhum node ou credencial é compartilhado entre os dois.
|
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
|
### Ainda em aberto
|
||||||
|
|
||||||
- Remover as interações antigas "Webhook Avançado"/"Mensagem" dos passos
|
- 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
|
antigo, que não existe mais no n8n — não causam mais duplicidade, mas
|
||||||
ficam como chamada morta até serem removidas).
|
ficam como chamada morta até serem removidas).
|
||||||
- Confirmar que o número de envio agora bate com o número que recebe.
|
- 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
|
- Trocar a tabela de exames de exemplo pela lista real, direto no `system
|
||||||
message` do node `AI Agent - Orçamento`.
|
message` do node `AI Agent - Orçamento`.
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,12 @@
|
|||||||
"name": "mediaToken",
|
"name": "mediaToken",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"value": "={{ ($json.body.ticket.whatsapp && $json.body.ticket.whatsapp.bmToken) || '' }}"
|
"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
|
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": {
|
"parameters": {
|
||||||
"conditions": {
|
"conditions": {
|
||||||
@@ -357,7 +416,18 @@
|
|||||||
"main": [
|
"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",
|
"type": "main",
|
||||||
"index": 0
|
"index": 0
|
||||||
}
|
}
|
||||||
@@ -375,11 +445,18 @@
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Montar corpo da resposta": {
|
"Está no fluxo de Orçamento?": {
|
||||||
"main": [
|
"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",
|
"type": "main",
|
||||||
"index": 0
|
"index": 0
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user