fix(n8n): torna o fluxo conversacional (texto e/ou imagem, com memoria de sessao)
O fluxo anterior encerrava sem responder quando a mensagem nao tinha imagem, o que nao reflete um atendimento real (cliente manda texto antes/depois, ou digita os exames em vez de mandar foto). Agora toda mensagem chega ao AI Agent (com ou sem imagem), com memoria de conversa via Postgres, seguindo o mesmo padrao do bot de agendamento ja usado nessa conta. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -164,6 +164,53 @@ Webhook (Z-PRO)
|
||||
6. Trocar a lista de exemplo pela lista real de exames/valores no prompt do
|
||||
`AI Agent`.
|
||||
|
||||
## Revisão 1 (2026-08-21) — fluxo conversacional (texto + imagem)
|
||||
|
||||
Depois do primeiro teste real, o usuário apontou que um atendimento real não
|
||||
chega só como uma foto isolada: o cliente pode mandar texto antes/depois, ou
|
||||
digitar os nomes dos exames em vez de (ou além de) mandar foto, tudo em
|
||||
mensagens separadas. O desenho original tratava qualquer mensagem sem imagem
|
||||
como "não se aplica" e encerrava sem responder — o que quebra esse caso real.
|
||||
|
||||
Mudanças no workflow, alinhadas ao mesmo padrão já usado pelo bot de
|
||||
agendamento desta conta (`Agendamento - GChat - Z-PRO (clínica exemplo)`):
|
||||
|
||||
- O node **"É mensagem de imagem?"** deixou de ser um filtro que encerra o
|
||||
fluxo — agora só decide se baixa a imagem antes do agente ou não. As duas
|
||||
saídas (com ou sem imagem) chegam no `AI Agent`; nenhuma mensagem é mais
|
||||
ignorada.
|
||||
- **"Extrair campos do webhook"** agora também extrai o texto da mensagem
|
||||
(`entrada`), no mesmo nome de campo usado pelos bots de agendamento que já
|
||||
funcionam nessa conta.
|
||||
- Adicionada **memória de conversa por sessão** (node `Memória da Sessão
|
||||
(Postgres)`, reaproveitando a credencial `Postgres Agendamento - (clínica
|
||||
exemplo)`, com `sessionKey` prefixado (`orcamento-<protocolo>`) para não
|
||||
colidir com a memória do bot de agendamento). Isso é necessário porque cada
|
||||
mensagem do WhatsApp chega como uma execução nova e separada do workflow —
|
||||
sem memória persistente, o agente esqueceria o que o cliente já tinha
|
||||
mandado numa mensagem anterior.
|
||||
- O **system prompt do `AI Agent`** foi reescrito para ser conversacional: se
|
||||
o cliente ainda não mandou nem foto nem lista de exames (nesta mensagem ou
|
||||
antes, na mesma conversa), o agente pede isso educadamente em vez de
|
||||
inventar um orçamento vazio; assim que houver pelo menos um exame
|
||||
identificável (por imagem, texto, ou o histórico da conversa), ele monta o
|
||||
orçamento normalmente.
|
||||
- O envio da resposta (via sub-workflow `enviar_texto`) passou a acontecer
|
||||
sempre, em toda mensagem — porque agora toda mensagem gera uma resposta do
|
||||
agente (seja um pedido de mais informação, seja o orçamento final), não só
|
||||
quando uma imagem é reconhecida.
|
||||
|
||||
### Descoberta durante o teste: payload do webhook chegou vazio
|
||||
|
||||
Os dois testes reais feitos pelo usuário mostraram o webhook recebendo
|
||||
`body: {}` (content-length 0, user-agent `axios/1.19.0`) — ou seja, o Z-PRO
|
||||
não mandou `protocol`/`entrada`/`contactName`/`number` como os bots de
|
||||
agendamento recebem. Isso sugere que a URL foi configurada num campo de
|
||||
webhook diferente do usado pelo ChatFlow desses bots (que é o que gera esse
|
||||
formato JSON). Ainda em aberto — precisa confirmar com o usuário onde
|
||||
exatamente a URL foi cadastrada no painel do Z-PRO, e ajustar pro mesmo
|
||||
mecanismo usado pelos bots que já funcionam (ChatFlow → passo "Webhook").
|
||||
|
||||
## Fora de escopo (por enquanto)
|
||||
|
||||
- Fila/aprovação humana antes do envio (usuário optou por envio automático).
|
||||
|
||||
Reference in New Issue
Block a user