Pular para conteúdo

SALESFORCE_TASK_CREATE - Criar Tarefa no Salesforce

O que é este Node?

O SALESFORCE_TASK_CREATE é o node responsável por criar tarefas e atividades no Salesforce, permitindo registrar follow-ups, lembretes e ações que precisam ser executadas pela equipe.

Por que este Node existe?

Tarefas organizam o trabalho da equipe. O SALESFORCE_TASK_CREATE existe para:

  1. Gestão de Follow-up: Garantir que nenhum cliente fique sem retorno
  2. Organização de Trabalho: Distribuir atividades entre membros da equipe
  3. Automação de Processos: Criar tarefas automaticamente após eventos (lead criado, caso aberto, etc.)
  4. Rastreamento de Atividades: Manter histórico de todas as ações relacionadas a clientes

Como funciona internamente?

Quando o SALESFORCE_TASK_CREATE é executado, o sistema:

  1. Recebe os dados: Coleta subject, status, priority, data e associações
  2. Processa variáveis: Substitui variáveis do contexto pelos valores reais
  3. Valida dados: Todos os campos são opcionais
  4. Monta payload: Cria objeto com informações da tarefa
  5. Autentica no Salesforce: Usa accessToken e instanceUrl
  6. Faz requisição POST: Envia para /services/data/v60.0/sobjects/Task
  7. Retorna ID: Salesforce responde com ID da tarefa criada
  8. Em caso de erro: Retorna mensagem detalhada

Código interno (salesforce-executor.service.ts:877-900):

private async createTask(
  nodeData: FlowNodeData,
  credentials: SalesforceCredentials,
  context: any,
): Promise<any> {
  const { subject, status, priority, activityDate, whoId, whatId, description, ownerId } = nodeData;

  const taskData: any = {};

  if (subject) taskData.Subject = this.replaceVariables(subject, context);
  if (status) taskData.Status = this.replaceVariables(status, context);
  if (priority) taskData.Priority = this.replaceVariables(priority, context);
  if (activityDate) taskData.ActivityDate = this.replaceVariables(activityDate, context);
  if (whoId) taskData.WhoId = this.replaceVariables(whoId, context);
  if (whatId) taskData.WhatId = this.replaceVariables(whatId, context);
  if (description) taskData.Description = this.replaceVariables(description, context);
  if (ownerId) taskData.OwnerId = this.replaceVariables(ownerId, context);

  if (nodeData.additionalFields) {
    Object.assign(taskData, this.processAdditionalFields(nodeData.additionalFields, context));
  }

  return this.salesforceApiRequest('POST', '/sobjects/Task', credentials, taskData);
}

Quando você DEVE usar este Node?

Use SALESFORCE_TASK_CREATE sempre que precisar de criar atividade ou lembrete para equipe:

Casos de uso

  1. Follow-up de lead: Criar tarefa de retorno após captura de lead
  2. Lembrete de reunião: Agendar follow-up após proposta enviada
  3. Retorno de suporte: Criar tarefa para técnico resolver caso
  4. Ação pós-venda: Lembrar vendedor de fazer onboarding do cliente
  5. Renovação de contrato: Criar tarefa para gerente de contas 30 dias antes do vencimento

Quando NÃO usar SALESFORCE_TASK_CREATE

  • Eventos com hora específica: Use Salesforce Event para compromissos com horário
  • Casos de suporte: Use SALESFORCE_CASE_CREATE para tickets
  • Oportunidades: Use SALESFORCE_OPPORTUNITY_CREATE para negócios

Parâmetros Detalhados

subject (string, recomendado)

O que é: Assunto/título da tarefa. Descrição curta do que precisa ser feito.

Exemplo: "Ligar para cliente", "Enviar proposta", "Follow-up reunião", "{{task_subject}}"

status (string, opcional)

O que é: Status atual da tarefa.

Valores comuns: "Not Started", "In Progress", "Completed", "Waiting on someone else", "Deferred"

