Pular para conteúdo

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:

  1. Gestão de Relacionamento: Manter registro organizado de todas as pessoas com quem sua empresa se relaciona
  2. Diferenciação de Leads: Separar contatos qualificados/clientes de leads em prospecção
  3. Associação com Contas: Vincular pessoas a empresas (Accounts) para gestão hierárquica
  4. 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:

  1. Recebe os dados: Coleta informações do contato (nome, email, telefone, accountId, etc.)
  2. Processa variáveis: Substitui variáveis do contexto pelos valores reais
  3. Valida campo obrigatório: Verifica se LastName está presente
  4. Monta payload: Cria objeto com campos padrão e adicionais
  5. Autentica no Salesforce: Usa accessToken e instanceUrl
  6. Faz requisição POST: Envia para /services/data/v60.0/sobjects/Contact
  7. Retorna ID do contato: Salesforce responde com ID único
  8. 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

  1. Conversão de Lead: Após qualificar um lead, converter para contato vinculado a uma Account
  2. Novo contato em cliente existente: Novo funcionário de empresa que já é cliente
  3. Cadastro pós-venda: Registrar contato após fechamento de negócio
  4. Contato de suporte: Cliente solicita suporte e precisa ser cadastrado no sistema
  5. 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
email 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