Pular para o conteúdo

Bolt, v0 e Replit

Em todas essas plataformas o padrão é o mesmo: o front-end chama uma rota do seu backend, e só o backend chama a TopTalking, com a chave guardada como variável de ambiente.

Navegador → rota do seu backend (/api/...) → https://platform.toptalking.com.br/v1
sem chave lê TOPTALKING_API_KEY

Um exemplo de rota de backend em Next.js (o mesmo raciocínio vale para Express, Flask, Edge Functions…):

app/api/whatsapp/boas-vindas/route.ts
import { NextResponse } from 'next/server';
const API = 'https://platform.toptalking.com.br/v1';
export async function POST(req: Request) {
const { nome, telefone, leadId } = await req.json();
const digitos = String(telefone ?? '').replace(/\D/g, '');
if (digitos.length < 10 || !nome || !leadId) {
return NextResponse.json({ erro: 'Dados inválidos' }, { status: 400 });
}
const res = await fetch(`${API}/messages`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.TOPTALKING_API_KEY}`, // só existe no servidor
'Content-Type': 'application/json',
'Idempotency-Key': `lead-${leadId}-boas-vindas`,
},
body: JSON.stringify({
to: digitos,
contact_name: nome,
text: `Olá, ${nome}! Recebemos seu contato e logo falamos com você por aqui.`,
}),
});
const body = await res.json();
if (!res.ok) {
// body.error = { type, code, message, request_id }
return NextResponse.json({ erro: body.error.message, codigo: body.error.code }, { status: 502 });
}
return NextResponse.json({ ok: true, mensagemId: body.id });
}

Projetos do Bolt costumam ser front-end (Vite + React). Para ter um backend, use a integração com Supabase do Bolt (Edge Functions) ou um framework com rotas de servidor (ex.: Next.js, Remix, Astro com SSR).

  • Guarde a chave como TOPTALKING_API_KEY nos secrets do backend escolhido (Supabase: Edge Functions → Secrets).
  • Se usar Supabase, os prompts do guia do Lovable funcionam quase sem mudança.
Quero integrar este projeto com a API da TopTalking (WhatsApp + CRM).
Documentação (leia antes de codar): https://platform.toptalking.com.br/llms-full.txt
URL base: https://platform.toptalking.com.br/v1 — cabeçalho "Authorization: Bearer <chave>".
Regras obrigatórias:
- A API NÃO aceita chamadas do navegador (sem CORS) e a chave NUNCA pode ir para o front-end.
Crie o backend com Supabase Edge Functions (conecte o Supabase se ainda não estiver conectado).
A chave fica no secret TOPTALKING_API_KEY e é lida com Deno.env.get("TOPTALKING_API_KEY").
- Nada de variável VITE_ com a chave. Nada de chave no código.
- Envio de mensagem sempre com o cabeçalho Idempotency-Key.
Tarefa: na página de checkout, depois que o pedido for criado, chame uma Edge Function "confirmar-pedido-whatsapp"
que envia POST /v1/messages com { "to": <telefone do cliente com 55 + DDD>, "contact_name": <nome>,
"text": "Olá, <nome>! Recebemos seu pedido #<id>. Avisaremos por aqui quando ele sair para entrega." }
e Idempotency-Key "pedido-<id>-confirmado". Trate erros pelo error.code ({ "error": { "type", "code", "message" } })
e não bloqueie a finalização do pedido se o WhatsApp falhar.