Padrão: "Not Started"

priority (string, opcional)

O que é: Prioridade da tarefa.

Valores comuns: "Low", "Normal", "High"

Padrão: "Normal"

activityDate (string, opcional)

O que é: Data de vencimento da tarefa. Formato: YYYY-MM-DD.

Exemplo: "2025-10-20", "{{due_date}}"

whoId (string, opcional)

O que é: ID do Lead ou Contact relacionado à tarefa. Representa "quem" é o assunto da tarefa.

Exemplo: "00Q5g00000ABC123" (Lead) ou "0035g00000XYZ789" (Contact)

whatId (string, opcional)

O que é: ID do Account, Opportunity, Case ou outro objeto relacionado. Representa "sobre o que" é a tarefa.

Exemplo: "0015g00000DEF456" (Account) ou "0065g00000GHI789" (Opportunity)

description (string, opcional)

O que é: Descrição detalhada da tarefa, contexto, instruções.

Exemplo: "Cliente solicitou proposta para 50 licenças. Budget: R$ 100.000. Prazo decisão: 30 dias."

ownerId (string, opcional)

O que é: ID do usuário Salesforce responsável pela tarefa. Se não informado, é atribuída ao usuário autenticado.

Exemplo: "0055g00000JKL012"

additionalFields (object, opcional)

O que é: Campos customizados específicos do seu processo.

Exemplo:

{
  "Task_Type__c": "Follow-up Call",
  "Expected_Duration__c": 30,
  "Call_Result__c": "Not Called Yet"
}

Parâmetros

Campo Tipo Obrigatório Descrição
resource string Sim Deve ser "task"
operation string Sim Deve ser "create"
accessToken string Sim Token OAuth do Salesforce
instanceUrl string Sim URL da instância Salesforce
subject string Recomendado Assunto da tarefa
status string Não Status (padrão: Not Started)
priority string Não Prioridade (padrão: Normal)
activityDate string Não Data vencimento (YYYY-MM-DD)
whoId string Não ID de Lead ou Contact
whatId string Não ID de Account, Opportunity, etc.
description string Não Descrição detalhada
ownerId string Não ID do responsável
additionalFields object Não Campos customizados

Exemplo 1: Follow-up Automático de Lead

Objetivo: Criar tarefa de follow-up automaticamente após capturar lead

JSON para Importar

