Pular para conteúdo

SALESFORCE_CASE_CREATE - Criar Caso de Suporte no Salesforce

O que é este Node?

O SALESFORCE_CASE_CREATE é o node responsável por criar casos de suporte ou atendimento no Salesforce Service Cloud, registrando problemas, dúvidas ou solicitações de clientes.

Por que este Node existe?

Casos organizam e rastreiam atendimentos ao cliente. O SALESFORCE_CASE_CREATE existe para:

  1. Gestão de Suporte: Centralizar e organizar todos os tickets de atendimento
  2. SLA e Métricas: Medir tempo de resposta, resolução e satisfação do cliente
  3. Automação de Atendimento: Criar casos automaticamente a partir de conversas no WhatsApp
  4. Histórico Completo: Manter registro de todos os problemas e soluções por cliente

Como funciona internamente?

Quando o SALESFORCE_CASE_CREATE é executado, o sistema:

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

Código interno (salesforce-executor.service.ts:739-762):

private async createCase(
  nodeData: FlowNodeData,
  credentials: SalesforceCredentials,
  context: any,
): Promise<any> {
  const { subject, status, priority, origin, contactId, accountId, description, type } = nodeData;

  const caseData: any = {};

  if (subject) caseData.Subject = this.replaceVariables(subject, context);
  if (status) caseData.Status = this.replaceVariables(status, context);
  if (priority) caseData.Priority = this.replaceVariables(priority, context);
  if (origin) caseData.Origin = this.replaceVariables(origin, context);
  if (contactId) caseData.ContactId = this.replaceVariables(contactId, context);
  if (accountId) caseData.AccountId = this.replaceVariables(accountId, context);
  if (description) caseData.Description = this.replaceVariables(description, context);
  if (type) caseData.Type = this.replaceVariables(type, context);

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

  return this.salesforceApiRequest('POST', '/sobjects/Case', credentials, caseData);
}

Quando você DEVE usar este Node?

Use SALESFORCE_CASE_CREATE sempre que precisar de registrar atendimento ou suporte ao cliente:

Casos de uso

  1. Solicitação de suporte: Cliente reporta problema técnico via WhatsApp
  2. Dúvida sobre produto: Cliente tem questão que precisa ser respondida pela equipe
  3. Reclamação: Cliente insatisfeito registra reclamação formal
  4. Solicitação de serviço: Cliente solicita instalação, manutenção ou configuração
  5. Feedback: Cliente envia sugestões ou comentários que precisam ser analisados

Quando NÃO usar SALESFORCE_CASE_CREATE

  • Venda: Use SALESFORCE_OPPORTUNITY_CREATE para negócios comerciais
  • Novo lead: Use SALESFORCE_LEAD_CREATE para potenciais clientes
  • Apenas informação: Use SALESFORCE_TASK_CREATE para lembretes simples

Parâmetros Detalhados

subject (string, recomendado)

O que é: Assunto/título do caso. Resumo do problema ou solicitação.

Exemplo: "Sistema não abre", "Dúvida sobre fatura", "Solicitação de upgrade"

status (string, opcional)

O que é: Status atual do caso.

Valores comuns: "New", "Working", "Escalated", "Closed"

Padrão: "New"

priority (string, opcional)

O que é: Prioridade do atendimento.

Valores comuns: "Low", "Medium", "High", "Critical"

Padrão: "Medium"

origin (string, opcional mas recomendado)

O que é: Canal de origem do caso.

Valores comuns: "Phone", "Email", "Web", "WhatsApp", "Chat"

contactId (string, opcional mas recomendado)

O que é: ID do contato que abriu o caso.

Exemplo: "0035g00000ABC123"

accountId (string, opcional mas recomendado)

O que é: ID da empresa (Account) associada ao caso.

Exemplo: "0015g00000XYZ789"

description (string, opcional)

O que é: Descrição detalhada do problema ou solicitação.

Exemplo: "Cliente relata que sistema trava ao tentar gerar relatório mensal."

type (string, opcional)

O que é: Tipo/categoria do caso.

Valores comuns: "Problem", "Question", "Feature Request"

additionalFields (object, opcional)

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

Exemplo:

{
  "Product__c": "ERP",
  "Version__c": "3.2.1",
  "Environment__c": "Production",
  "Impact__c": "All users"
}

Parâmetros

Campo Tipo Obrigatório Descrição
resource string Sim Deve ser "case"
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 do caso
status string Não Status (padrão: New)
priority string Não Prioridade (padrão: Medium)
origin string Não Canal de origem
contactId string Não ID do contato
accountId string Não ID da Account
description string Não Descrição detalhada
type string Não Tipo do caso
additionalFields object Não Campos customizados

Exemplo 1: Caso de Suporte Técnico

Objetivo: Cliente reporta problema e caso é criado automaticamente

JSON para Importar

