Skip to Content
VersõesUnstableAPILead

/unstable/leads/criar

Method: POST

Essa rota recebe um lead e dispara a notificação via whatsapp para o responsável

O lead é sempre entregue à conta dona do token usado na chamada. O slug do listingId precisa ser o dessa conta — se for de outra, a resposta é 403 e nada é criado. Para enviar leads a outra imobiliária ou corretor, use o token dela.

Lead.ts
export interface Lead { // formato [slug-do-corretor]#[base36Id-do-imóvel] // null = lead sem imóvel (veja "Lead sem imóvel" abaixo) listingId: string | null; origin: LeadOrigin; name: string | null; phone: string | null; whatsapp: string | null; email: string | null; message: string | null; transactionType: TransactionType; } type LeadOrigin = | "ZAP" | "CHAVES_NA_MAO" | "CASA_MINEIRA" | "IMOVEL_WEB" | "SP_IMOVEL" | "INDICACAO" | "SITE" | "WHATSAPP" | "PLACA" | "GOOGLE" | "META" | "PARCERIA" | "OUTROS"; type TransactionType = "SELL" | "RENT";
actions.ts
export async function createLead(lead: Lead) { const headers = new Headers(); headers.append("Authorization", `Bearer ${env.NONSTOP_TOKEN}`); const response = await fetch( `https://www.usenonstop.com/api/unstable/leads/criar`, { method: "POST", headers, body: JSON.stringify(lead), }, ); if (response.ok) return (await response.json()) as string; return null; }

Lead sem imóvel

Nem todo atendimento chega a um anúncio: o cliente pede para falar com uma pessoa, tira uma dúvida geral ou encerra a conversa antes de citar um imóvel. Para esses casos envie listingId: null.

  • O campo continua obrigatório. Lead sem imóvel é listingId: null, explícito. Corpo sem o campo listingId segue respondendo 400.
  • Quem recebe é o dono do token, como em toda lead. Sem anúncio não há slug para conferir, só isso muda.
  • O restante é igual à lead com imóvel: entra no CRM do responsável, dispara o aviso por WhatsApp e e-mail e o webhook lead:create — que chega com property: null.
  • transactionType continua obrigatório. É ele que decide o funil do CRM em que o cliente entra: SELL no de compradores, RENT no de locatários.
  • Como não há anúncio para dar contexto ao corretor, aproveite o campo message para resumir o atendimento.
lead-sem-imovel.json
{ "listingId": null, "origin": "WHATSAPP", "name": "Maria Souza", "phone": null, "whatsapp": "+5511999998888", "email": null, "message": "Pediu para falar com um corretor. Procura 3 dormitórios em Pinheiros, até R$ 2 milhões.", "transactionType": "SELL" }

/unstable/leads/devolver

Method: POST

Rota da IA do atendimento por IA: devolve a lead que a IA recebeu, já atendida. Só aqui a lead chega ao corretor (CRM, WhatsApp e e-mail), sem criar outra lead e sem passar pelo rodízio de novo. Os webhooks de leads não recebem a lead de novo.

Use o token da API da imobiliária que ligou o serviço. Lead de outra imobiliária responde 404, como lead inexistente.

ReturnedLead.ts
export interface ReturnedLead { // o `lead.id` que chegou no envio para a IA leadId: string; // resumo do atendimento, até 4.000 caracteres. Vira a mensagem da lead, // com o texto original do portal logo abaixo. summary: string; }
RespostaQuando
200 {"ok":true}A lead foi entregue ao corretor.
200 {"ok":true,"message":"lead já tinha sido entregue ao corretor"}A devolução foi repetida, ou a lead já tinha ido para o corretor porque a entrega à IA falhou ou o serviço foi desligado. O resumo fica guardado e ninguém é avisado de novo.
400Corpo inválido ou token inválido.
404leadId desconhecido ou de outra imobiliária.

Como a resposta repetida também é 200, dá para reenviar a devolução com segurança se a sua chamada cair no meio.

actions.ts
export async function returnLead(lead: ReturnedLead) { const response = await fetch( `https://www.usenonstop.com/api/unstable/leads/devolver`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${env.NONSTOP_TOKEN}`, }, body: JSON.stringify(lead), }, ); return response.ok; }
Last updated on