App gerado por IA com backend Supabase
WhatsApp no Lovable: Edge Function do Supabase, Secrets e o prompt certo
O Lovable gera apps a partir de conversa e, com a integração com o Supabase, usa um projeto seu como backend, inclusive com edge functions (funções de servidor). Segundo a documentação (lida em 11/11/2026), chamar APIs externas com chaves secretas é um uso típico das edge functions, e os segredos ficam no Supabase, fora do código do app. É exatamente o lugar da chave da ZapZap.
Atualizado em
Por que conectar
Você descreve o produto (um agendador, um CRM de leads, um portal de pedidos) e o Lovable monta a tela. O que ele não deve fazer é chamar a API de WhatsApp direto do navegador, porque a chave ficaria exposta. A solução é uma edge function que recebe o pedido do app e fala com a ZapZap. A ZapZap conecta números por um canal não oficial: o WhatsApp pode limitar ou bloquear qualquer número, então ritmo, consentimento e aquecimento contam. São R$15 por número ativo/mês, pré-pago, sem cobrança por mensagem, e você começa com crédito de boas-vindas ao verificar o telefone, sujeito à campanha vigente.
Passo a passo
- 1
Conecte o Supabase ao projeto
Na documentação do Lovable, a integração com o Supabase liga um projeto seu como backend e permite deploy de edge functions. Conecte antes de pedir qualquer envio de WhatsApp.
- 2
Adicione os três secrets
Em More > Settings > Secrets (ou quando o Lovable pedir pelo campo seguro do chat), crie ZAPZAP_API_KEY, ZAPZAP_API_SECRET e ZAPZAP_INSTANCE_ID. A documentação diz que os secrets são injetados nas edge functions em tempo de execução e nunca vão para o código do front nem para o navegador. As chaves vêm de Settings > API em app.zapzapapi.com.
- 3
Peça a função com um prompt fechado
Exemplo: "Crie uma edge function send-whatsapp que recebe number e text, valida número com 10 a 15 dígitos e chama POST https://api.zapzapapi.com/api/v1/{instanceId}/send/text com os cabeçalhos x-api-key e x-api-secret lidos dos secrets. Não use a chave no front." Cole o código do exemplo como referência.
- 4
Chame a função pelo app, com usuário autenticado
No front, o app usa o cliente do Supabase para invocar send-whatsapp. Exija login antes: uma função aberta que envia mensagem vira um canal de spam com o seu número. Limite o tamanho do texto e a frequência por usuário.
- 5
Receba mensagens por outra edge function
Crie uma segunda função e cadastre a URL dela com PUT /instances/{id}/webhook (webhook_url e events). A ZapZap devolve o segredo whsec_ da instância: guarde como secret e valide o cabeçalho X-ZapZap-Signature (t=<unix>,v1=<hmac_hex>, HMAC-SHA256 sobre t + ponto + corpo bruto, tolerância de 5 minutos).
- 6
Teste com o seu próprio número
Antes de ligar para clientes, envie para você, confira a resposta HTTP e olhe o log da função. Use GET /{instanceId}/instance/status para saber se a instância está conectada.
Exemplo
// Supabase Edge Function (Deno): supabase/functions/send-whatsapp/index.ts
// Secrets: ZAPZAP_API_KEY, ZAPZAP_API_SECRET, ZAPZAP_INSTANCE_ID (never in the frontend)
const cors = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "authorization, x-client-info, apikey, content-type",
};
Deno.serve(async (req: Request) => {
if (req.method === "OPTIONS") return new Response("ok", { headers: cors });
const { number, text } = await req.json();
if (!/^\d{10,15}$/.test(String(number)) || !text) {
return new Response(JSON.stringify({ error: "invalid number or text" }), { status: 400, headers: cors });
}
const r = await fetch("https://api.zapzapapi.com/api/v1/" + Deno.env.get("ZAPZAP_INSTANCE_ID") + "/send/text", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": Deno.env.get("ZAPZAP_API_KEY") ?? "",
"x-api-secret": Deno.env.get("ZAPZAP_API_SECRET") ?? "",
},
body: JSON.stringify({ number, text }),
});
return new Response(await r.text(), { status: r.status, headers: { ...cors, "Content-Type": "application/json" } });
});Ilustrativo. Os campos e endpoints exatos estão na documentação.
O que o Lovable resolve e o que continua com você
| Parte | Quem faz | Observação |
|---|---|---|
| Tela e fluxo do app | Lovable | A partir do seu prompt |
| Edge function e secrets | Lovable + Supabase | Os secrets ficam no Supabase, não no código (documentação lida em 11/11/2026) |
| Conexão do número por QR code | Você, no painel da ZapZap | Uma vez por número |
| Ritmo, consentimento e aquecimento | Você | Veja o guia de aquecimento de chip |
Perguntas frequentes
Posso chamar a ZapZap direto do front do Lovable?
Não deve. A chave e o segredo dariam acesso total ao seu número se ficassem no navegador. Use uma edge function e guarde as chaves em Secrets.
Onde os secrets ficam?
No seu projeto Supabase. A documentação do Lovable (lida em 11/11/2026) diz que eles não aparecem no código nem no repositório e são injetados nas edge functions em tempo de execução.
O Lovable escreve a função sozinho?
Ele escreve e publica a função a partir da sua descrição. Revise o código gerado: confira que usa os secrets, valida o número e exige usuário autenticado.
Como recebo as respostas dos clientes?
Com um webhook apontando para outra edge function. Valide a assinatura X-ZapZap-Signature e use delivery_id para ignorar entregas repetidas.
Quanto custa?
São R$15 por número ativo/mês, pré-pago, sem cobrança por mensagem, e você começa com crédito de boas-vindas ao verificar o telefone, sujeito à campanha vigente.
Comece agora
Crie sua conta, conecte um número em minutos e teste a API com aquecimento e anti-bloqueio. R$15 por número ativo/mês, pré-pago, sem fidelidade.
