softsalesdocs

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
01

Operação

Como usar o CRM

O fluxo mais simples começa no funil e termina no acompanhamento comercial.

  1. 1
    Prepare o funil

    No seletor de funil, clique em + para criar um novo processo com suas etapas, por exemplo: Novo, Qualificado, Proposta e Fechado.

  2. 2
    Cadastre ou receba leads

    Use o botão Novo lead ou crie um endpoint na área de Integrações para receber contatos automaticamente.

  3. 3
    Trabalhe no Kanban

    Abra um cartão para registrar informações e arraste-o entre as etapas. Cada movimentação fica registrada.

  4. 4
    Configure 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_fields na API e nos webhooks.

  5. 5
    Converta 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.

  6. 6
    Crie propostas

    Em Propostas, selecione o cliente, informe itens, valores e validade e acompanhe o status da negociação.

  7. 7
    Programe 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.

Controle de acesso

Administradores gerenciam estrutura e usuários. Gestores acompanham equipes e operadores trabalham os leads liberados para sua função.

02

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.

  1. 1
    Central 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.

  2. 2
    Lista operacional

    Em Atividades, filtre por abertas, hoje, vencidas, concluídas ou responsável.

  3. 3
    Calendário

    Em Calendário, navegue pelos meses e clique em um compromisso para abrir o lead e seu histórico.

03

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.
04

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

  1. 1
    Crie 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.

  2. 2
    Adicione 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.

  3. 3
    Cadastre domínio e URLs legais

    Em Configurações → Básico, informe softsales.com.br como domínio, a URL da política de privacidade, os termos e a exclusão de dados. Use sempre HTTPS.

  4. 4
    Crie o Login for Business

    Adicione Facebook Login for Business, habilite login pelo SDK JavaScript e inclua https://softsales.com.br nos domínios permitidos pelo SDK.

  5. 5
    Crie a configuração Embedded Signup

    No produto WhatsApp/Embedded Signup, crie uma configuração solicitando whatsapp_business_management e whatsapp_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

  1. 1
    Escolha 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.

  2. 2
    Continue 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.

  3. 3
    Confirme 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.

  4. 4
    Faç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.

Para conectar contas de clientes

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.

Coexistência e janela de atendimento

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.

02

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.

POSThttps://softsales.com.br/api/v1/inbox/SEU_ENDPOINT_ID

1. 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.

Exemplo completo com Bearer Token
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

CampoTambém aceitaUso
namenomeNome do contato. Obrigatório.
phonetelefone, whatsappTelefone do lead.
companyempresaEmpresa ou organização.
sourceorigemOrigem comercial.
valuevalorValor estimado do negócio.
external_idID do lead no sistema de origem.
emailE-mail válido do contato.
tagsLista de etiquetas.
trackingUTMsDados de campanha e rastreamento.
custom_fieldsCampos adicionais em formato JSON.
O corpo também pode usar nomes em português
{
  "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

201Lead criado
200Lead atualizado ou envio repetido
400Dados inválidos
401Autenticação inválida
409Conflito de idempotência
429Muitas requisições; aguarde e tente novamente
03

Automação

Configurar no n8n

  1. 1
    Adicione o nó HTTP Request

    Escolha o método POST e cole a URL do endpoint criada no SoftSales.

  2. 2
    Adicione os cabeçalhos

    Authorization: Bearer SEU_SEGREDO; Idempotency-Key: um ID único do lead; Content-Type: application/json.

  3. 3
    Envie o corpo como JSON

    Mapeie os dados do nó anterior para name, email, phone, source e os demais campos necessários.

  4. 4
    Teste e ative

    Execute o nó uma vez. Confirme o cartão no Kanban e só então ative o workflow.

Dica para a chave única

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.

04

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.

Node.js — gerar e enviar a assinatura
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,
});
O corpo precisa ser idêntico

Calcule a assinatura sobre a mesma sequência de bytes enviada na requisição. Não formate ou reconstrua o JSON depois de assinar.

05

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 formato sha256=....
Exemplo de evento
{
  "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" }
}
Node.js — validar a assinatura recebida
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.

06

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.

07

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

Precisa do contrato em formato aberto?

A especificação OpenAPI pode ser importada em Postman, Insomnia e geradores de clientes.
Abrir OpenAPI JSON