Vensy Developers
Automações comerciais

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ênciaConteú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

BlocoComportamento
Organizar dadosCria um mapa em fields; os campos marcados obrigatórios precisam existir
Criar ou atualizar contatoLocaliza 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ócioREUSE_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ócioMuda etapa dentro do mesmo pipeline, status OPEN, WON, LOST e/ou campos personalizados; exige negócio no contexto
Alterar tagsAdiciona/remove apenas tags selecionadas do workspace
Distribuir leadUsa 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.

WhatsApp

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ão do CRM. Ele precisa resolver para true booleano 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.

Nesta página