Aprenda a criar fluxos incríveis no X1Bot 🚀
Bem-vindo à documentação oficial da plataforma mais versátil para automação de WhatsApp. Masterize os nodes, entenda os gatilhos e construa atendimentos imbatíveis.
Início Rápido
Configure sua primeira sessão e monte seu fluxo em 5 minutos.
Nodes do Fluxo
Entenda como funcionam as IAs, envios de mídia, aguardos e condições.
Tutoriais Reais
Passo a passo para criar funis de venda, Lançamentos em Grupo e mais.
Variáveis
Data, hora, sistema, respostas do lead e valores aninhados.
Inbox (CRM)
Busca, filtros, envio de mídia, respostas rápidas e gerenciamento de conversas.
Guia de Início Rápido
1Conectar seu WhatsApp
O X1Bot requer uma sessão de WhatsApp conectada para operar. Navegue até o menu de Sessões no painel lateral esquerdo, clique em "Nova Sessão" e faça o escaneamento do QR Code com o seu celular pelo WhatsApp Web.
Screenshot: QR Code Scan (Emulação)
2Criar seu primeiro fluxo
No menu Fluxos, clique em "Novo Fluxo". Você verá o Canvas principal. Todo fluxo começa com um "Gatilho" (Trigger). Arraste um "Trigger WhatsApp", defina uma palavra-chave como "Olá", e conecte ele a um node de "Enviar Mensagem" puxando a linha do ponto à direita.
3Uso de Variáveis Mágicas
Personalize as mensagens usando as chaves duplas {{ }}. O sistema substitui isso por dados reais no momento do envio.
| Variável Mágica | Descrição do que injeta | Exemplo Visível |
|---|---|---|
| {{contact.phone}} | O telefone completo do lead | 5511999999999 |
| {{contact.name}} | Nome do contato (se salvo) | Júlia Almeida |
| {{variables.XPTO}} | Qualquer variável criada no node Definir Variável ou salva de um Wait | "Sim", "150.00" |
Gatilhos (Triggers)
Triggers são a porta de entrada. Um fluxo sempre deve começar por pelo menos um Trigger ativo.
📱 Trigger WhatsApp
GatilhoO que faz
Inicia o fluxo quando alguém envia mensagem no WhatsApp para a sessão configurada.
Configurações
| Campo | Descrição |
|---|---|
| Sessão | Qual número do WhatsApp vai ouvir |
| Palavra-chave | Opcional — só dispara se mensagem contiver |
| Tipo de msg | Texto, imagem, qualquer |
💡 Dicas de uso
- Deixe sem palavra-chave para responder qualquer mensagem.
- Use palavra-chave para criar menus (ex: "1", "comprar").
- Combine com node Condição (If/Else) para fluxos complexos.
🖱️ Trigger Manual
GatilhoO que faz
Permite disparar o fluxo manualmente via painel para um contato ou grupo específico, sem precisar de mensagem inicial.
Configurações
| Campo | Descrição |
|---|---|
| Destino | Contato individual ou grupo |
| Número | Telefone do destinatário |
| Sessão | Qual WhatsApp usar para o envio ativo |
| Variáveis | Dados customizados para o fluxo injetar |
💡 Dicas de uso
- Ideal para disparos pontuais, testes A/B internos e reinício de funis quebrados.
- Use variáveis dinâmicas ao disparar para preencher `{{variables.X}}`.
⏰ Trigger Agendamento
GatilhoO que faz
Executa o fluxo automaticamente e em background em horários configurados — diário, semanal ou em data/hora específica.
Modos Disponíveis
- 📅 Data e hora específica (Disparo único)
- 🕐 Hora fixa diária (Disparo repetitivo, com filtro de dias da semana)
- ⏱️ Intervalo regular (Executar a cada X horas/minutos)
📝 Exemplo Prático
Enviar um resumo diário para você mesmo ou para sua lista VIP todos os dias às 09:00.
Ações do Fluxo
Com os triggers definidos, utilize os nodes de Ação para construir a inteligência e o envio do fluxo.
💬 Enviar Mensagem
AçãoO que faz
Envia uma mensagem de texto rica para o contato ou grupo que originou o engajamento no fluxo.
Configurações
| Campo | Descrição | Exemplo |
|---|---|---|
| Mensagem | Texto a enviar | "Olá {{contact.name}}!" |
| Simular di... | Mostra "digitando..." antes | Ativado |
| Duração | Segundos digitando no celular | 3 |
💡 Dicas de uso
- Use
{{contact.name}}para chamar pelo nome. - Ative "simular digitando" (pelo menos 2s a cada 3 linhas) para parecer mais humano.
- Quebre textos gigantes em vários nodes conectados em sequência para leitura mais leve.
🖼️ Enviar Mídia
AçãoO que faz
Envia um arquivo anexado (com ou sem legenda) direto no chat.
Tipos Suportados
- 🖼️ Imagem: JPG, PNG, WEBP (máx 5MB)
- 🎵 Áudio: MP3, OGG (máx 10MB)
- 🎤 Áudio de voz (PTT): O famoso "áudio gravado na hora"
- 🎬 Vídeo: MP4 (máx 50MB)
- 📄 Documento: PDF, DOCX (máx 20MB)
Origem da Mídia
- URL externa (https://seusite.com/video.mp4)
- Upload direto via painel da plataforma
- Extraído de uma variável (ex:
{{variables.imageUrl}})
⏳ Aguardar (Wait)
AçãoO que faz
Intencionalmente pausa e segura o fluxo. Essencial para criar delays humanizados, aguardar o cliente pensar ou suspender a automação até o dia seguinte.
Modos Diversos
- Tempo fixo: Segundos, minutos ou horas fixas.
- Aguardar Resposta: O fluxo para DEFINITIVAMENTE ali até que o usuário responda. O texto enviado por ele será sempre salvo em
{{variables.userResponse}}ou numa variável de sua escolha. - Até data específica: Para envios baseados num calendário futuro.
O "Aguardar Resposta" é a principal ferramenta para receber dados e enviar para a IA. Toda resposta que rompe um estágio de Wait fica acessível para o próximo node através da variável referenciada.
⚖️ Condição (If/Else)
AçãoO que faz
Bifurca o fluxo de automação. Cria um caminho para SIM (quando a condição é atingida) e um caminho para NÃO (quando falha).
Operadores Base
- igual a / diferente de
- contém / não contém
- maior que / menor que (Para valores numéricos)
- está vazio / não está vazio
// Exemplo de roteamento
SE {{variables.pagamento}} == "aprovado"
→ Caminho SIM: Node Enviar Acesso
→ Caminho NÃO: Node Aguardar 2h reengajamento
🤖 Agente IA
Ação ConversacionalO que faz
Agente conversacional com memória de histórico. Recebe a mensagem do lead, responde com base no seu prompt personalizado e — opcionalmente — detecta intenções para rotear o fluxo automaticamente. Tudo em uma única chamada de IA.
⚙️ Como funciona por dentro
- Lê a última mensagem do lead (
triggerMessage) - Adiciona ao histórico da conversa (mantido na execução ativa)
- Monta o prompt: seu texto + instruções de intenção injetadas automaticamente
- Chama a IA — recebe
{"response": "...", "intent": "..."} - Envia
responseao lead (com typing simulado) - Roteia pelo intent detectado, ou segue pela saída continuar
Você nunca escreve JSON no prompt — o sistema injeta a instrução técnica automaticamente.
📋 Configurações
| Campo | O que é | Padrão |
|---|---|---|
| Prompt do Agente | Personalidade, regras e conhecimento do atendente virtual. Suporta {{variables.x}} | — |
| Saídas de Intenção | Condições em linguagem natural para desviar o fluxo (ex: "quando quiser pagar") | Nenhuma |
| Modelo de IA | Modelo OpenRouter a usar | gemini-2.5-flash-lite |
| Simular digitando | Mostra "digitando..." antes de enviar | Ativado |
| Duração do typing (s) | Segundos de "digitando". 0 = automático (proporcional ao tamanho da resposta, máx. 8s) | Auto |
| Delay antes de enviar | Pausa em ms antes de qualquer ação (útil para parecer mais humano) | 0 |
| Máx. mensagens no histórico | Quantas mensagens da conversa a IA "lembra" | 10 |
| Salvar resposta como | Nome da variável onde a resposta fica disponível | agentResponse |
🔀 Saídas do node
continuar (sempre presente)
Nenhuma intenção detectada — o agente apenas respondeu e o fluxo segue normalmente (normalmente vai para um WAIT_REPLY para fazer o loop)
[sua intenção] (opcional, N saídas)
Ativada quando a IA detecta a intenção com segurança. Você nomeia e descreve cada uma em linguagem natural
🔁 Padrão de loop conversacional
↓
AGENTE IA
├─ continuar → WAIT_REPLY → (volta ao AGENTE IA)
├─ quer_pagar → SEND_PIX → ...
└─ agendou_dia → RMKT (follow-up) → ...
O WAIT_REPLY mantém a execução viva entre mensagens — o histórico da conversa é preservado automaticamente enquanto a execução não encerrar.
📚 Exemplos de uso real
Você é a Ana, atendente da Clínica Bella. Responda dúvidas sobre procedimentos (botox, harmonização, limpeza de pele) de forma simpática e profissional. Não mencione preços — diga que os valores dependem de avaliação e que temos condições especiais. Nunca invente procedimentos ou resultados.
Saídas de intenção configuradas:
quer_agendar → "quando o cliente pedir para agendar, perguntar horários disponíveis ou querer marcar uma avaliação"
quer_preco → "quando insistir em saber o preço, pedir tabela ou orçamento"
→ quer_agendar vai para SEND_BUTTONS com opções de horário. quer_preco vai para mensagem com link do cardápio de preços.
Você é o suporte do curso "{{variables.nomeCurso}}". O lead acabou de assistir ao webinário e pode ter dúvidas sobre o conteúdo, o suporte, a garantia ou as formas de pagamento. Seja objetivo e motivador. A garantia é de 7 dias. Parcelamos em até 12x. O acesso é vitalício.
Saídas de intenção configuradas:
quer_comprar → "quando pedir o link, querer pagar, perguntar como comprar ou demonstrar intenção de compra"
sem_dinheiro_agora → "quando disser que não tem dinheiro agora, que vai pagar depois, que vai aguardar ou mencionar uma data específica"
nao_tem_interesse → "quando disser que não quer, não tem interesse, não precisa ou pedir para não ser contatado"
→ quer_comprar → SEND_PIX ou link de pagamento. sem_dinheiro_agora → RMKT com follow-up em 2 dias. nao_tem_interesse → END.
Você é o suporte da loja "{{variables.nomeLoja}}". Ajude com dúvidas sobre pedidos, prazo de entrega (5-10 dias úteis), trocas e devoluções (prazo de 7 dias após recebimento). Se o cliente estiver com raiva ou o problema for complexo, reconheça o problema e ofereça transferir para o time humano.
Saídas de intenção configuradas:
escalar_humano → "quando o cliente pedir para falar com humano, atendente ou gerente, ou quando o problema for muito específico ou o cliente estiver muito insatisfeito"
problema_resolvido → "quando o cliente agradecer, confirmar que o problema foi resolvido ou se despedir satisfeito"
→ escalar_humano → NOTIFICACAO para o dono + END. problema_resolvido → mensagem de encerramento + END.
Você é o Léo, consultor de uma imobiliária. Faça perguntas naturais para entender o perfil do lead: tipo de imóvel (casa/apto), localização desejada, faixa de valor e se é para morar ou investir. Seja descontraído, não pareça um formulário. Após entender o perfil, salve as respostas e encerre dizendo que um especialista vai entrar em contato.
→ Sem saídas de intenção — o agente apenas conversa e coleta dados. Use EDIT_FIELDS depois para salvar o perfil e END para encerrar.
💡 Boas práticas de prompt
- Dê um nome e personalidade — "Você é a Ana..." funciona melhor que "Responda como atendente..."
- Defina o que NÃO fazer — "Nunca mencione concorrentes", "Não invente informações"
- Descreva intenções com exemplos — quanto mais específica a descrição da saída, mais precisa é a detecção
- Use variáveis no prompt —
{{contact.name}}personaliza a experiência por lead - Histórico padrão de 10 mensagens é suficiente para a maioria dos casos (≈ 5 trocas). Aumente apenas se precisar de contexto muito longo
⚠️ Atenção
O agente responde com base no que foi configurado no prompt. Não conecte este node a fluxos de grupos — ele foi projetado para conversas individuais. Certifique-se de que a chave OpenRouter está configurada em Configurações → APIs.
🎲 Randomizador
Ação de RoteamentoO que faz
Distribui contatos (leads) de forma randômica ou ponderada entre diferentes caminhos de saída do nó. Essencial para A/B Testing e roteamento de atendentes.
📝 Casos de uso ideais:
- Teste A/B de cópias: Saída A (50%) com texto longo, Saída B (50%) com texto curto.
- Roleta de Vendedores: Mandar fluxos alternados para ramificações diferentes de atendentes do comercial.
- Sorteios interativos dentro de engajamento do funil.
Nodes Específicos para Grupos
Ferramentas de alta conversão criadas especificamente para gerir engajamento em massa e lançamentos de grupos de WhatsApp.
📢 Mencionar Todos
Node de GrupoMarca secretamente todos os participantes do grupo para forçar a notificação chegar (bypass de grupos silenciados). Possui sistema de Cooldown (Resfriamento) embutido para evitar banimentos do WhatsApp por spam de marcação em curto período de tempo.
🔥 Múltiplas Mensagens de Aquecimento
LançamentosGera um schedule automático de mensagens baseadas no tempo de vida (ativação) de um grupo específico. Por exemplo:
- Enviar msg A de Boas Vindas no Dia 0 (Criação)
- Enviar msg B no Dia 1 (Gerando Autoridade)
- Enviar msg C no Dia 2 (Antecipação)
Ele calcula a diferença de dias automaticamente usando os metadados do grupo atrelado.
Variáveis e Templates
Em qualquer campo de texto use {{variável}} — o sistema substitui pelo valor real na hora do envio. Timezone: São Paulo (America/Sao_Paulo).
📅 Data e Hora
Disponíveis em qualquer mensagem — sem configuração, funcionam automaticamente.
| Variável | Resultado | Descrição |
|---|---|---|
| {{hoje}} | 23/03/2026 | Data atual (DD/MM/AAAA) |
| {{data}} | 23/03/2026 | Alias de {{hoje}} |
| {{hora}} | 14:30 | Hora atual (HH:MM) |
| {{agora}} | 23/03/2026 14:30 | Data + hora atual |
| {{amanha}} | 24/03/2026 | Data de amanhã |
| {{semana}} | Seg, 30/03/2026 | Data daqui 7 dias com dia abreviado |
| {{mes}} | Março | Nome do mês por extenso |
| {{ano}} | 2026 | Ano atual |
| {{dia_semana}} | Segunda-feira | Nome do dia da semana por extenso |
Exemplos práticos:
⚠️ Válido até {{hoje}}
🎯 Garanta sua vaga antes de encerrar!🔥 Preço especial válido somente até amanhã ({{amanha}}) às 23h59.✅ Agendamento confirmado!
📅 Data: {{hoje}}
⏰ Horário: {{hora}}⚙️ Variáveis do Sistema
Injetadas automaticamente pelo motor de execução em todas as execuções.
| Variável | Descrição |
|---|---|
| {{_contactPhone}} | Telefone do contato (JID: 5511999999999@s.whatsapp.net) |
| {{_sessionId}} | ID da sessão WhatsApp que recebeu a mensagem |
| {{_tenantId}} | ID do tenant (conta) |
| {{triggerMessage}} | Texto da mensagem que acionou o fluxo |
| {{etapa}} | Etapa atual do contato no funil (node MARK_STAGE) |
| {{contactStage}} | Alias de {{etapa}} |
| {{contactTags}} | Tags do contato (array) |
💬 Resposta do Lead
Definidas automaticamente quando o lead responde em nodes WAIT_REPLY.
| Variável | Descrição |
|---|---|
| {{respostaHook}} | Texto da última resposta do lead |
| {{nome}} | Preenchida se você capturou o nome via WAIT_REPLY |
🏷️ Definidas pelo Usuário
Criadas por nodes específicos com o campo "Salvar como" (saveAs).
WAIT_REPLY
Salva a resposta do lead em uma variável que você escolhe.
Config: Salvar resposta como: nome
Uso: Prazer, {{nome}}! Como posso te ajudar hoje?
HTTP Request
Salva o retorno da API em uma variável.
Config: Salvar resposta como: pedido
Uso: Pedido {{pedido.id}} está: {{pedido.status}}
CODE (JavaScript)
O resultado do código fica em codeOutput.
Config: —
Uso: Resultado: {{codeOutput}}
PIX
Gera variáveis automáticas de cobrança.
Config: —
Uso: {{_pixConfig}} / {{_pixExpiresAt}}
🔀 Em Condições e Switch
Nos nodes CONDITION e SWITCH, use expressões JavaScript com variables.nome (sem chaves duplas).
// Verificar resposta variables.respostaHook === 'sim' // Verificar etapa variables.etapa === 'qualificado' // Verificar valor numérico Number(variables.quantidade) > 5 // Combinar com horário comercial variables.respostaHook === 'sim' && isWithinBusinessHours(9, 0, 18, 0, [1,2,3,4,5])
🔗 Valores Aninhados
Quando a variável é um objeto (ex: retorno de API), use ponto para acessar campos internos.
JSON retornado pela API:
{
"id": "123",
"status": "aprovado",
"cliente": {
"nome": "João"
}
}Uso no texto da mensagem:
Pedido {{pedido.id}}
Status: {{pedido.status}}
Cliente: {{pedido.cliente.nome}}💡 Boas Práticas
- Sempre use
{{variável}}com chaves duplas — simples não funciona. - Nomes são case-sensitive:
{{nome}}≠{{Nome}}. - Se a variável não existir, o texto permanece como
{{variavel}}— teste antes de ativar. - Variáveis de data não precisam de configuração — funcionam em qualquer mensagem.
- Em condições, use
variables.nomesem chaves.
Inbox (CRM de Conversas)
O Inbox centraliza todas as conversas recebidas via WhatsApp com ferramentas para gerenciar, responder e automatizar o atendimento.
🔍 Busca e Filtros
A busca acontece no banco de dados — não se limita às conversas carregadas na tela. Atualiza automaticamente após 400ms.
| Filtro | Opções |
|---|---|
| Sessão | Filtra por conta WhatsApp específica |
| Status | Aberto / Pendente / Resolvido / Bot |
| Tipo | Individual / Grupo |
📋 Lista de Conversas
Paginação
Carrega 30 conversas por vez, ordenadas pela mensagem mais recente. Clique em "Carregar mais conversas" no final da lista.
Tempo Real
Nova mensagem: conversa sobe para o topo automaticamente. Não recarrega a lista inteira — só atualiza a conversa afetada.
Indicadores em cada conversa:
- Avatar do contato (ou inicial do nome)
- Última mensagem e horário
- Badge de não lidas (verde) — some ao abrir
- Status: Aberto, Pendente, Resolvido, Bot
- Nome da sessão (quando há múltiplas contas)
💬 Enviando Mensagens
Texto
Enter → Envia | Shift + Enter → Quebra de linha
📎 Envio de Mídia
| Tipo | Formatos | Limite |
|---|---|---|
| Imagem | JPG, PNG, WebP | 5 MB |
| Áudio | MP3, OGG, AAC, WAV | 10 MB |
| Vídeo | MP4 | 50 MB |
| Documento | PDF, DOC, DOCX | 20 MB |
💬 Respostas Rápidas
Atalhos de texto pré-definidos para mensagens frequentes.
- Clique em 💬 → selecione a resposta → texto inserido no campo
- Para criar: 💬 → + → preencha Título e Texto → Salvar
- Para excluir: hover sobre a resposta → ícone 🗑️
- Salvas localmente no navegador (localStorage)
⚙️ Gerenciamento da Conversa
| Status | Descrição | Cor |
|---|---|---|
| Aberto | Conversa ativa, aguardando atendimento | ● Verde |
| Pendente | Em espera de informação ou ação | ● Amarelo |
| Resolvido | Atendimento concluído | ● Cinza |
| Bot | Automação em andamento | ● Roxo |
🟥 Parar Bot
Quando automação está rodando, aparece botão "Parar Bot" em vermelho no header. Interrompe imediatamente e volta para status Aberto.
⚡ Disparar Fluxo
Clique em "Fluxo" no header para disparar manualmente um workflow. Se houver automação rodando, ela é cancelada antes.
👤 Painel do Contato
Informações exibidas:
- Sessão — qual conta WhatsApp recebeu a mensagem
- Tipo — Individual ou Grupo
- ID Chat — JID completo do contato
- Etiquetas — labels do WhatsApp (somente leitura)
- Automação Ativa — nome do fluxo em andamento
✏️ Editar Nome
Hover no nome → clique em ✏️ → digite → Enter ou Salvar. Atualizado em toda a interface imediatamente.
🔄 Sincronizar Foto
Clique no ícone 🔄 sobre o avatar para buscar a foto de perfil do WhatsApp.
| Ação | Como fazer |
|---|---|
| Enviar mensagem | Enter |
| Quebrar linha | Shift + Enter |
| Inserir resposta rápida | Clique em 💬 → selecione o template |
| Enviar arquivo | Clique em 📎 → selecione o arquivo |
| Editar nome do contato | Hover no nome → clique em ✏️ |
| Parar automação | Botão vermelho "Parar Bot" no header |
| Carregar mais conversas | Botão no final da lista |
| Carregar mensagens antigas | Botão "Carregar mais" no topo do chat |
🔮 Módulo Tarot
Conjunto de nodes especializados para automação completa de consultas de tarot via WhatsApp — da venda ao oráculo com cartas sortidas por IA.
🗺️ Visão Geral
Módulo CompletoO módulo Tarot usa 5 nodes especializados. O fluxo tem duas etapas principais: pré-pagamento (venda + validação do PIX) e pós-pagamento (loop de consultas com cartas). Ambas são automáticas — o bot trata tudo sozinho.
TAROT_SESSION
Carrega sessão do cliente
TAROT_VENDAS
Apresenta pacotes + link MP
TAROT_OCR
Valida comprovante PIX por IA
TAROT_VALIDADOR
Valida e transcreve pergunta
TAROT_ORÁCULO
Sorteia cartas + chama LLM
💳 Fluxo Pré-Pagamento
Vendas + PIXFluxo completo desde o primeiro contato do cliente até a liberação do acesso às consultas. O bot detecta automaticamente o pacote escolhido, gera o link do Mercado Pago e valida o comprovante PIX via IA.
TRIGGER "quero consulta de tarot"
↓
TAROT_SESSION ← carrega/cria sessão
↓
CONDITION tarotSession.pago === true
└─ NÃO
↓
TAROT_VENDAS ← detecta pacote na msg ou envia menu de preços
↓
WAIT_REPLY ← ← ← ← ← ← ← ← ← ← ← ←
↓ ↑
CONDITION triggerPayload.type === "media" │
│ │
├─ NÃO (cliente enviou texto/escolheu pacote) │
│ TAROT_VENDAS ← reapresenta menu ou gera novo link │
│ → volta ao WAIT_REPLY ──────────────────────────┘
│
└─ SIM (cliente enviou imagem/PDF)
↓
TAROT_OCR_PAGAMENTO ← lê valor, data e recebedor via IA
│
├─ [valido]
│ SEND_MESSAGE "✅ Pagamento confirmado! Pode enviar sua pergunta 🔮"
│ → segue para o Fluxo Pós-Pagamento ↓
│
├─ [invalido] (data antiga, valor baixo, recebedor errado)
│ SEND_MESSAGE "❌ {{tarotOcrResult.motivo}}"
│ WAIT_REPLY ← aguarda novo comprovante
│ → TAROT_OCR_PAGAMENTO (tenta de novo)
│
└─ [wrong_type] (não era imagem — era áudio, texto etc.)
SEND_MESSAGE "Por favor, envie uma foto do comprovante PIX 📸"
WAIT_REPLY ← aguarda imagem
→ TAROT_OCR_PAGAMENTO (tenta de novo)
✅ Detecção automática de pacote
Se o cliente mandou "quero 3 perguntas" direto no trigger, o TAROT_VENDAS já detecta e gera o link sem precisar de uma mensagem extra.
🔁 Loop de tentativas
Tanto invalido quanto wrong_type voltam para o OCR após um WAIT_REPLY — o cliente pode tentar de novo sem reiniciar o fluxo.
📤 Variável do motivo
Use {{tarotOcrResult.motivo}} na mensagem de rejeição para explicar ao cliente o que houve com o comprovante.
🔮 Fluxo Pós-Pagamento
Loop de ConsultasCom o acesso liberado, o cliente entra no loop de consultas. Pode enviar texto ou áudio — o Validador transcreve e analisa. O loop repete enquanto houver créditos.
/* Ponto de entrada após pagamento confirmado */
SEND_MESSAGE "Ótimo! Pode enviar sua pergunta 🔮"
↓
WAIT_REPLY ← ← ← ← ← ← ← ← ← ← ← ← ← ←
↓ (cliente responde — texto ou áudio) ↑
TAROT_VALIDADOR ← transcreve áudio (Whisper) + valida │
↓ (válida) │
TAROT_ORÁCULO ← sorteia cartas + chama LLM │
↓ │
LOOP arraySource: tarotMensagens | itemVariable: mensagem │
│ │
├─[loop]→ CONDITION mensagem.tipo === "image" │
│ ├─ true → SEND_MEDIA (mediaType: image) │
│ │ mediaUrl: {{mensagem.urlImagem}} │
│ │ caption: {{mensagem.conteudo}} │
│ │ → WAIT 2s (delay, não WAIT_REPLY) │
│ │ │
│ └─ false → SEND_MESSAGE {{mensagem.conteudo}} │
│ → WAIT 2s (delay, não WAIT_REPLY) │
│ │
└─[done]→ CONDITION tarotSession.perguntasDisponiveis > 0 │
├─ SIM → WAIT_REPLY ─────────────────────────────┘
└─ NÃO
SEND_MESSAGE {{tarotMensagemEsgotado}}
↓
END
🎙️ Texto e áudio funcionam igual
O TAROT_VALIDADOR detecta automaticamente se é áudio (ptt/audio) e transcreve via Whisper. O cliente pode mandar mensagem escrita ou gravada sem diferença.
⏱️ WAIT ≠ WAIT_REPLY
O WAIT dentro do loop é apenas um delay de 2-3s para espaçar mensagens e evitar bloqueio por spam. Só o WAIT_REPLY após o loop aguarda a próxima pergunta do cliente.
🃏 Ordem das mensagens
O array tarotMensagens já vem na ordem certa: texto de abertura → imagem carta 1 → interpretação → imagem carta 2 → interpretação → conclusão.
💬 2 perguntas na mesma mensagem
Se complementares (mesmo tema) → conta como 1 crédito. Se independentes (temas diferentes) → cobra 2 créditos automaticamente.
🚀 Template Pronto para Usar
Funil CompletoFluxo de Tarot 100% configurado — da venda ao oráculo. Inclui funil de pagamento Pix, OCR de comprovante, loop de perguntas com cartas, remarketing em todos os pontos e tratamento de erros. Importe com um clique e ajuste apenas as mensagens.
Código de importação
cmp6jrxtk0001tlxgx8gjb1cdCole esse código no campo "Importar fluxo" → Código de compartilhamento
34
Nodes
41
Conexões
4x
Remarketing
3x
Tratamento de erros
✅ O que já vem configurado
- • Funil de venda com preços (3 / 5 / 7 perguntas → R$ 7 / 13 / 16)
- • Envio automático da chave Pix + remarketing após timeout
- • OCR do comprovante com validação de valor e nome do recebedor
- • Retry automático se comprovante inválido ou ilegível
- • Loop de perguntas com TAROT_VALIDADOR (aceita texto e áudio)
- • Envio de cartas via SEND_MEDIA com imagem + legenda sequenciais
- • Controle de créditos — encerra automaticamente quando esgota
- • Prompt do Oráculo Místico completo com checklist de boas práticas
✏️ O que você precisa ajustar após importar
- • Chave Pix e nome do recebedor nos nodes de mensagem e OCR
- • Textos das mensagens (intro, instruções, remarketing) com sua identidade
- • Modelo de IA do Oráculo (padrão:
gemini-2.0-flash-lite)
🃏 Tarot Session
Sem configuraçãoO que faz
Carrega ou cria a sessão de tarot do contato atual. Deve ser o primeiro node de qualquer fluxo de tarot — ele popula o contexto com os dados da sessão que todos os outros nodes precisam.
📤 Variáveis disponíveis após este node
| Variável | Tipo | Descrição |
|---|---|---|
| {{tarotSession.pago}} | boolean | true se o cliente já pagou |
| {{tarotSession.etapa}} | string | AGUARDANDO_PAGAMENTO, PAGO, EM_CONSULTA, ESGOTADO |
| {{tarotSession.perguntasDisponiveis}} | number | Créditos restantes de perguntas |
| {{tarotSession.perguntasUtilizadas}} | number | Quantas perguntas já foram feitas |
| {{tarotSession.nomeCliente}} | string | Nome do contato (do WhatsApp) |
| {{tarotSession.pacote}} | string | Pacote adquirido (ex: "3 perguntas") |
⚠️ Coloque sempre no início
Sem o TAROT_SESSION todos os outros nodes de tarot falharão — eles precisam de tenantId, contactPhone e instanceName que esse node injeta no contexto.
💳 Tarot Vendas
PagamentoO que faz
Apresenta os pacotes disponíveis e detecta qual o cliente quer. Se o pacote for identificado na mensagem, gera o link de pagamento do Mercado Pago automaticamente. Se não, envia a mensagem inicial com os preços e aguarda a escolha.
📋 Configurações
| Campo | Descrição | Exemplo |
|---|---|---|
| Mensagem Inicial | Texto enviado quando nenhum pacote foi identificado. Apresente as opções com preços. | Temos 3 pacotes: 1 pergunta R$19, 3 perguntas R$49... |
| Mensagem Aguardando | Enviada após gerar o link de pagamento. | Seu link está pronto! Após pagar envie o comprovante aqui 🙏 |
💡 Dica de uso
Os pacotes e valores são configurados na aba Oráculo das configurações do tenant, não dentro do node. O node lê esses valores automaticamente e monta o link do Mercado Pago com o valor correto.
🧾 Tarot OCR Pagamento
Anti-fraudeO que faz
Recebe a imagem ou PDF do comprovante PIX enviado pelo cliente, lê o valor via IA (OCR), valida a data e opcionalmente o nome do recebedor, mapeia para o tier de perguntas correto e libera o acesso automaticamente.
⚙️ Como funciona
- Verifica se a mensagem é imagem ou documento — se não for, roteia para
wrong_type - Chama IA para ler o comprovante e extrair valor, data e recebedor
- Valida a data (anti-fraude: comprovantes antigos são rejeitados)
- Encontra o maior tier cujo valor mínimo é ≤ ao valor detectado
- Atualiza a TarotSession:
pago=true, libera N perguntas do tier
📋 Configurações
| Campo | Descrição | Padrão |
|---|---|---|
| Tiers de valor | Lista de faixas: valor mínimo → número de perguntas liberadas. Ex: R$19 → 1 pergunta, R$49 → 3 perguntas | — |
| Validar recebedor | Se ativo, rejeita comprovantes de outro recebedor | Desativado |
| Validar data | Rejeita comprovantes com mais de N horas | Ativado (24h) |
| Mensagem de confirmação | Texto enviado após liberar o acesso com sucesso | — |
🔀 Saídas do node
valido
Comprovante aceito — sessão liberada
invalido
Comprovante suspeito (data inválida, valor baixo demais, recebedor errado)
wrong_type
Cliente enviou texto ou áudio em vez de imagem/documento
// Tiers configurados
Tier 1: minValor = R$ 19 → 1 pergunta
Tier 2: minValor = R$ 39 → 3 perguntas
Tier 3: minValor = R$ 69 → 6 perguntas
// Cliente paga R$ 45 → Tier 2 ativado → 3 perguntas liberadas
🎙️ Tarot Validador
IA + ÁudioO que faz
Valida e reformula a pergunta do cliente antes de enviar ao Oráculo. Suporta áudio (transcreve com Whisper), acumula múltiplos áudios enviados em sequência, detecta se há perguntas complementares (conta como 1) ou independentes (cobra créditos extras) e reformula tudo em uma pergunta limpa para o LLM.
⚙️ Como funciona por dentro
- Detecta se a mensagem é áudio (
ptt/audio) e transcreve via OpenAI Whisper - Adiciona o texto ao buffer
_tarotMsgBuffer— acumula áudios enviados em sequência - Combina todos os textos do buffer e envia ao LLM validador
- O LLM retorna: válida?, reformulada, quantas perguntas independentes, são complementares?
- Se inválida: envia mensagem de erro (configurada na aba Oráculo) e encerra
- Se válida: limpa o buffer, salva
tarotPerguntano contexto
📋 Configurações
| Campo | Descrição | Padrão |
|---|---|---|
| Modelo de IA | Modelo OpenRouter para validação da pergunta | Configurado na aba Oráculo |
| Prompt de Validação | Instruções para o LLM avaliar a pergunta. Deixe em branco para usar o da aba Oráculo. | Da aba Oráculo |
📤 Variáveis salvas no contexto
| Variável | Descrição |
|---|---|
| {{tarotPergunta.reformulada}} | Pergunta reformulada e limpa para o Oráculo |
| {{tarotPergunta.tema}} | Tema principal detectado (amor, trabalho, saúde...) |
| {{tarotPergunta.perguntasIndependentes}} | Quantas perguntas distintas foram detectadas (1 se complementares) |
| {{tarotPergunta.saoComplementares}} | true se todas as perguntas são sobre o mesmo tema |
// Áudio 1
"Quero saber sobre meu relacionamento"
// Áudio 2 (acumulado no buffer)
"...com meu namorado, se vai dar certo"
// Resultado do validador
perguntasIndependentes: 1
reformulada: "Meu relacionamento com meu namorado tem futuro?"
→ Conta como 1 crédito
// Mensagem do cliente
"Vou me separar do meu marido? E também quero saber se vou ser promovida no trabalho"
// Resultado do validador
perguntasIndependentes: 2
saoComplementares: false
→ Conta como 2 créditos automaticamente
✨ Tarot Oráculo
LLM + CartasO que faz
Sorteia as cartas do baralho configurado, monta o prompt com a pergunta reformulada pelo Validador, chama o LLM e gera o array tarotMensagens com textos e imagens das cartas intercalados — prontos para o LOOP enviar.
⚙️ Como funciona
- Busca as cartas do Supabase (com cache Redis para performance)
- Sorteia N cartas aleatórias (configurado na aba Oráculo)
- Monta o prompt com
{{pergunta}},{{nomeCliente}},{{carta1Nome}}... - Chama o LLM com histórico da conversa (mantém continuidade entre perguntas)
- Monta o array de mensagens: texto → imagem carta 1 → interpretação → imagem carta 2 → ...
- Decrementa os créditos pela quantidade de perguntas independentes detectadas pelo Validador
📋 Configurações
| Campo | Descrição | Padrão |
|---|---|---|
| Modelo de IA | Modelo OpenRouter para a leitura do oráculo | Da aba Oráculo |
| Prompt do Oráculo | Personalidade e estilo da leitura. Suporta {{pergunta}}, {{nomeCliente}}, {{carta1Nome}} etc. | Da aba Oráculo |
| Memory Key | Nome da variável de histórico. Manter padrão salvo memória entre perguntas. | _tarotHistory |
| Máx. histórico | Quantas mensagens o LLM "lembra" da consulta atual | 10 |
📤 Variáveis salvas no contexto
| Variável | Descrição |
|---|---|
| tarotMensagens | Array de { tipo, conteudo, urlImagem? } — consumido pelo LOOP |
| {{tarotMensagemEsgotado}} | Mensagem de encerramento (só preenchida quando créditos chegam a zero) |
🔁 Como montar o LOOP para enviar cartas
LOOP arraySource: tarotMensagens | itemVariable: mensagem
├─[loop]→ CONDITION mensagem.tipo === "image"
│ ├─ true → SEND_MEDIA mediaType: image
│ │ mediaUrl: {{mensagem.urlImagem}}
│ │ caption: {{mensagem.conteudo}}
│ │ → WAIT 2s
│ └─ false → SEND_MESSAGE {{mensagem.conteudo}}
│ → WAIT 2s
│
└─[done]→ CONDITION tarotSession.perguntasDisponiveis > 0
├─ SIM → WAIT_REPLY (volta para o Validador)
└─ NÃO → SEND_MESSAGE {{tarotMensagemEsgotado}} → END
O WAIT dentro do loop é um delay simples (não WAIT_REPLY) — apenas espaça as mensagens para evitar bloqueio por spam.
Guias Práticos e Tutoriais
Construindo um Funil de Vendas
Aprenda a conectar os nodes Enviar Mensagem, IF/ELSE e Botões para qualificar um lead até o fechamento com PIX.
Ler o guiaAutomação de Lançamento em 50 Grupos
Como usar o Trigger de Agendamento junto com o "Sequência de Lançamento" para disparar o Carrinho Aberto.
Ler o guiaPerguntas Frequentes
Posso usar o bot em múltiplos celulares?
Sim, o limite de sessões de WhatsApp vinculadas dependerá do plano da sua licença. Depois de conectar os QRCodes, você escolhe no Trigger do fluxo qual número irá responder.
As mensagens são enviadas como um celular normal?
Sim. A tecnologia Baileys emula o WhatsApp Web perfeitamente. Se usar a opção de simular "digitando...", o delay é transmitido para os contatos assim como você faria escrevendo à mão livre.
As mídias de vídeo e imagem ficam pesadas pro bot disparar?
Depende inteiramente dos limites do seu servidor, que faz o proxy das mídias. Mídias como PTT de voz devem ser encodadas nativamente em Opus (codec para que seja reconhecido como "voz"). A plataforma já se encarrega disso via conversor embutido (exigindo FFmpeg instalado na VPS).