App generada por IA en el navegador
WhatsApp en Bolt: Secrets de la base, función de servidor y verificación antes del envío
Bolt genera y publica apps a partir de una conversación. La documentación de soporte de Bolt (leída el 11/11/2026) describe la pestaña Secrets de la base de datos: el valor queda disponible solo para funciones de servidor, no se muestra de nuevo después de guardarlo y no se escribe en los archivos del proyecto ni en el sitio publicado. Esa es la bóveda correcta para la clave de ZapZap.
Actualizado el
Por qué conectar
Le pides a Bolt un formulario de contacto, un panel de pedidos o un recordatorio de cita. La parte que habla con WhatsApp tiene que correr en el servidor. El flujo más seguro, y el que muestra este ejemplo, es verificar con POST /chat/check si el número tiene WhatsApp antes de enviar, lo que evita errores y envíos perdidos. ZapZap conecta números por un canal no oficial: WhatsApp puede limitar o bloquear cualquier número, así que el ritmo, el consentimiento y el calentamiento importan. Cuesta R$15 por número activo al mes, prepago, sin cobro por mensaje, y empiezas con un crédito de bienvenida al verificar el teléfono, sujeto a la campaña vigente.
Paso a paso
- 1
Conecta una base de datos al proyecto
En la documentación, la pestaña Secrets exige una base de datos conectada al proyecto. Conecta la base antes de continuar.
- 2
Guarda las claves en Secrets
Haz clic en el icono de la base en el menú superior, abre Secrets y guarda ZAPZAP_API_KEY, ZAPZAP_API_SECRET y ZAPZAP_INSTANCE_ID. El nombre distingue mayúsculas y minúsculas. En una cuenta individual solo el dueño ve los secrets; en una cuenta de equipo, el dueño, los co-dueños y los administradores. Las claves, en Settings > API de app.zapzapapi.com.
- 3
Pide la función de servidor
Prompt: "Crea una función de servidor que reciba number y text, llame a POST /chat/check de ZapZap con numbers: [number], y solo si el número existe llame a POST /send/text. Lee ZAPZAP_API_KEY, ZAPZAP_API_SECRET y ZAPZAP_INSTANCE_ID de los secrets. El frontend solo llama a esta función."
- 4
Revisa lo que generó Bolt
Busca tres errores comunes: clave escrita en el código, llamada hecha desde un componente del frontend y envío sin validar el número. Corrígelos pidiéndoselo a Bolt y compara con el ejemplo de esta página.
- 5
Prueba con un número tuyo y mira el estado de la instancia
Llama a la función con tu teléfono, revisa la respuesta y consulta GET /{instanceId}/instance/status. Si la instancia está desconectada, reconecta por código QR en el panel.
Ejemplo
// Server function (Deno edge function): check the number first, then send. Secrets: ZAPZAP_API_KEY, ZAPZAP_API_SECRET, ZAPZAP_INSTANCE_ID
const BASE = "https://api.zapzapapi.com/api/v1/" + Deno.env.get("ZAPZAP_INSTANCE_ID");
const headers = {
"Content-Type": "application/json",
"x-api-key": Deno.env.get("ZAPZAP_API_KEY") ?? "",
"x-api-secret": Deno.env.get("ZAPZAP_API_SECRET") ?? "",
};
Deno.serve(async (req: Request) => {
const { number, text } = await req.json();
const check = await fetch(BASE + "/chat/check", { method: "POST", headers, body: JSON.stringify({ numbers: [number] }) });
if (!check.ok) return new Response("check failed: " + check.status, { status: 502 });
const found = JSON.stringify(await check.json());
if (!found.includes(number)) return new Response("number not found", { status: 404 });
const send = await fetch(BASE + "/send/text", { method: "POST", headers, body: JSON.stringify({ number, text }) });
return new Response(await send.text(), { status: send.status });
});Ilustrativo. Los campos y endpoints exactos están en la documentación.
Por qué verificar el número antes de enviar
POST /{instanceId}/chat/check recibe numbers e informa cuáles tienen WhatsApp. Enviar solo a números que existen reduce errores y mantiene el historial limpio. No es garantía contra el bloqueo: el canal es no oficial y WhatsApp puede limitar números, así que envía solo a quien tiene relación contigo y mantén un ritmo humano.
Preguntas frecuentes
¿Dónde guardo la clave en Bolt?
En Secrets, por el icono de la base de datos. Según la documentación de Bolt (11/11/2026), el valor queda disponible solo para funciones de servidor y no va a los archivos del proyecto ni al sitio publicado.
¿Puedo llamar a la API desde un componente del frontend?
No. La clave quedaría en el navegador de cualquier visitante. Llama a la función de servidor y deja que solo ella hable con ZapZap.
¿La documentación de Bolt cubre webhooks de entrada?
La página que leí trata de secrets. Para recibir mensajes, crea otra función de servidor, registra la URL con PUT /instances/{id}/webhook y valida la X-ZapZap-Signature.
¿Necesito un plan de pago en Bolt?
La documentación que leí no lo informa; consulta la página de planes de Bolt.
¿Cuánto cuesta ZapZap?
Cuesta R$15 por número activo al mes, prepago, sin cobro por mensaje, y empiezas con un crédito de bienvenida al verificar el teléfono, sujeto a la campaña vigente.
Empieza ahora
Crea tu cuenta, conecta un número en minutos y prueba la API con calentamiento y anti-bloqueo. R$15 por número activo/mes, prepago, sin permanencia.
