SoftSales CRM · Guia oficial
Do primeiro lead à automação completa.
Aprenda a operar o CRM, receber leads de qualquer sistema e enviar eventos seguros para suas automações.
API disponível
REST + JSON- Autenticação
- Bearer ou HMAC
- Entrada
- Idempotente
- Saída
- Assinada
Operação
Como usar o CRM
O fluxo mais simples começa no funil e termina no acompanhamento comercial.
- 1Prepare o funil
No seletor de funil, clique em + para criar um novo processo com suas etapas, por exemplo: Novo, Qualificado, Proposta e Fechado.
- 2Cadastre ou receba leads
Use o botão Novo lead ou crie um endpoint na área de Integrações para receber contatos automaticamente.
- 3Trabalhe no Kanban
Abra um cartão para registrar informações e arraste-o entre as etapas. Cada movimentação fica registrada.
- 4Configure campos personalizados
Em Configurações → Campos personalizados, crie os campos reutilizáveis do funil. Eles aparecem no detalhe de cada lead e usam a mesma chave em
custom_fieldsna API e nos webhooks. - 5Converta ou reverta um cliente
No detalhe do lead, use Converter em cliente. Se precisar desfazer, use Marcar como não cliente; o histórico e as propostas permanecem preservados.
- 6Crie propostas
Em Propostas, selecione o cliente, informe itens, valores e validade e acompanhe o status da negociação.
- 7Programe a próxima ação
Crie tarefas, ligações, reuniões ou contatos por WhatsApp. O alerta superior avisa sobre atividades próximas e atrasadas.
Administradores gerenciam estrutura e usuários. Gestores acompanham equipes e operadores trabalham os leads liberados para sua função.
Produtividade
Atividades, alertas e calendário
No card ou no detalhe do lead, clique em Nova atividade. Defina tipo, responsável, prioridade e data. A próxima ação fica visível no Kanban.
- 1Central de alertas
O ícone no topo mostra tarefas vencidas e previstas para as próximas 48 horas. Clique em um alerta para abrir diretamente a aba de atividades daquele lead.
- 2Lista operacional
Em Atividades, filtre por abertas, hoje, vencidas, concluídas ou responsável.
- 3Calendário
Em Calendário, navegue pelos meses e clique em um compromisso para abrir o lead e seu histórico.
Orquestração
Automações internas
Abra Automações e crie regras do tipo “quando/então”. As regras podem ser pausadas e reativadas sem perder o histórico.
- Gatilhos: lead criado, entrada em uma etapa específica ou lead ganho.
- Ações: criar atividade com prazo ou atribuir um responsável.
- Execuções: cada processamento é registrado para auditoria e diagnóstico.
Atendimento oficial
WhatsApp Business + Meta
O SoftSales usa a API oficial hospedada pela Meta. Depois da preparação inicial do aplicativo SoftSales, cada administrador conecta sua conta em WhatsApp → Configurações → Conectar nova conta, entra com o Facebook e escolhe o portfólio, a conta do WhatsApp e o número. Token, IDs, webhook e qualidade são configurados pelo servidor.
Antes de começar
- Uma conta pessoal do Facebook com acesso de administrador ao Portfólio Empresarial da empresa.
- Razão social, endereço, site da empresa, política de privacidade e dados coerentes para a verificação empresarial.
- Um número capaz de receber SMS ou ligação. Para coexistência, ele deve estar no aplicativo WhatsApp Business, não no WhatsApp pessoal.
- Uma forma de pagamento cadastrada no WhatsApp Manager. A Meta cobra diretamente pelas conversas conforme sua tabela vigente.
Parte 1 — criar o aplicativo na Meta
- 1Crie um aplicativo empresarial
Acesse Meta for Developers → Meus aplicativos, clique em Criar aplicativo, escolha o caso de uso empresarial e vincule o Portfólio Empresarial da SoftSales.
- 2Adicione o produto WhatsApp
No painel do aplicativo, adicione WhatsApp e conclua o início rápido. Anote o App ID em Configurações → Básico. O App Secret deve ficar somente no servidor.
- 3Cadastre domínio e URLs legais
Em Configurações → Básico, informe
softsales.com.brcomo domínio, a URL da política de privacidade, os termos e a exclusão de dados. Use sempre HTTPS. - 4Crie o Login for Business
Adicione Facebook Login for Business, habilite login pelo SDK JavaScript e inclua
https://softsales.com.brnos domínios permitidos pelo SDK. - 5Crie a configuração Embedded Signup
No produto WhatsApp/Embedded Signup, crie uma configuração solicitando
whatsapp_business_managementewhatsapp_business_messaging. Copie o Configuration ID.
Parte 2 — habilitar o CRM na VPS
No computador autorizado para publicar o CRM, execute o configurador e informe App ID, Configuration ID e App Secret quando solicitado:
& "C:\Users\rodri\Documents\Codex\2026-07-20\eu\ops\configure-meta-whatsapp.ps1"Depois, abra WhatsApp → Configurações → Para começar. O CRM mostrará a URL do webhook-base e o token de verificação. No painel da Meta, em WhatsApp → Configuração → Webhook, cole os dois valores e assine pelo menos o campo messages. O SoftSales configura automaticamente um callback individual em cada WABA conectado.
Parte 3 — conectar o número
- 1Escolha o modo
Aplicativo WhatsApp Business tenta usar coexistência; Número novo ou migrado transfere o atendimento para a Cloud API e solicita um PIN de seis números.
- 2Continue com o Facebook
Selecione ou crie o Portfólio Empresarial e a Conta do WhatsApp Business. Escolha o número e faça a verificação solicitada pela Meta.
- 3Confirme as permissões
O SoftSales recebe um código temporário, troca-o no servidor, valida se o número pertence à conta autorizada e armazena o token de forma criptografada.
- 4Faça o teste
Envie uma mensagem de outro celular para o número conectado. Ela deve aparecer na Central de WhatsApp e criar ou vincular automaticamente um lead.
O aplicativo da SoftSales precisa estar em modo ativo e ter acesso avançado aprovado pela Meta para as permissões do WhatsApp. Prepare uma gravação mostrando o login, a seleção da conta, a caixa de entrada e o envio de uma resposta durante a análise.
A coexistência depende da elegibilidade liberada pela Meta para o aplicativo e para a conta. Fora da janela de atendimento ao cliente, mensagens iniciadas pela empresa precisam usar um modelo aprovado. Consulte também a coleção oficial da Meta.
API de entrada
Receber leads externos
O endpoint de entrada cria um lead novo ou atualiza o existente. Ele funciona com formulários, Meta Ads, Google Ads, n8n, Make, Zapier e sistemas próprios.
https://softsales.com.br/api/v1/inbox/SEU_ENDPOINT_ID1. Crie o endereço de entrada
No CRM, abra Administração → Integrações. Na área Entrada de leads, escolha o funil e a coluna de destino, crie o endpoint e copie o segredo. O segredo é exibido somente na criação.
2. Envie o lead
Use o segredo como Bearer Token e envie uma chave única no cabeçalho Idempotency-Key. Repetir exatamente a mesma solicitação não cria um lead duplicado.
curl -X POST "https://softsales.com.br/api/v1/inbox/SEU_ENDPOINT_ID" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_SEGREDO" \
-H "Idempotency-Key: meta-lead-123456" \
-d '{
"external_id": "meta-lead-123456",
"name": "Maria da Silva",
"email": "maria@empresa.com.br",
"phone": "+55 11 99999-9999",
"company": "Empresa Exemplo",
"source": "Meta Ads",
"value": 1500,
"tags": ["campanha-julho"],
"tracking": {
"utm_source": "facebook",
"utm_campaign": "julho"
}
}'Campos aceitos
| Campo | Também aceita | Uso |
|---|---|---|
name | nome | Nome do contato. Obrigatório. |
phone | telefone, whatsapp | Telefone do lead. |
company | empresa | Empresa ou organização. |
source | origem | Origem comercial. |
value | valor | Valor estimado do negócio. |
external_id | — | ID do lead no sistema de origem. |
email | — | E-mail válido do contato. |
tags | — | Lista de etiquetas. |
tracking | UTMs | Dados de campanha e rastreamento. |
custom_fields | — | Campos adicionais em formato JSON. |
{
"nome": "Maria da Silva",
"telefone": "+55 11 99999-9999",
"empresa": "Empresa Exemplo",
"origem": "Site",
"valor": 1500,
"tags": ["formulario-site"],
"custom_fields": {
"produto": "Consultoria",
"mensagem": "Quero receber uma proposta"
}
}Respostas
Automação
Configurar no n8n
- 1Adicione o nó HTTP Request
Escolha o método POST e cole a URL do endpoint criada no SoftSales.
- 2Adicione os cabeçalhos
Authorization:Bearer SEU_SEGREDO;Idempotency-Key: um ID único do lead;Content-Type:application/json. - 3Envie o corpo como JSON
Mapeie os dados do nó anterior para
name,email,phone,sourcee os demais campos necessários. - 4Teste e ative
Execute o nó uma vez. Confirme o cartão no Kanban e só então ative o workflow.
No n8n, use o ID do lead recebido da origem. Se não existir, combine origem, e-mail e data de criação de forma estável.
Autenticação avançada
Enviar com assinatura HMAC
Para integrações próprias, você pode substituir o Bearer Token por uma assinatura HMAC-SHA256. Assine exatamente timestamp.corpo_original. O horário deve estar dentro de uma janela de cinco minutos. Envie também external_id no corpo ou uma Idempotency-Key.
const crypto = require("node:crypto");
const payload = {
external_id: "site-lead-98765",
name: "Maria da Silva",
email: "maria@empresa.com.br"
};
const timestamp = Date.now().toString();
const rawBody = JSON.stringify(payload);
const signature = crypto
.createHmac("sha256", process.env.NEXO_WEBHOOK_SECRET)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
await fetch("https://softsales.com.br/api/v1/inbox/SEU_ENDPOINT_ID", {
method: "POST",
headers: {
"content-type": "application/json",
"x-webhook-timestamp": timestamp,
"x-webhook-signature": `sha256=${signature}`,
},
body: rawBody,
});Calcule a assinatura sobre a mesma sequência de bytes enviada na requisição. Não formate ou reconstrua o JSON depois de assinar.
Webhook de saída
Receber eventos do SoftSales
Na área Integrações, cadastre uma URL HTTPS e um segredo para receber o evento lead.column_changed sempre que um lead mudar de etapa. Cada integração pode ser desativada e reativada sem apagar sua configuração.
Cabeçalhos enviados
x-crm-event-id— identificador único do evento.x-crm-timestamp— horário usado na assinatura.x-crm-signature— assinatura no formatosha256=....
{
"event": "lead.column_changed",
"event_id": "evt_01J...",
"event_date": "2026-07-21T18:30:00.000Z",
"funnel": { "id": "fun_01J...", "name": "Comercial" },
"previous_column": { "id": "col_01J...", "name": "Novo" },
"current_column": { "id": "col_02J...", "name": "Qualificado" },
"lead": {
"id": "lead_01J...",
"external_id": "meta-lead-123456",
"name": "Maria da Silva",
"email": "maria@empresa.com.br",
"phone": "+55 11 99999-9999",
"responsible_user_id": null,
"custom_fields": {},
"version": 3
},
"changed_by": { "type": "user", "id": "usr_01J...", "name": "Ana" }
}const crypto = require("node:crypto");
const timestamp = request.headers["x-crm-timestamp"];
const received = request.headers["x-crm-signature"];
const rawBody = request.rawBody; // corpo original, sem remontar o JSON
const expected = "sha256=" + crypto
.createHmac("sha256", process.env.NEXO_WEBHOOK_SECRET)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
if (!crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected))) {
throw new Error("Assinatura inválida");
}Responda com qualquer código 2xx depois de processar ou armazenar o evento. Em caso de falha, o SoftSales registra a tentativa e faz novas entregas.
Suporte
Erros e diagnóstico
401 — Token ou assinatura inválida
Confirme se o segredo pertence ao endpoint usado, se o prefixo é Bearer e se não há espaços extras. Em HMAC, confira o corpo original e o timestamp.
400 — Dados inválidos
Verifique se name ou nome foi enviado, se o e-mail é válido e se o corpo está em JSON com Content-Type: application/json.
409 — Conflito de idempotência
A mesma Idempotency-Key foi reutilizada com conteúdo diferente. Gere uma chave nova para uma nova operação.
429 — Muitas requisições
O limite de proteção foi atingido. Aguarde o tempo informado em error.details.retryAfterSeconds e tente novamente sem alterar a chave de idempotência.
O n8n executou, mas não apareceu lead
Abra a saída do nó HTTP Request, confira o código da resposta e valide se o endpoint aponta para o funil e a coluna esperados.
O webhook de saída não chegou
Confirme que a URL é pública, usa HTTPS e responde em poucos segundos. Consulte o histórico de entregas em Integrações para ver as tentativas.
Boas práticas
Checklist de segurança
- ✓Guarde o segredo somente no servidor ou no cofre de credenciais da automação.
- ✓Nunca coloque o segredo em JavaScript executado no navegador ou em repositório público.
- ✓Use somente URLs HTTPS e uma chave de idempotência única por operação.
- ✓Valide a assinatura dos webhooks antes de processar os dados.
- ✓Para trocar um segredo, crie um novo endpoint, atualize a integração e desative o antigo.
Referência para sistemas