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. 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. 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. 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. 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. 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. 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ê

ParteQuem fazObservação
Tela e fluxo do appLovableA partir do seu prompt
Edge function e secretsLovable + SupabaseOs secrets ficam no Supabase, não no código (documentação lida em 11/11/2026)
Conexão do número por QR codeVocê, no painel da ZapZapUma vez por número
Ritmo, consentimento e aquecimentoVocê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.