{
  "name": "Suporte Técnico - Salesforce Case",
  "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": "Olá! Sou o assistente de suporte. Vou registrar seu problema."
        }
      }
    },
    {
      "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:",
          "variableName": "customer_email"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Problema",
        "parameters": {
          "message": "Descreva o problema:",
          "variableName": "issue"
        }
      }
    },
    {
      "id": "switch_1",
      "type": "switch",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Prioridade",
        "parameters": {
          "message": "Urgência:\n1 - Baixa\n2 - Média\n3 - Alta\n4 - Crítica",
          "variableName": "priority_input",
          "cases": [
            { "value": "1", "label": "Low" },
            { "value": "2", "label": "Medium" },
            { "value": "3", "label": "High" },
            { "value": "4", "label": "Critical" }
          ]
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Mapear Prioridade",
        "parameters": {
          "variableName": "priority",
          "value": "{{priority_input}}"
        }
      }
    },
    {
      "id": "salesforce_1",
      "type": "salesforce",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Criar Caso",
        "parameters": {
          "resource": "case",
          "operation": "create",
          "accessToken": "{{salesforce_token}}",
          "instanceUrl": "https://sua-instancia.salesforce.com",
          "subject": "WhatsApp: {{issue}}",
          "description": "Cliente: {{customer_name}}\nEmail: {{customer_email}}\n\nProblema: {{issue}}",
          "status": "New",
          "priority": "{{priority}}",
          "origin": "WhatsApp",
          "type": "Problem"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1700, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "Caso registrado! Número: {{salesforce_1.CaseNumber}}. Nossa equipe entrará em contato em breve."
        }
      }
    },
    {
      "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": "email_1" },
    { "source": "email_1", "target": "input_2" },
    { "source": "input_2", "target": "switch_1" },
    { "source": "switch_1", "target": "variable_1" },
    { "source": "variable_1", "target": "salesforce_1" },
    { "source": "salesforce_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Olá! Sou o assistente de suporte. Vou registrar seu problema.
Sistema: Seu nome:
Usuário: João Silva
Sistema: Email:
Usuário: joao@email.com
Sistema: Descreva o problema:
Usuário: Sistema não está abrindo
Sistema: Urgência:
1 - Baixa
2 - Média
3 - Alta
4 - Crítica
Usuário: 3
Sistema: Caso registrado! Número: 00001234. Nossa equipe entrará em contato em breve.

Exemplo 2: Caso com Contact Existente

Objetivo: Criar caso associado a contato já cadastrado

JSON para Importar

{
  "name": "Caso para Cliente Existente - 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": "Problema",
        "parameters": {
          "message": "Olá! Como posso ajudar? Descreva o problema:",
          "variableName": "problem"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Contact ID",
        "parameters": {
          "variableName": "contact_id",
          "value": "0035g00000ABC123"
        }
      }
    },
    {
      "id": "variable_2",
      "type": "variable",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Account ID",
        "parameters": {
          "variableName": "account_id",
          "value": "0015g00000XYZ789"
        }
      }
    },
    {
      "id": "salesforce_1",
      "type": "salesforce",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Criar Caso",
        "parameters": {
          "resource": "case",
          "operation": "create",
          "accessToken": "{{salesforce_token}}",
          "instanceUrl": "https://sua-instancia.salesforce.com",
          "subject": "Solicitação via WhatsApp",
          "description": "{{problem}}",
          "contactId": "{{contact_id}}",
          "accountId": "{{account_id}}",
          "status": "New",
          "priority": "Medium",
          "origin": "WhatsApp"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "Caso criado com sucesso! ID: {{salesforce_1.id}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "variable_1" },
    { "source": "variable_1", "target": "variable_2" },
    { "source": "variable_2", "target": "salesforce_1" },
    { "source": "salesforce_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Olá! Como posso ajudar? Descreva o problema:
Usuário: Preciso de ajuda com a configuração do sistema
Sistema: Caso criado com sucesso! ID: 5005g00000DEF456

Resposta do Node

{
  "id": "5005g00000ABC123",
  "success": true,
  "errors": [],
  "CaseNumber": "00001234"
}

Boas Práticas

SIM:

  • Sempre definir origin como "WhatsApp" para rastreamento
  • Associar caso a contactId e accountId quando disponível
  • Definir priority baseada na urgência informada pelo cliente
  • Incluir informações do cliente na description
  • Usar subject claro e descritivo
  • Capturar detalhes do problema antes de criar caso
  • Salvar CaseNumber para referência futura

NÃO:

  • Criar casos sem subject ou description
  • Ignorar prioridade crítica reportada pelo cliente
  • Criar caso sem associar a cliente quando possível
  • Usar descrições genéricas que não ajudam o atendimento
  • Esquecer de definir origin (rastreamento de canal)

Dicas

💡 Dica 1: Após criar caso, use SALESFORCE_CASE_ADD_COMMENT para adicionar updates conforme a conversa avança.

💡 Dica 2: Combine com SALESFORCE_TASK_CREATE para criar tarefa de follow-up para o time de suporte.

💡 Dica 3: Use campos customizados para rastrear produto afetado, versão, ambiente (prod/teste), impacto nos usuários.

💡 Dica 4: Implemente regra: casos com priority "Critical" disparam notificação imediata para gestor de suporte.

💡 Dica 5: Use SALESFORCE_CASE_UPDATE para mudar status conforme caso é trabalhado: New → Working → Escalated → Closed.

Próximos Nodes

SALESFORCE_CASE_UPDATE - Atualizar status do caso → SALESFORCE_CASE_ADD_COMMENT - Adicionar comentário ao caso → SALESFORCE_CASE_GET - Buscar detalhes do caso → SALESFORCE_CONTACT_CREATE - Criar contato antes do caso