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/callbackWebhooks 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_CHAVEVer 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).