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:
- Gestão de Suporte: Centralizar e organizar todos os tickets de atendimento
- SLA e Métricas: Medir tempo de resposta, resolução e satisfação do cliente
- Automação de Atendimento: Criar casos automaticamente a partir de conversas no WhatsApp
- 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:
- Recebe os dados: Coleta subject, status, priority, origin e descrição
- Processa variáveis: Substitui variáveis do contexto pelos valores reais
- Valida dados: Todos os campos são opcionais, mas subject é altamente recomendado
- Monta payload: Cria objeto com informações do caso
- Autentica no Salesforce: Usa accessToken e instanceUrl
- Faz requisição POST: Envia para
/services/data/v60.0/sobjects/Case - Retorna ID do caso: Salesforce responde com número/ID do caso criado
- 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
- Solicitação de suporte: Cliente reporta problema técnico via WhatsApp
- Dúvida sobre produto: Cliente tem questão que precisa ser respondida pela equipe
- Reclamação: Cliente insatisfeito registra reclamação formal
- Solicitação de serviço: Cliente solicita instalação, manutenção ou configuração
- 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