{
  "name": "Follow-up Automático Lead - 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": "email_1",
      "type": "email",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Email",
        "parameters": {
          "message": "Email:",
          "variableName": "email"
        }
      }
    },
    {
      "id": "salesforce_lead",
      "type": "salesforce",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Criar Lead",
        "parameters": {
          "resource": "lead",
          "operation": "create",
          "accessToken": "{{salesforce_token}}",
          "instanceUrl": "{{salesforce_instance}}",
          "company": "{{company}}",
          "lastName": "{{name}}",
          "email": "{{email}}",
          "status": "Open - Not Contacted"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Aguardar 1 segundo",
        "parameters": {
          "duration": 1000
        }
      }
    },
    {
      "id": "salesforce_task",
      "type": "salesforce",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Criar Tarefa Follow-up",
        "parameters": {
          "resource": "task",
          "operation": "create",
          "accessToken": "{{salesforce_token}}",
          "instanceUrl": "{{salesforce_instance}}",
          "subject": "Follow-up: {{company}} - {{name}}",
          "status": "Not Started",
          "priority": "High",
          "activityDate": "2025-10-15",
          "whoId": "{{salesforce_lead.id}}",
          "description": "Lead capturado via WhatsApp. Email: {{email}}. Fazer primeiro contato em até 24h."
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "Obrigado, {{name}}! Nossa equipe entrará em contato em breve."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "input_2" },
    { "source": "input_2", "target": "email_1" },
    { "source": "email_1", "target": "salesforce_lead" },
    { "source": "salesforce_lead", "target": "delay_1" },
    { "source": "delay_1", "target": "salesforce_task" },
    { "source": "salesforce_task", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Qual é o seu nome?
Usuário: Carlos Silva
Sistema: Empresa:
Usuário: Tech Corp
Sistema: Email:
Usuário: carlos@techcorp.com
Sistema: Obrigado, Carlos Silva! Nossa equipe entrará em contato em breve.

Exemplo 2: Tarefa para Oportunidade

Objetivo: Criar tarefa associada a oportunidade de vendas

JSON para Importar

{
  "name": "Tarefa Oportunidade - Salesforce",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Opportunity ID",
        "parameters": {
          "variableName": "opp_id",
          "value": "0065g00000ABC123"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Ação Necessária",
        "parameters": {
          "message": "O que precisa ser feito nesta oportunidade?",
          "variableName": "action"
        }
      }
    },
    {
      "id": "date_1",
      "type": "date",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Data Limite",
        "parameters": {
          "message": "Para quando? (DD/MM/AAAA)",
          "variableName": "due_date",
          "format": "YYYY-MM-DD"
        }
      }
    },
    {
      "id": "salesforce_1",
      "type": "salesforce",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Criar Tarefa",
        "parameters": {
          "resource": "task",
          "operation": "create",
          "accessToken": "{{salesforce_token}}",
          "instanceUrl": "{{salesforce_instance}}",
          "subject": "{{action}}",
          "whatId": "{{opp_id}}",
          "activityDate": "{{due_date}}",
          "status": "Not Started",
          "priority": "High",
          "description": "Ação definida via WhatsApp"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "Tarefa criada: {{action}} para {{due_date}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "input_1" },
    { "source": "input_1", "target": "date_1" },
    { "source": "date_1", "target": "salesforce_1" },
    { "source": "salesforce_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: O que precisa ser feito nesta oportunidade?
Usuário: Enviar proposta comercial
Sistema: Para quando? (DD/MM/AAAA)
Usuário: 20/10/2025
Sistema: Tarefa criada: Enviar proposta comercial para 2025-10-20

Resposta do Node

{
  "id": "00T5g00000XYZ123",
  "success": true,
  "errors": []
}

Boas Práticas

SIM:

  • Sempre definir subject claro e descritivo
  • Usar activityDate para tarefas com prazo
  • Associar a whoId (pessoa) ou whatId (objeto) quando possível
  • Definir priority baseada na urgência
  • Incluir description com contexto e instruções
  • Usar ownerId para distribuir tarefas entre equipe
  • Criar tarefas automaticamente após eventos importantes

NÃO:

  • Criar tarefas sem subject
  • Ignorar activityDate em tarefas com prazo
  • Criar tarefas genéricas sem contexto
  • Não associar tarefa a lead/contact/opportunity
  • Definir todas tarefas como High priority
  • Esquecer de incluir informações importantes na description

Dicas

💡 Dica 1: Use DELAY de alguns segundos entre criar registro (Lead, Opportunity) e criar Task associada para evitar race conditions.

💡 Dica 2: Combine com CONDITION para criar tarefas de prioridades diferentes baseadas em valor de negócio ou urgência.

💡 Dica 3: Use campos customizados para categorizar tarefas: tipo (call, email, meeting), origem (WhatsApp, web), resultado esperado.

💡 Dica 4: Implemente regra de negócio: criar tarefa de follow-up automaticamente após X dias de inatividade em oportunidade.

💡 Dica 5: Para tarefas recorrentes, crie flow que verifica se tarefa foi concluída e cria próxima automaticamente.

Próximos Nodes

SALESFORCE_TASK_UPDATE - Atualizar status da tarefa → SALESFORCE_TASK_GET - Buscar detalhes da tarefa → SALESFORCE_LEAD_CREATE - Criar lead antes da tarefa → SALESFORCE_OPPORTUNITY_CREATE - Criar oportunidade antes da tarefa