SALESFORCE_LEAD_CREATE - Criar Lead no Salesforce
O que é este Node?
O SALESFORCE_LEAD_CREATE é o node responsável por criar novos leads no Salesforce CRM, permitindo adicionar potenciais clientes ao seu funil de vendas diretamente de conversas no WhatsApp.
Por que este Node existe?
Capturar leads em tempo real é crucial para o sucesso das vendas. O SALESFORCE_LEAD_CREATE existe para:
- Automação de Captação: Criar leads automaticamente durante conversas no WhatsApp sem intervenção manual
- Velocidade de Resposta: Registrar leads imediatamente no CRM, permitindo follow-up rápido da equipe de vendas
- Dados Estruturados: Garantir que informações dos leads sejam organizadas corretamente no Salesforce
- Integração Omnichannel: Conectar conversas WhatsApp diretamente ao processo de vendas da empresa
Como funciona internamente?
Quando o SALESFORCE_LEAD_CREATE é executado, o sistema:
- Recebe os dados: Coleta informações do lead (nome, empresa, email, telefone, etc.)
- Processa variáveis: Substitui variáveis do contexto como
{{user_name}}pelos valores reais - Valida campos obrigatórios: Verifica se Company e LastName estão presentes
- Monta payload: Cria objeto com campos padrão e campos adicionais (additionalFields)
- Autentica no Salesforce: Usa accessToken e instanceUrl para autenticação
- Faz requisição POST: Envia dados para
/services/data/v60.0/sobjects/Lead - Retorna ID do lead: Salesforce responde com o ID do lead criado
- Em caso de erro: Retorna mensagem de erro detalhada para tratamento
Código interno (salesforce-executor.service.ts:92-118):
private async createLead(
nodeData: FlowNodeData,
credentials: SalesforceCredentials,
context: any,
): Promise<any> {
const { company, lastName, email, firstName, phone, status, title, website, description } = nodeData;
const leadData: any = {
Company: this.replaceVariables(company, context),
LastName: this.replaceVariables(lastName, context),
};
if (email) leadData.Email = this.replaceVariables(email, context);
if (firstName) leadData.FirstName = this.replaceVariables(firstName, context);
if (phone) leadData.Phone = this.replaceVariables(phone, context);
if (status) leadData.Status = this.replaceVariables(status, context);
if (title) leadData.Title = this.replaceVariables(title, context);
if (website) leadData.Website = this.replaceVariables(website, context);
if (description) leadData.Description = this.replaceVariables(description, context);
// Additional fields
if (nodeData.additionalFields) {
Object.assign(leadData, this.processAdditionalFields(nodeData.additionalFields, context));
}
return this.salesforceApiRequest('POST', '/sobjects/Lead', credentials, leadData);
}
Quando você DEVE usar este Node?
Use SALESFORCE_LEAD_CREATE sempre que precisar de cadastrar novos potenciais clientes no Salesforce:
Casos de uso
- Captura de interesse em produto: Cliente manifesta interesse em um produto via WhatsApp e é registrado como lead
- Landing page conversacional: Bot qualifica visitantes e cria leads automaticamente
- Eventos e webinars: Participantes de eventos são cadastrados como leads com informações coletadas no chat
- Formulários WhatsApp: Sequência de perguntas coleta dados e cria lead estruturado
- Qualificação automática: Bot faz perguntas de qualificação e cria lead com score/status apropriado
Quando NÃO usar SALESFORCE_LEAD_CREATE
- Lead já existe: Use SALESFORCE_LEAD_UPDATE para atualizar dados existentes
- Não sabe se existe: Use SALESFORCE_LEAD_UPSERT que cria ou atualiza baseado em ID externo
- Cliente já convertido: Use SALESFORCE_CONTACT_CREATE para contatos ou SALESFORCE_OPPORTUNITY_CREATE para oportunidades
Parâmetros Detalhados
company (string, obrigatório)
O que é: Nome da empresa do lead. Campo obrigatório no Salesforce.
Exemplo: "Acme Corporation", "Padaria São João", "{{customer_company}}"
Flow completo para testar:
{
"name": "Teste Salesforce - Criar Lead com Company",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Perguntar Empresa",
"parameters": {
"message": "Qual é o nome da sua empresa?",
"variableName": "company_name"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Perguntar Nome",
"parameters": {
"message": "E qual é o seu nome?",
"variableName": "last_name"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Criar Lead",
"parameters": {
"resource": "lead",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"company": "{{company_name}}",
"lastName": "{{last_name}}"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Lead criado com sucesso! ID: {{salesforce_1.id}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite "Minha Empresa LTDA" quando perguntado sobre a empresa, depois digite "Silva" para o nome. O sistema criará o lead e retornará o ID.
lastName (string, obrigatório)
O que é: Sobrenome do lead. Campo obrigatório no Salesforce (LastName).
Exemplo: "Silva", "Santos", "{{user_lastname}}"
email (string, opcional)
O que é: Email do lead para contato.
Exemplo: "contato@empresa.com", "{{user_email}}"
Flow completo para testar:
{
"name": "Teste Salesforce - Lead com Email",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "email_1",
"type": "email",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Coletar Email",
"parameters": {
"message": "Qual é o seu email?",
"variableName": "user_email"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Criar Lead",
"parameters": {
"resource": "lead",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"company": "Empresa Teste",
"lastName": "Testador",
"email": "{{user_email}}"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Lead criado com email {{user_email}}!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "email_1" },
{ "source": "email_1", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite um email válido (ex: teste@email.com). O sistema validará e criará o lead com este email.
firstName (string, opcional)
O que é: Primeiro nome do lead (FirstName no Salesforce).
Exemplo: "João", "Maria", "{{user_firstname}}"
phone (string, opcional)
O que é: Telefone principal do lead.
Exemplo: "+5511999998888", "{{user_phone}}"
status (string, opcional)
O que é: Status do lead no funil de vendas.
Valores comuns: "Open - Not Contacted", "Working - Contacted", "Closed - Converted", "Closed - Not Converted"
Padrão: Definido pela configuração do Salesforce (geralmente "Open - Not Contacted")
title (string, opcional)
O que é: Cargo/título do lead na empresa.
Exemplo: "Gerente de TI", "Diretor Comercial", "CEO"
website (string, opcional)
O que é: Website da empresa do lead.
Exemplo: "https://www.empresa.com.br"
description (string, opcional)
O que é: Descrição ou observações sobre o lead.
Exemplo: "Interessado em plano enterprise. Mencinou ter 50 funcionários."
additionalFields (object, opcional)
O que é: Campos customizados ou adicionais do Salesforce. Permite enviar qualquer campo personalizado criado na sua instância.
Exemplo:
{
"LeadSource": "WhatsApp",
"Rating": "Hot",
"NumberOfEmployees": 50,
"Custom_Field__c": "Valor Customizado"
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| resource | string | Sim | Deve ser "lead" |
| operation | string | Sim | Deve ser "create" |
| accessToken | string | Sim | Token OAuth do Salesforce |
| instanceUrl | string | Sim | URL da instância (ex: https://na50.salesforce.com) |
| company | string | Sim | Nome da empresa do lead |
| lastName | string | Sim | Sobrenome do lead |
| firstName | string | Não | Primeiro nome do lead |
| string | Não | Email do lead | |
| phone | string | Não | Telefone do lead |
| status | string | Não | Status do lead no funil |
| title | string | Não | Cargo do lead |
| website | string | Não | Website da empresa |
| description | string | Não | Observações sobre o lead |
| additionalFields | object | Não | Campos customizados adicionais |
Exemplo 1: Captura Simples de Lead
Objetivo: Criar lead com informações básicas coletadas em conversa
JSON para Importar
{
"name": "Captura Básica de Lead Salesforce",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Boas-vindas",
"parameters": {
"message": "Olá! Vejo que você tem interesse nos nossos produtos. Vamos cadastrar suas informações?"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "Qual é o seu nome completo?",
"variableName": "full_name"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Empresa",
"parameters": {
"message": "Qual é o nome da sua empresa?",
"variableName": "company"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Qual é o seu email corporativo?",
"variableName": "email"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Criar Lead",
"parameters": {
"resource": "lead",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"company": "{{company}}",
"lastName": "{{full_name}}",
"email": "{{email}}",
"description": "Lead capturado via WhatsApp"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Perfeito, {{full_name}}! Suas informações foram registradas. Nossa equipe entrará em contato em breve!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "email_1" },
{ "source": "email_1", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Olá! Vejo que você tem interesse nos nossos produtos. Vamos cadastrar suas informações?
Sistema: Qual é o seu nome completo?
Usuário: João Silva
Sistema: Qual é o nome da sua empresa?
Usuário: Tech Solutions LTDA
Sistema: Qual é o seu email corporativo?
Usuário: joao@techsolutions.com.br
Sistema: Perfeito, João Silva! Suas informações foram registradas. Nossa equipe entrará em contato em breve!
Exemplo 2: Lead Qualificado com Status
Objetivo: Coletar informações detalhadas e definir status do lead baseado nas respostas
JSON para Importar
{
"name": "Lead Qualificado Salesforce",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "Qual é o seu nome?",
"variableName": "name"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Empresa",
"parameters": {
"message": "Empresa:",
"variableName": "company"
}
}
},
{
"id": "input_3",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Cargo",
"parameters": {
"message": "Qual é o seu cargo?",
"variableName": "title"
}
}
},
{
"id": "phone_1",
"type": "phone",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Telefone",
"parameters": {
"message": "Telefone para contato:",
"variableName": "phone"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Email:",
"variableName": "email"
}
}
},
{
"id": "input_4",
"type": "input",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Necessidade",
"parameters": {
"message": "Conte-nos: qual é a principal necessidade da sua empresa?",
"variableName": "need"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Criar Lead Qualificado",
"parameters": {
"resource": "lead",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"firstName": "{{name}}",
"lastName": "Contato WhatsApp",
"company": "{{company}}",
"title": "{{title}}",
"phone": "{{phone}}",
"email": "{{email}}",
"status": "Working - Contacted",
"description": "Necessidade: {{need}}",
"additionalFields": {
"LeadSource": "WhatsApp",
"Rating": "Warm"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1700, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Obrigado, {{name}}! Seu interesse foi registrado e nossa equipe especializada entrará em contato em até 24h."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "input_3" },
{ "source": "input_3", "target": "phone_1" },
{ "source": "phone_1", "target": "email_1" },
{ "source": "email_1", "target": "input_4" },
{ "source": "input_4", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Qual é o seu nome?
Usuário: Carlos
Sistema: Empresa:
Usuário: Indústria ABC
Sistema: Qual é o seu cargo?
Usuário: Diretor de Compras
Sistema: Telefone para contato:
Usuário: 11987654321
Sistema: Email:
Usuário: carlos@industriaabc.com
Sistema: Conte-nos: qual é a principal necessidade da sua empresa?
Usuário: Precisamos automatizar nosso processo de vendas
Sistema: Obrigado, Carlos! Seu interesse foi registrado e nossa equipe especializada entrará em contato em até 24h.
Exemplo 3: Lead com Campos Customizados
Objetivo: Criar lead utilizando campos personalizados da sua instância Salesforce
JSON para Importar
{
"name": "Lead Salesforce - Campos Customizados",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Nome Completo",
"parameters": {
"message": "Nome completo:",
"variableName": "fullname"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Empresa",
"parameters": {
"message": "Empresa:",
"variableName": "company"
}
}
},
{
"id": "input_3",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Produto Interesse",
"parameters": {
"message": "Qual produto interessa? (A/B/C)",
"variableName": "product"
}
}
},
{
"id": "number_1",
"type": "number",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Budget",
"parameters": {
"message": "Qual é o budget disponível (em reais)?",
"variableName": "budget"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Criar Lead com Campos Custom",
"parameters": {
"resource": "lead",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"company": "{{company}}",
"lastName": "{{fullname}}",
"status": "Open - Not Contacted",
"additionalFields": {
"LeadSource": "WhatsApp Bot",
"Product_Interest__c": "{{product}}",
"Budget__c": "{{budget}}",
"Contacted_Via__c": "WhatsApp",
"Priority__c": "High",
"Campaign_Source__c": "Q1-2025"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Registrado! Produto {{product}} com budget de R${{budget}}. Em breve faremos uma proposta personalizada."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "input_3" },
{ "source": "input_3", "target": "number_1" },
{ "source": "number_1", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Nome completo:
Usuário: Maria Santos
Sistema: Empresa:
Usuário: Comercial XYZ
Sistema: Qual produto interessa? (A/B/C)
Usuário: B
Sistema: Qual é o budget disponível (em reais)?
Usuário: 50000
Sistema: Registrado! Produto B com budget de R$50000. Em breve faremos uma proposta personalizada.
Resposta do Node
{
"id": "00Q5g00000ABC123",
"success": true,
"errors": []
}
Campos retornados:
- id: ID único do lead criado no Salesforce
- success: Indica se a operação foi bem-sucedida
- errors: Array de erros (vazio se sucesso)
Boas Práticas
✅ SIM:
- Sempre colete Company e LastName (campos obrigatórios)
- Use validação de email com node EMAIL antes de criar o lead
- Use validação de telefone com node PHONE para garantir formato correto
- Armazene a origem do lead em LeadSource ou campo customizado para rastreamento
- Adicione descrição contextual sobre como o lead chegou até você
- Use status apropriado baseado na qualificação do lead
- Inclua campos customizados relevantes para seu processo de vendas
- Salve o ID retornado para futuras atualizações ou consultas
❌ NÃO:
- Criar leads duplicados - use UPSERT se houver risco de duplicação
- Enviar dados sensíveis em campos de texto livre sem criptografia
- Criar leads sem informação mínima de contato (email OU telefone)
- Ignorar erros da API - sempre trate falhas de autenticação ou validação
- Usar valores hardcoded - sempre use variáveis do contexto
- Criar lead sem qualificar minimamente o interesse
- Esquecer de informar a fonte/origem do lead
Dicas
💡 Dica 1: Configure um flow de erro separado para tratar falhas na criação de leads. Use CONDITION para verificar se salesforce_1.success === true e direcionar para mensagem de erro caso falhe.
💡 Dica 2: Combine com node AI para extrair automaticamente nome, empresa e email de uma mensagem livre do usuário antes de criar o lead.
💡 Dica 3: Use campos customizados (additionalFields) para rastrear informações específicas do seu negócio, como origem da campanha, produto de interesse, score de qualificação, etc.
💡 Dica 4: Implemente um sistema de pontuação (lead scoring) baseado nas respostas do usuário e envie o score em um campo customizado para priorização da equipe de vendas.
💡 Dica 5: Após criar o lead, use SALESFORCE_TASK_CREATE para criar uma tarefa automática de follow-up para o vendedor responsável.
Próximos Nodes
→ SALESFORCE_LEAD_UPDATE - Atualizar dados de lead existente → SALESFORCE_LEAD_UPSERT - Criar ou atualizar lead baseado em ID externo → SALESFORCE_LEAD_GET - Buscar informações de um lead específico → SALESFORCE_TASK_CREATE - Criar tarefa de follow-up associada ao lead