Integrações

Conecte seus produtos Ciranda e o n8n.

Produtos

Defina o remetente de email de cada produto. Esses dados são usados quando o CRM dispara mensagens.

Nenhum produto cadastrado.

Webhook do n8n (envio)

O CRM envia para esta URL toda vez que precisar disparar email ou WhatsApp. Cole aí a URL do seu fluxo n8n.

Payload enviado:
{
  "channel": "email" | "whatsapp",
  "to": { "email": "...", "phone": "...", "name": "..." },
  "product": { "slug": "...", "name": "..." },
  "subject": "...",
  "body": "...",
  "meta": { "send_log_id": "...", "sequence_id": "...", "campaign_id": "..." }
}
Callback (status do envio):
POST /api/public/n8n/callback

Webhooks de entrada (por produto)

Cada produto Lovable envia novos contatos para o CRM via:

POST /api/public/ingest · header: X-CRM-Key: SUA_CHAVE
{
  "email": "lead@exemplo.com",       // obrigatório
  "name": "Nome",                     // opcional — envie sempre que tiver
  "phone": "+55...",                  // opcional — envie sempre que tiver
  "cpf": "...",                       // opcional — envie sempre que tiver
  "event_type": "signup",             // signup | profile_completed | webinar_registered | purchase | ...
  "custom_fields": {                  // opcional, faz merge no contato (ex: gênero, idade, interesses)
    "genero": "F",
    "origem": "landing-eux"
  },
  "payload": { }                      // opcional, dados extras do evento
}
Dica importante: envie name, phone e cpf em todo evento (não só no signup). Qualquer campo presente sobrescreve o valor atual no CRM, mantendo os dados sincronizados quando o usuário edita o perfil no produto. Telefones são normalizados automaticamente para o formato +55DDDNNNNNNNN.
Ver snippet pronto (fetch)
await fetch("/api/public/ingest", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-CRM-Key": "SUA_CHAVE_AQUI",
  },
  body: JSON.stringify({
    email: user.email,
    name: user.name,
    phone: user.phone,
    event_type: "signup",
    custom_fields: { genero: "F" },
  }),
});

Atualização cadastral (sem registrar evento)

Use este endpoint quando o usuário editar o perfil no produto. Atualiza só os dados do contato no CRM, sem mexer em score, timeline ou eventos.

POST /api/public/contact-update · header: X-CRM-Key: SUA_CHAVE
Ver snippet pronto (fetch)
await fetch("/api/public/contact-update", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-CRM-Key": "SUA_CHAVE_AQUI",
  },
  body: JSON.stringify({
    email: user.email,        // obrigatório (chave de busca)
    name: user.name,          // opcional
    phone: user.phone,        // opcional
    cpf: user.cpf,            // opcional
  }),
});
// Retorna: { contact_id, updated_fields: ["name","phone",...] }
// 404 se o email não existir no CRM
📄 Guia completo para o time de produto — passo a passo do que cada produto precisa implementar (telefone E.164, eventos, /contact-update).