> For the complete documentation index, see [llms.txt](https://ajuda.digitalsac.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ajuda.digitalsac.io/digicrm/operacao-uso-do-sistema/configuracoes/robo-de-atendimento-construtor-de-fluxo.md).

# Robô de Atendimento (Construtor de Fluxo)

O **Robô de Atendimento** (ChatFlow / FlowBuilder) é o construtor visual de fluxos automáticos: um canvas de cards ligados por linhas onde você monta o atendimento robotizado — desde a saudação até agendamento, cobrança PIX, agente de IA, formulários, templates Meta e muito mais — sem escrever código.

Não confundir com o **Copilot** (assistente que o atendente liga por cima de um ticket já assumido) nem com o **Prompt AI** da conexão (IA generativa simples por conexão): o Robô de Atendimento é o **motor de fluxo** que decide o caminho da conversa antes de chegar (ou não) a um atendente humano.

**Caminho:** menu lateral → **Robô de Atendimento** (ChatFlow)

\[\[FOTO]]

***

### O canvas

Cada fluxo é um quadro de **cards** (etapas) ligados por **linhas** (condições). O nó **Início** representa a entrada do fluxo e pode ser arrastado como qualquer outro (só não pode ser excluído).

#### O que cada card mostra

| Elemento do card              | O que exibe                                                                                                                                                                                                                          |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Lista de interações**       | Uma linha por interação da etapa, com ícone + resumo de 1 linha (ex.: “Enviar mensagem: Olá, tudo bem?”)                                                                                                                             |
| **Interações de sistema**     | Ficam em itálico cinza com ícone roxo — não mandam nada visível ao contato (PIX, agente de IA, webhook, etiqueta, kanban, salvar dado…), diferenciadas visualmente do conteúdo enviado                                               |
| **Miniatura grande de mídia** | Quando a etapa tem `MediaField`: imagem em destaque (capa), vídeo com mini player (clique liga o play real) ou ícone de documento com o nome do arquivo                                                                              |
| **Rodapé de condições**       | Uma linha por condição “Se”, na mesma ordem configurada no card — cada linha nasce da sua **própria âncora** de saída, então as linhas do canvas não se sobrepõem mais mesmo com várias condições apontando para destinos diferentes |
| **Estatísticas por etapa**    | Mini-linha com 3 chips coloridos (enviadas / responderam / sem resposta) — cada chip só aparece se tiver valor > 0                                                                                                                   |

> Limitação conhecida: se **duas condições da mesma etapa** apontam para o **mesmo destino**, o canvas ainda desenha só uma linha (a âncora usada é a da primeira condição que casa) — isso é uma limitação do modelo de dados salvo, não afeta a execução real do fluxo.

\[\[FOTO]]

#### Posições salvas

Mova qualquer card (inclusive o **Início**) livremente pelo canvas — a posição é salva e restaurada ao reabrir o fluxo, igual aos demais nós.

#### Barra de ferramentas

| Botão                          | Função                                                                                              |
| ------------------------------ | --------------------------------------------------------------------------------------------------- |
| **Salvar**                     | Grava o fluxo (nós, linhas, interações e condições)                                                 |
| **Organizar**                  | Reorganiza automaticamente os cards no canvas                                                       |
| **Testar Fluxo**               | Abre o simulador (ver seção dedicada)                                                               |
| **?**                          | Abre o guia com todas as interações e condições disponíveis, com ícone/título/descrição de cada uma |
| Atualizar (⟳) das estatísticas | Recarrega os contadores enviadas/responderam/sem resposta de todas as etapas                        |
| **Configurações**              | Ajustes gerais do fluxo (ver card “Início”)                                                         |

\[\[FOTO]]

***

### Adicionar uma etapa e suas interações

Clique em **+** para criar um card novo, depois clique nele para abrir o formulário da etapa (`node_form`). No topo do modal:

* Botão **?** (canto do cabeçalho) abre o guia com todas as interações e condições.
* Toolbar de ícones: cada ícone adiciona **uma interação** ao card. Uma etapa pode ter **várias interações** em sequência (ex.: mensagem + botões + etiqueta).

#### Catálogo de interações

| Interação                       | O que faz                                                                                                                                                                                                         |
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Enviar Mensagem**             | Texto simples, com variáveis (`{{name}}`, `{{protocol}}` etc.) e emojis                                                                                                                                           |
| **Enviar Mídia**                | Imagem, vídeo, áudio ou documento — com **legenda**, **gravação de áudio/vídeo pelo navegador**, botão **Galeria** (reaproveita arquivo já no storage do tenant), **nota de voz (PTT)** e **nota de vídeo (PTV)** |
| **Enviar Botão**                | Até 3 botões de resposta rápida; cada botão pode levar a uma condição diferente                                                                                                                                   |
| **Enviar Lista**                | Menu de opções em lista (WhatsApp), útil para muitas alternativas                                                                                                                                                 |
| **Webhook**                     | Chama URL externa (GET/POST); pode aguardar a resposta antes de continuar                                                                                                                                         |
| **Delay**                       | Pausa o fluxo por um tempo configurável                                                                                                                                                                           |
| **Etiqueta (Tag)**              | Adiciona/remove etiqueta do contato                                                                                                                                                                               |
| **Kanban**                      | Move o ticket para uma coluna do Kanban                                                                                                                                                                           |
| **Salvar Dado**                 | Grava a última resposta do contato num campo/variável                                                                                                                                                             |
| **Capturar Variável**           | Captura a resposta numa variável nomeada, reutilizável em mensagens seguintes                                                                                                                                     |
| **Agendamento (5 etapas)**      | Listar Serviços → Listar Profissionais → Listar Datas → Listar Horários → Criar Agendamento — motor modular de agendamento (mesmo motor único usado no painel/chatbot/Typebot)                                    |
| **Consultar Agendamentos**      | Mostra ao contato os agendamentos em aberto/futuros (até 5: data/hora, serviço, profissional e status), com mensagem configurável para quando não houver nenhum                                                   |
| **Agente de IA**                | Delega a etapa a um assistente de IA cadastrado (Modo Agente em Configurações → Abacus), que responde com base no prompt/base de conhecimento                                                                     |
| **Follow-up**                   | Envia mensagem automática se o contato não responder dentro de um tempo definido                                                                                                                                  |
| **Notificar Atendente**         | Ação 8 do fluxo de ações — aviso interno (sino + push) para um usuário ou grupo, com texto e título em variáveis                                                                                                  |
| **Localização**                 | Envia uma localização (latitude/longitude) fixa                                                                                                                                                                   |
| **Contato (vCard)**             | Envia um cartão de contato com nome e telefone                                                                                                                                                                    |
| **PIX**                         | Nativo do WhatsApp (Baileys/WhatsMeow/DigiAPI) **ou** via HubPay (todos os canais) — toggle **Tipo de PIX** no card                                                                                               |
| **Formulário (WhatsApp Flows)** | Envia um formulário nativo do WhatsApp para coletar dados estruturados                                                                                                                                            |
| **Carrossel**                   | Manual (cartões montados na hora, imagem por URL ou galeria) **ou** carrossel cadastrado em Mensagens Rápidas → Carrossel                                                                                         |
| **SMS**                         | Envia SMS pelo provedor configurado no sistema (ex. Comtele); sem provedor configurado, a etapa é pulada sem travar o fluxo                                                                                       |
| **Template Meta (WABA)**        | Envia um template já aprovado da conexão WABA oficial com as variáveis preenchidas                                                                                                                                |

> A ação **Notificar Atendente** (dentro do menu “Ação” de uma condição) não é terminal — o fluxo continua avançando normalmente depois de disparar o aviso.

\[\[FOTO]]

***

### Matriz de canais e fallbacks

Interações “ricas” nem sempre existem nativamente em todos os canais. Quando o canal não suporta o recurso nativo, o sistema aplica um **fallback** automático (texto ou variação equivalente) em vez de falhar a etapa:

| Interação                         | Baileys / WhatsMeow / DigiAPI                                                            | WABA Oficial                                                                |
| --------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| **Localização**                   | Nativo (mensagem de localização real)                                                    | Fallback: texto com link do Google Maps                                     |
| **Contato (vCard)**               | Nativo (cartão de contato real)                                                          | Fallback: texto com os dados do contato                                     |
| **PIX nativo**                    | Nativo (Baileys `payment_info`; WhatsMeow enfileirado; DigiAPI via botão “copiar”)       | Sem suporte nativo — use PIX via **HubPay**, que funciona em qualquer canal |
| **Formulário (Flow)**             | Nativo (WhatsApp Flows)                                                                  | Sem esse caminho no motor hoje — cai no fallback de texto configurável      |
| **Carrossel**                     | Nativo (`nativeCarousel`, mesmo shape do atendimento manual/campanha)                    | Fallback: sequência de mídia + texto por cartão                             |
| **Nota de voz (PTT)**             | Suportado (Baileys/WhatsMeow); DigiAPI segue a flag `asVoiceNote`                        | Meta não distingui nota de voz de áudio comum — sempre “áudio”              |
| **Nota de vídeo (PTV)**           | Suportado (Baileys `ptv`; WhatsMeow via rota própria); DigiAPI sem suporte (vídeo comum) | Meta não distingue PTV — sempre vídeo comum                                 |
| **Legenda em mídia**              | Suportada em todos os canais nativos                                                     | Suportada                                                                   |
| **Template Meta**                 | Não se aplica (recurso é da API oficial)                                                 | Nativo — envio direto via template aprovado                                 |
| **Gravar áudio/vídeo no builder** | Grava no navegador (mesmo caminho do upload manual), independe do canal de saída         | —                                                                           |

> PIX HubPay é **agnóstico de canal** — funciona em qualquer canal, desde que o HubPay esteja configurado no tenant; sem HubPay habilitado, a etapa loga e é pulada (com fallback de texto opcional).

\[\[FOTO]]

***

### Condições (“Se”)

Cada card pode ter uma ou mais condições que decidem o próximo passo. Todas comparam a **resposta do contato** (ou o contexto do ticket) contra o que você configurar:

| Condição                   | Verifica                                                                                                       |
| -------------------------- | -------------------------------------------------------------------------------------------------------------- |
| **Qualquer resposta**      | Segue assim que o contato responder qualquer coisa, sem checar conteúdo                                        |
| **Respostas**              | Compara a resposta com uma lista de valores esperados, usando o **tipo de comparação** escolhido (veja abaixo) |
| **Continuar sem resposta** | Avança automaticamente sem esperar resposta do contato                                                         |
| **Horário atual**          | Decide pelo dia da semana e faixa de horário (ex.: dentro/fora do expediente)                                  |
| **Tipo de mídia recebida** | Áudio, imagem, vídeo, documento, localização ou qualquer mídia                                                 |
| **Etiqueta do contato**    | Contato possui (ou não possui) determinadas etiquetas                                                          |
| **Origem de campanha**     | O ticket chegou por uma campanha WABA específica (ou qualquer campanha)                                        |

#### Tipos de comparação (condição “Respostas”)

| Tipo            | Regra                                                |
| --------------- | ---------------------------------------------------- |
| **Igual a**     | Texto deve ser exatamente igual                      |
| **Contém**      | Texto deve conter a palavra/frase                    |
| **Começa com**  | Texto deve começar com a palavra/frase               |
| **Termina com** | Texto deve terminar com a palavra/frase              |
| **Regex**       | Expressão regular personalizada                      |
| **Maior que**   | Resposta numérica maior que o valor configurado      |
| **Menor que**   | Resposta numérica menor que o valor configurado      |
| **Entre**       | Resposta numérica dentro de um intervalo (mín./máx.) |

**Acentos e maiúsculas não importam:** a comparação de texto normaliza acentuação (NFD, remove marcas diacríticas) antes de comparar — “nao”, “não” e “NÃO” casam igual. Comparações numéricas aceitam vírgula decimal (padrão BR).

\[\[FOTO]]

***

### Simulador “Testar Fluxo”

Botão **Testar Fluxo** na barra do canvas abre um painel lateral que reproduz a conversa **sem enviar nada de verdade** — 100% no navegador, sem chamadas de rede, testando o fluxo **como está no canvas agora** (mesmo sem salvar).

#### Como usar

1. O simulador começa no nó **Início** e renderiza bolhas de chat para mensagem, mídia, botões (clicáveis), lista (clicável), localização, contato, carrossel e formulário.
2. Interações de sistema (PIX, agente de IA, webhook, etiqueta, kanban, salvar dado, capturar variável, follow-up, delay, agendamento, subfluxo) aparecem como card cinza “Executaria: …”.
3. Digite uma resposta de texto para testar condições de **Respostas** (mesma normalização de acentos do motor real) ou clique num botão/item de lista para testar essas condições.
4. Toggles de contexto simulado no topo do painel: **fora do expediente** (testa condição Horário), **contato com etiqueta X** (busca as etiquetas reais do tenant), **mídia recebida: \[tipo]** (testa condição Mídia).

#### Limitações do simulador

| Situação                                  | Comportamento no simulador                                                                                                                         |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Continuar sem resposta**                | Só dispara sozinho quando a etapa não tem nenhuma interação — no fluxo real depende de timeout assíncrono, que o simulador (síncrono) não reproduz |
| **Origem de campanha**                    | Sem campanha real disponível — só casa condições sem campanha específica configurada (“qualquer campanha”)                                         |
| **Ir para outro fluxo / chamar subfluxo** | Mostra apenas “Navegaria para outro fluxo (id: X)”, não carrega de fato o fluxo de destino                                                         |
| **Nomes de agente/kanban/tag**            | Quando a interação nunca guardou o nome (só o id), o simulador mostra o id cru — mesma limitação dos cards do canvas                               |

\[\[FOTO]]

***

### Estatísticas por etapa

Cada card mostra, quando há dados, 3 contadores:

| Contador         | Quando incrementa                                                                                     |
| ---------------- | ----------------------------------------------------------------------------------------------------- |
| **Enviadas**     | Toda vez que as interações da etapa são de fato disparadas ao contato                                 |
| **Responderam**  | A condição que casou não é “sem resposta” nem “horário” (ou seja, o contato realmente respondeu algo) |
| **Sem resposta** | A condição que casou foi a de “continuar sem resposta” (timeout)                                      |

Os contadores acumulam desde sempre (sem período/expiração) e são recarregados ao abrir o builder ou pelo botão de atualizar na toolbar. Servem para identificar rapidamente **onde o fluxo perde gente** — etapas com muito “sem resposta” geralmente precisam de mensagem mais clara, atalho de repetição ou timeout mais curto.

\[\[FOTO]]

***

### Regras importantes

* O nó **Início** pode ser movido e tem posição salva como qualquer card, mas continua protegido contra exclusão/edição de tipo.
* Interações “ricas” sem suporte nativo no canal do ticket caem em fallback automático (ver matriz acima) — o fluxo nunca trava por falta de suporte do canal.
* Mídia gravada (áudio/vídeo) no builder nasce com **nota de voz/PTV ligada por padrão**; ajuste o toggle correspondente se quiser enviar como arquivo comum.
* PIX nativo depende do canal do ticket; PIX via HubPay funciona em qualquer canal, mas exige HubPay configurado no tenant.
* O agente de IA usado na interação **Agente de IA** precisa estar marcado como **Modo Agente** em Configurações → Abacus — se o select mostrar poucos agentes, use o botão de atualizar (o carregamento agora percorre todas as páginas de configs do tenant, não só a primeira).

***

### Dicas de uso

* Use o botão **?** sempre que uma interação nova parecer confusa — o guia lista todas com exemplo de uso.
* Monte fluxos curtos por card; prefira várias etapas pequenas a um card com muitas interações.
* Sempre teste no **simulador** antes de publicar mudanças em fluxos com muitos usuários ativos.
* Acompanhe as **estatísticas por etapa** semanalmente — etapas com “sem resposta” alto indicam texto confuso ou timeout curto demais.
* Prefira **condição de mídia**/**etiqueta** a texto livre quando a decisão do fluxo depender de algo objetivo (evita falha de comparação por digitação).
* Para campanhas rastreáveis, combine **origem de campanha** (condição CAMPAIGN) com fluxos dedicados por campanha.
