SALESFORCE_CONTACT_CREATE - Criar Contato no Salesforce
O que é este Node?
O SALESFORCE_CONTACT_CREATE é o node responsável por criar novos contatos no Salesforce CRM, registrando pessoas que já são clientes ou que têm relacionamento estabelecido com a empresa.
Por que este Node existe?
Contatos representam pessoas reais em empresas-cliente. O SALESFORCE_CONTACT_CREATE existe para:
- Gestão de Relacionamento: Manter registro organizado de todas as pessoas com quem sua empresa se relaciona
- Diferenciação de Leads: Separar contatos qualificados/clientes de leads em prospecção
- Associação com Contas: Vincular pessoas a empresas (Accounts) para gestão hierárquica
- Histórico Completo: Registrar interações e atividades com pessoas específicas ao longo do tempo
Como funciona internamente?
Quando o SALESFORCE_CONTACT_CREATE é executado, o sistema:
- Recebe os dados: Coleta informações do contato (nome, email, telefone, accountId, etc.)
- Processa variáveis: Substitui variáveis do contexto pelos valores reais
- Valida campo obrigatório: Verifica se LastName está presente
- Monta payload: Cria objeto com campos padrão e adicionais
- Autentica no Salesforce: Usa accessToken e instanceUrl
- Faz requisição POST: Envia para
/services/data/v60.0/sobjects/Contact - Retorna ID do contato: Salesforce responde com ID único
- Em caso de erro: Retorna mensagem detalhada para tratamento
Código interno (salesforce-executor.service.ts:252-276):
private async createContact(
nodeData: FlowNodeData,
credentials: SalesforceCredentials,
context: any,
): Promise<any> {
const { lastName, firstName, email, phone, accountId, title, department, mobilePhone } = nodeData;
const contactData: any = {
LastName: this.replaceVariables(lastName, context),
};
if (firstName) contactData.FirstName = this.replaceVariables(firstName, context);
if (email) contactData.Email = this.replaceVariables(email, context);
if (phone) contactData.Phone = this.replaceVariables(phone, context);
if (accountId) contactData.AccountId = this.replaceVariables(accountId, context);
if (title) contactData.Title = this.replaceVariables(title, context);
if (department) contactData.Department = this.replaceVariables(department, context);
if (mobilePhone) contactData.MobilePhone = this.replaceVariables(mobilePhone, context);
if (nodeData.additionalFields) {
Object.assign(contactData, this.processAdditionalFields(nodeData.additionalFields, context));
}
return this.salesforceApiRequest('POST', '/sobjects/Contact', credentials, contactData);
}
Quando você DEVE usar este Node?
Use SALESFORCE_CONTACT_CREATE sempre que precisar de registrar pessoas que já são clientes ou têm relacionamento com a empresa:
Casos de uso
- Conversão de Lead: Após qualificar um lead, converter para contato vinculado a uma Account
- Novo contato em cliente existente: Novo funcionário de empresa que já é cliente
- Cadastro pós-venda: Registrar contato após fechamento de negócio
- Contato de suporte: Cliente solicita suporte e precisa ser cadastrado no sistema
- Rede de relacionamentos: Adicionar múltiplos contatos de uma mesma empresa/conta
Quando NÃO usar SALESFORCE_CONTACT_CREATE
- Ainda é prospect: Use SALESFORCE_LEAD_CREATE para potenciais clientes não qualificados
- Contato já existe: Use SALESFORCE_CONTACT_UPDATE para atualizar dados
- Incerteza se existe: Use SALESFORCE_CONTACT_UPSERT baseado em email ou ID externo
Parâmetros Detalhados
lastName (string, obrigatório)
O que é: Sobrenome do contato. Único campo obrigatório no Salesforce para Contact.
Exemplo: "Silva", "Santos", "{{customer_lastname}}"
Flow completo para testar:
{
"name": "Teste Salesforce - Criar Contato Simples",
"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 sobrenome?",
"variableName": "lastname"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Criar Contato",
"parameters": {
"resource": "contact",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"lastName": "{{lastname}}"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Contato criado! ID: {{salesforce_1.id}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite um sobrenome e o contato será criado retornando o ID.
firstName (string, opcional)
O que é: Primeiro nome do contato.
Exemplo: "João", "Maria", "{{customer_firstname}}"
email (string, opcional)
O que é: Email principal do contato.
Exemplo: "joao@empresa.com", "{{customer_email}}"
phone (string, opcional)
O que é: Telefone comercial do contato.
Exemplo: "+5511999998888", "{{customer_phone}}"
accountId (string, opcional mas recomendado)
O que é: ID da Account (empresa) à qual este contato pertence. Altamente recomendado para organização.
Exemplo: "0015g00000ABC123", "{{account_id}}"
Flow completo para testar:
{
"name": "Teste Salesforce - Contato com Account",
"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": "Nome completo:",
"variableName": "fullname"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Email:",
"variableName": "email"
}
}
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Definir Account ID",
"parameters": {
"variableName": "account_id",
"value": "0015g00000ABC123"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Criar Contato",
"parameters": {
"resource": "contact",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"lastName": "{{fullname}}",
"email": "{{email}}",
"accountId": "{{account_id}}"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Contato {{fullname}} vinculado à conta!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "email_1" },
{ "source": "email_1", "target": "variable_1" },
{ "source": "variable_1", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite nome e email. O contato será criado e vinculado à Account especificada.
title (string, opcional)
O que é: Cargo/título do contato na empresa.
Exemplo: "Gerente de TI", "CEO", "Analista de Compras"
department (string, opcional)
O que é: Departamento do contato na empresa.
Exemplo: "TI", "Vendas", "Financeiro", "Compras"
mobilePhone (string, opcional)
O que é: Telefone celular/móvel do contato.
Exemplo: "+5511987654321", "{{customer_mobile}}"
additionalFields (object, opcional)
O que é: Campos customizados específicos da sua instância Salesforce.
Exemplo:
{
"LeadSource": "WhatsApp",
"Preferred_Contact_Method__c": "WhatsApp",
"Customer_Since__c": "2025-01-15"
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| resource | string | Sim | Deve ser "contact" |
| operation | string | Sim | Deve ser "create" |
| accessToken | string | Sim | Token OAuth do Salesforce |
| instanceUrl | string | Sim | URL da instância Salesforce |
| lastName | string | Sim | Sobrenome do contato |
| firstName | string | Não | Primeiro nome do contato |
| string | Não | Email do contato | |
| phone | string | Não | Telefone comercial |
| accountId | string | Não | ID da Account associada |
| title | string | Não | Cargo do contato |
| department | string | Não | Departamento |
| mobilePhone | string | Não | Celular |
| additionalFields | object | Não | Campos customizados |
Exemplo 1: Novo Contato em Cliente Existente
Objetivo: Adicionar novo contato em empresa que já é cliente
JSON para Importar
{
"name": "Novo Contato em Cliente - 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á! Vou cadastrar você como novo contato na sua empresa."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "Seu nome completo:",
"variableName": "name"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Cargo",
"parameters": {
"message": "Seu cargo:",
"variableName": "title"
}
}
},
{
"id": "input_3",
"type": "input",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Departamento",
"parameters": {
"message": "Seu departamento:",
"variableName": "dept"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Email corporativo:",
"variableName": "email"
}
}
},
{
"id": "phone_1",
"type": "phone",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Celular",
"parameters": {
"message": "Celular (com DDD):",
"variableName": "mobile"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Criar Contato",
"parameters": {
"resource": "contact",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"firstName": "{{name}}",
"lastName": "Contato",
"email": "{{email}}",
"mobilePhone": "{{mobile}}",
"title": "{{title}}",
"department": "{{dept}}",
"accountId": "{{company_account_id}}"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1700, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Perfeito, {{name}}! Você foi cadastrado no nosso sistema como contato da empresa."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1900, "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": "input_3" },
{ "source": "input_3", "target": "email_1" },
{ "source": "email_1", "target": "phone_1" },
{ "source": "phone_1", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Olá! Vou cadastrar você como novo contato na sua empresa.
Sistema: Seu nome completo:
Usuário: Pedro Oliveira
Sistema: Seu cargo:
Usuário: Analista de TI
Sistema: Seu departamento:
Usuário: Tecnologia
Sistema: Email corporativo:
Usuário: pedro@empresa.com
Sistema: Celular (com DDD):
Usuário: 11987654321
Sistema: Perfeito, Pedro Oliveira! Você foi cadastrado no nosso sistema como contato da empresa.
Exemplo 2: Contato de Suporte
Objetivo: Cliente solicita suporte e é cadastrado como contato
JSON para Importar
{
"name": "Cadastro Contato Suporte - 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 Suporte",
"parameters": {
"message": "Bem-vindo ao suporte técnico! Vou precisar de algumas informações para criar seu ticket."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "Seu nome:",
"variableName": "customer_name"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Email para contato:",
"variableName": "customer_email"
}
}
},
{
"id": "phone_1",
"type": "phone",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Telefone",
"parameters": {
"message": "Telefone:",
"variableName": "customer_phone"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Problema",
"parameters": {
"message": "Descreva brevemente o problema:",
"variableName": "issue"
}
}
},
{
"id": "salesforce_1",
"type": "salesforce",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Criar Contato",
"parameters": {
"resource": "contact",
"operation": "create",
"accessToken": "{{salesforce_token}}",
"instanceUrl": "https://sua-instancia.salesforce.com",
"lastName": "{{customer_name}}",
"email": "{{customer_email}}",
"phone": "{{customer_phone}}",
"additionalFields": {
"LeadSource": "WhatsApp Support",
"Initial_Issue__c": "{{issue}}",
"Support_Channel__c": "WhatsApp"
}
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Cadastro realizado! Ticket de suporte criado. ID do contato: {{salesforce_1.id}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "email_1" },
{ "source": "email_1", "target": "phone_1" },
{ "source": "phone_1", "target": "input_2" },
{ "source": "input_2", "target": "salesforce_1" },
{ "source": "salesforce_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Bem-vindo ao suporte técnico! Vou precisar de algumas informações para criar seu ticket.
Sistema: Seu nome:
Usuário: Ana Costa
Sistema: Email para contato:
Usuário: ana@email.com
Sistema: Telefone:
Usuário: 21987654321
Sistema: Descreva brevemente o problema:
Usuário: Sistema não está abrindo
Sistema: Cadastro realizado! Ticket de suporte criado. ID do contato: 0035g00000XYZ789
Resposta do Node
{
"id": "0035g00000ABC123",
"success": true,
"errors": []
}
Boas Práticas
✅ SIM:
- Sempre associar contato a uma Account (accountId) quando possível
- Coletar email e telefone para facilitar comunicação
- Registrar cargo e departamento para identificar tomadores de decisão
- Usar campos customizados para rastrear origem do contato (WhatsApp, Site, etc.)
- Validar email e telefone antes de criar contato
- Salvar ID retornado para associações futuras (Cases, Opportunities)
❌ NÃO:
- Criar contatos sem Account quando a empresa já está cadastrada
- Usar Contact para prospects não qualificados (use Lead)
- Duplicar contatos - verificar existência antes ou usar UPSERT
- Ignorar campos importantes como email e telefone
- Criar contato sem contexto ou informação mínima
Dicas
💡 Dica 1: Antes de criar contato, use SALESFORCE_ACCOUNT_GET ou busca por CNPJ para encontrar o accountId correto da empresa.
💡 Dica 2: Combine com SALESFORCE_CASE_CREATE para criar automaticamente um caso de suporte associado ao contato logo após o cadastro.
💡 Dica 3: Use SALESFORCE_CONTACT_ADD_TO_CAMPAIGN para adicionar o contato criado a campanhas de marketing ou relacionamento.
💡 Dica 4: Implemente validação de email e telefone usando nodes EMAIL e PHONE antes de criar o contato para garantir dados de qualidade.
💡 Dica 5: Para empresas com múltiplos contatos, crie um fluxo que primeiro busca a Account e depois permite adicionar vários contatos associados.
Próximos Nodes
→ SALESFORCE_CONTACT_UPDATE - Atualizar contato existente → SALESFORCE_CONTACT_GET - Buscar dados de um contato → SALESFORCE_CASE_CREATE - Criar caso associado ao contato → SALESFORCE_CONTACT_ADD_TO_CAMPAIGN - Adicionar contato a campanha