Blocos e mapeamento de dados
Conecte o formulário ao CRM, à distribuição comercial e às ações externas.
Campos de origem
Use o seletor/sugestões do editor ou escreva uma referência entre chaves duplas. O formato não executa código.
| Referência | Conteúdo |
|---|---|
{{trigger.body.nome}} | Campo do evento original |
{{trigger.body["Nome completo"]}} | Campo cujo nome tem espaços |
{{trigger.body.itens[0].sku}} | Primeiro item de uma lista |
{{fields.interesse}} | Saída do bloco Organizar dados |
{{contact.id}}, {{contact.name}}, {{contact.phone}} | Contato criado/encontrado; name é o nome completo |
{{contact.firstName}}, {{contact.lastName}} | Primeiro e último nome derivados do nome atual do contato |
{{contact.customFields.opt_in}} | Campo personalizado existente, quando carregado do CRM |
{{deal.id}}, {{deal.status}}, {{deal.valueMinor}} | Negócio atual; valor em centavos |
{{deal.stageId}}, {{deal.stageName}} | Etapa atual do negócio; o nome acompanha a etapa depois de criar, reutilizar ou mover |
{{owner.id}}, {{owner.name}} | Responsável selecionado |
{{steps.consultar_api.body.codigo}} | Resultado de uma etapa cujo ID é consultar_api |
{{steps.boas_vindas.status}} | Resultado do envio: SENT quando o provedor aceitou a mensagem |
{{runtime.contactReplied}} | Se o contato respondeu desde o início desta execução |
{{runtime.contactOptedOut}}, {{runtime.dealClosed}} | Estado vivo de opt-out e encerramento do negócio |
{{runtime.withinBusinessHours}} | Se agora está dentro do horário comercial do fluxo (timezone, sendWindowStart/sendWindowEnd, sendWeekdays), mesmo com respectSendWindow desligado |
Texto pode combinar frases e referências: Olá, {{contact.name}}!. Dentro de JSON, uma referência sozinha preserva números, booleanos, objetos ou listas; dentro de uma frase produz texto. Campo ausente vira texto vazio ou null em JSON. Use campos obrigatórios/condições para não depender silenciosamente de dados ausentes.
Não use funções, JavaScript, filtros |, operadores, eval, SQL ou sintaxe $json do n8n. As raízes disponíveis são somente trigger, fields, contact, deal, owner, steps e runtime.
CRM
| Bloco | Comportamento |
|---|---|
| Organizar dados | Cria um mapa em fields; os campos marcados obrigatórios precisam existir |
| Criar ou atualizar contato | Localiza pelo telefone normalizado, incluindo variantes brasileiras; aceita nome, e-mail, empresa, cargo, cidade, UF, país, nascimento, origem, observações e campos personalizados de contato |
| Criar ou reutilizar negócio | REUSE_OPEN reutiliza a oportunidade aberta mais recente do contato no pipeline; CREATE cria outra oportunidade; ambos podem preencher campos personalizados de negócio |
| Atualizar negócio | Muda etapa dentro do mesmo pipeline, status OPEN, WON, LOST e/ou campos personalizados; exige negócio no contexto |
| Alterar tags | Adiciona/remove apenas tags selecionadas do workspace |
| Distribuir lead | Usa responsável fixo ou rodízio atômico, igual ou percentual, entre os membros escolhidos |
Contato arquivado não é reativado automaticamente. Se houver cadastros ambíguos para o telefone, a execução para para revisão. A automação não cria um negócio implicitamente ao criar contato: inclua o bloco de negócio quando precisar de uma oportunidade.
opportunityKey permite reutilizar o mesmo pedido/orçamento entre eventos distintos, dentro do mesmo contato e pipeline. Prefira um identificador estável do sistema de origem. O valor valueMinor é inteiro não negativo em centavos: 15000 representa R$ 150,00.
Campos personalizados aparecem separados por escopo: um campo de contato não pode ser gravado no negócio e vice-versa. Eles devem existir previamente e receber o tipo correto: número JSON para NUMBER, booleano para BOOLEAN, lista para MULTI_SELECT. Expressões que apontam para dados ausentes preservam o campo existente; null explícito pode limpá-lo. Não coloque autorização, API keys ou senhas em campos de lead.
Vendedor e canal são decisões separadas
O responsável fixo precisa ser operacional e ativo, mas pode estar offline: é uma atribuição comercial explícita. No modo balanceado, escolha uma política:
- Somente online e com capacidade: considera presença recente e vagas no atendimento. Sem elegíveis, a execução aguarda.
- Todas as pessoas ativas selecionadas: mantém um rodízio comercial contínuo e não muda a proporção porque alguém ficou temporariamente offline.
A proporção pode ser igual ou por percentuais. Nos percentuais, cada pessoa recebe um inteiro positivo e o total precisa ser 100%. A Vensy intercala as escolhas ao longo do ciclo; em 50/50, por exemplo, os responsáveis alternam enquanto ambos continuarem elegíveis. Se a política online deixar apenas parte da equipe elegível, os pesos relativos são aplicados somente a essa parte naquele momento.
Manter o dono atual do negócio mantém o responsável ativo/operacional de um negócio reutilizado, mesmo que esteja offline. Desmarque para redistribuir. A seleção fica persistida para que retries não alternem vendedores. Nenhum atendimento ocupa capacidade antes de o contato responder.
Canal que fará o envio não atribui o lead: ele escolhe apenas a conexão remetente. O WhatsApp pode usar um canal fixo ou o canal vinculado ao dono do negócio. Neste último caso, coloque a distribuição antes do envio ou reutilize um negócio que já tenha dono. Se o responsável tiver vários canais elegíveis, selecione um canal fixo; a automação não escolhe um remetente ambíguo.
Texto, imagem, vídeo, áudio e documento usam os gateways já conectados à Vensy. Áudio não aceita legenda; use um bloco de texto separado. Mídias são importadas para armazenamento protegido antes do envio.
No oficial, fora da janela de atendimento, use um template aprovado do próprio canal. O editor reconhece tanto posições ({{1}}, {{2}}) quanto parâmetros nomeados da Meta ({{nome}}, {{produto}}). Em cada variável, Preencher com permite escolher nome completo, primeiro nome, último nome, outro campo padrão ou personalizado do contato, um campo do negócio, um dado recebido pelo formulário/gatilho ou um valor fixo. Primeiro e último nome são calculados do nome atual do contato; quando existe apenas uma palavra, ambos usam essa palavra. A prévia mostra o vínculo; o valor real é lido somente na execução. Todas as variáveis precisam estar preenchidas para publicar.
Cabeçalho de texto/mídia e parâmetros dos botões URL/copiar código continuam seguindo exatamente o template aprovado. A aprovação é conferida novamente ao enviar; parâmetros nomeados são enviados à Meta com o identificador correspondente. No não oficial, um template é renderizado como texto do corpo; cabeçalho dinâmico e botões não são transportados como template oficial.
Em Permissão para iniciar contato no WhatsApp, escolha uma destas modalidades:
- Tenho o opt-in registrado em um campo: selecione o campo real do formulário ou um campo personalizado
sim/nãodo CRM. Ele precisa resolver paratruebooleano ou texto"true"após uma escolha afirmativa da pessoa. - Enviar somente dentro da janela de 24 horas: não exige opt-in proativo, mas só envia se a própria pessoa tiver falado naquele mesmo canal nas últimas 24 horas. Um formulário preenchido não abre essa janela.
Um valor fixo true não comprova consentimento e impede a publicação. Template aprovado também não substitui opt-in. Opt-out tem prioridade e não pode ser desligado pelo fluxo.
Enviar proativamente não cria atendimento. O bloco só segue pelo caminho de sucesso depois que o provedor aceita a mensagem (SENT); fila, falha e resultado incerto não são tratados como sucesso. Para mover o negócio apenas depois do envio, conecte Enviar WhatsApp → Condição com steps.<id-do-envio>.status igual a SENT → Atualizar negócio.
A resposta usa o handoff comercial existente e, por padrão, encerra o follow-up. Se ela chegar logo após uma mensagem confirmada, as condições e ações de CRM ligadas àquele sucesso ainda concluem; o próximo bloco de WhatsApp é interrompido. Uma mensagem ainda enfileirada é reavaliada antes de chegar ao provedor. Desligar “parar na resposta” não remove as proteções do Inbox, do canal ou do contato.
Lógica e integrações
Condição aceita igualdade/diferença, contém, preenchido/vazio e comparação numérica; combina todas (ALL) ou alguma (ANY). Pode consultar o evento, contato, negócio, dono, runtime e saídas persistidas em steps. Você pode adicionar vários blocos de condição. Ambas as saídas precisam chegar a um encerramento. Não há loops nem execução paralela de ramos: cada condição escolhe um caminho.
Aguardar mantém o estado no banco, sem ocupar um processo por minutos/horas, e pode aparecer várias vezes no mesmo fluxo. Depois da retomada, condições e atualizações de CRM podem concluir normalmente; antes de um novo envio, resposta, opt-out, estado do negócio, plano e horário são conferidos novamente.
Notificar equipe gera um aviso operacional para os administradores do workspace. Não envia email, WhatsApp nem mensagens individuais a todos os vendedores.
Requisição HTTP permite GET/POST/PUT/PATCH/DELETE para domínios públicos HTTPS, na porta padrão. Não aceita rede privada, IP literal, redirecionamento ou código. Cadastre segredos em Segurança e horários → Credenciais: o token fica criptografado e só pode ser enviado à origem cadastrada. Headers de transporte/roteamento são controlados pela Vensy.
Por padrão, uma chamada mutante cujo resultado é desconhecido vai para revisão, sem repetir. Só marque API aceita repetição segura se a API externa documentar idempotência e realmente consumir o header configurado. Meramente enviar Idempotency-Key não torna um endpoint idempotente. HTTP usa uma chave estável por execução/bloco, inclusive em retomadas administrativas.
O corpo de saída HTTP tem até 32 KiB e a resposta persistida até 16 KiB; respostas maiores são omitidas (bodyOmitted). Campos sensíveis conhecidos e o token cadastrado são redigidos, mas APIs externas podem devolver outros dados pessoais: escolha o destino e o conteúdo com cuidado.