Guía Bolt.new + v0
Tu app de Bolt o v0
envía email, SMS y WhatsApp.
Un prompt, una ruta de servidor, una llamada a la API: el mismo mensaje sale por email, WhatsApp y SMS desde tu propio buzón, tu número y tu móvil Android, y la clave nunca llega al navegador.
¿Con prisa? Resume este artículo con una IA
La respuesta corta
¿Cómo añades email, SMS y WhatsApp a una app de Bolt.new o v0?
Haz que Bolt.new o v0 escriba una ruta de servidor, un route handler de Next.js o una server function de Bolt, que envíe POST https://api.unlimitedmessaging.app/message con una clave de API leída de una variable de entorno del servidor. Una sola petición llega a una bandeja de entrada, a un chat de WhatsApp y a un móvil, desde tus propias cuentas, con un plan gratis y sin tarjeta.
v0 genera apps Next.js que se despliegan en Vercel, y Bolt.new genera proyectos full-stack, a menudo en Next.js o Vite con Bolt Database o Supabase. Los dos pueden escribir código de servidor. Eso importa, porque una clave de mensajería nunca debe estar en el bundle del navegador: el envío va en código que se ejecuta en el servidor.
Unlimited Messaging es una API de mensajería que envía desde cuentas que ya tienes: email desde tu buzón de Gmail o de tu dominio por IMAP/SMTP, WhatsApp desde tu propio número vinculado como WhatsApp Web, SMS desde la SIM de tu móvil Android con una app gratuita. El plan gratis no cobra por mensaje; los mensajes llevan una línea corta "Sent with UnlimitedMessaging.app".
Para una app hecha con vibe coding, lo que cuenta es la velocidad. En lugar de tres proveedores, tres SDK y tres verificaciones, el constructor con IA escribe una sola llamada fetch, y pruebas con mensajes reales esa misma tarde.
Cliente tipado para Node.js y Next.js: el SDK TypeScript. Varios canales en una llamada: email y WhatsApp en una sola petición a la API. SMS desde tu móvil: la app Android.

Por qué no programarlo a mano
¿Por qué se tarda tanto en programar a mano email, SMS y WhatsApp?
Los constructores con IA escriben el código en segundos. Lo lento es todo lo demás: proveedores, verificaciones, políticas y rarezas del despliegue.
Email: SMTP se lleva mal con los hosts serverless
Vercel bloquea el SMTP saliente por el puerto 25 y recomienda una API de email para la mayoría de los casos, y las Edge Functions de Supabase rechazan directamente los puertos 25 y 587. Una API de email pide entonces un dominio verificado y registros DNS antes de entregar a alguien que no seas tú.
SMS: números, registro, tarifa por segmento
Un proveedor como Twilio te alquila un número y cobra cada segmento, 0,0083 $ en Estados Unidos más las tarifas del operador. El tráfico a Estados Unidos desde un número largo normal necesita el registro A2P 10DLC, empezando por una tarifa de marca de 4,50 $ y una verificación.
WhatsApp: plantillas y límites
La Cloud API oficial de Meta exige una plantilla aprobada para todo lo que se envía fuera de la ventana de atención al cliente de 24 horas, revisada en 24 horas, con precio por mensaje de plantilla, y las cuentas nuevas limitadas a 250 destinatarios únicos cada 24 horas.
Más código que la IA puede hacer mal
Tres SDK y tres formatos de webhook son más archivos, más claves y más sitios donde un fragmento generado filtra un secreto o se traga un error. Un solo endpoint deja un diff lo bastante pequeño como para revisarlo.
Cara a cara
¿Qué stack de mensajería encaja con una app de Bolt.new o v0?
Lo que necesita cada opción habitual antes de que tu app pueda escribir a un usuario real.
| Nodemailer + SMTPEmail hecho a mano | ResendAPI de email | TwilioAPI de SMS y WhatsApp | Unlimited MessagingAPI de email, SMS y WhatsApp | |
|---|---|---|---|---|
| Canales | SMS y WhatsApp | Email, WhatsApp y SMS en una sola petición | ||
| Coste para probar | Gratis con tu propio buzón | Gratis: 3.000 emails al mes, 100 al día | Crédito de prueba, luego por mensaje | Plan gratis, sin coste por mensaje, línea de pie |
| Funciona en funciones serverless | Depende de las reglas de puertos del host | Sí, HTTPS | Sí, HTTPS | Sí, HTTPS |
| Configuración antes de usuarios reales | Credenciales SMTP | Dominio verificado y DNS | Número, 10DLC (EE. UU.), configuración de Meta para WhatsApp | Vincular buzón, escanear un QR, instalar la app Android |
| Respuestas entrantes | Montar tu propio sondeo IMAP | Webhooks de eventos de entrega | Webhooks | Bandeja en todos los planes, webhooks en los planes de pago |
| Escala | Los límites de tu buzón | Pensado para volumen | Pensado para volumen | Ritmo humano, sin envíos masivos; WhatsApp no oficial |
Precios y límites tomados de la página de cada proveedor, revisados el 9 de noviembre de 2026.
Paso a paso
De cero a un primer mensaje en cinco pasos
- 01
Crea una cuenta gratis
Regístrate en app.unlimitedmessaging.app con Google, GitHub o tu email. Sin tarjeta; el plan Gratis es permanente.
- 02
Conecta tus canales
Añade tu buzón por IMAP/SMTP, escanea un código QR para vincular WhatsApp e instala la app Android en un móvil con SIM para los SMS. Puedes empezar con uno solo.
- 03
Crea una clave de API
Abre la sección API del panel y crea una clave. Cópiala una vez.
- 04
Añade UM_API_KEY en el lado del servidor
v0: menú del proyecto, Settings, Environment Variables, con Development marcado para que la vista previa la vea. Bolt: el panel Secrets (icono de base de datos) para las server functions, o el menú del engranaje en un proyecto con Supabase.
- 05
Pega el prompt
El constructor escribe la ruta y la llamada. Prueba con tu propio número y tu bandeja antes de cualquier usuario real.
Copiar y pegar
¿Qué prompt pegas en Bolt.new o v0?
Pega esto en el chat. Pide una ruta de servidor, la clave desde el entorno y una confirmación de pedido. Pon tu propio disparador.
Añade mensajería a esta app con Unlimited Messaging (API REST, documentación: https://docs.unlimitedmessaging.app).
1. Crea una ruta de servidor: en Next.js, app/api/notify/route.ts (o una server action); en una app Vite en Bolt, una server function. Nunca llames a la API desde componentes de cliente.
2. Lee la clave de la variable de entorno UM_API_KEY. No le pongas el prefijo NEXT_PUBLIC_ ni VITE_, no la escribas en el código y dime dónde añadirla (v0: Settings > Environment Variables; Bolt: Secrets).
3. Envía POST https://api.unlimitedmessaging.app/message con "Authorization: Bearer <UM_API_KEY>" y el cuerpo JSON { "to": { "phone": "<E.164>", "email": "<email>" }, "subject": "...", "text": "...", "channels": [{ "channel": "EMAIL" }, { "channel": "WHATSAPP" }, { "channel": "SMS" }] }.
4. Escribe solo al usuario conectado, con sus datos de contacto leídos en el servidor. Devuelve el estado y el cuerpo de la respuesta de la API para que los errores se vean.
5. Lánzalo después del pago con una confirmación de pedido, y pídeme mi número y mi email para una primera prueba.// app/api/notify/route.ts
export async function POST(req: Request) {
const { phone, email, name } = await req.json();
const res = await fetch('https://api.unlimitedmessaging.app/message', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.UM_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: { phone, email },
subject: 'Your order is confirmed',
text: `Thanks ${name}, your order is on its way.`,
channels: [{ channel: 'EMAIL' }, { channel: 'WHATSAPP' }, { channel: 'SMS' }],
}),
});
return Response.json(await res.json(), { status: res.status });
}import { UnlimitedMessagingApiClient } from '@unlimited-messaging/sdk';
const um = new UnlimitedMessagingApiClient({ token: process.env.UM_API_KEY! });
// Server-side only: a route handler, a server action or a server function
await um.messages.messageSend({
recipient: '+33612345678',
text: 'Your code is 291847, valid 5 minutes.',
});Seguridad
¿Dónde debe estar la clave de API en Bolt.new y v0?
En variables de entorno del servidor, leídas solo por código de servidor. Las dos herramientas documentan la misma regla.
v0: sin el prefijo NEXT_PUBLIC_
La documentación de seguridad de v0 indica que solo las variables con el prefijo NEXT_PUBLIC_ llegan al navegador, y que las demás se quedan en el servidor. Llámala UM_API_KEY y léela en un route handler o una server action.
v0: marca Development para la vista previa
Las variables se cifran y se guardan en Vercel. La vista previa de v0 solo ve las variables disponibles en el entorno Development, así que añade también ahí la clave mientras construyes.
Bolt: Secrets, usados por las server functions
La documentación de Bolt dice que los secretos solo funcionan con las server functions, que se ejecutan en los servidores de Bolt y no en el navegador del visitante. En un proyecto con Supabase, abre Secrets desde el menú del engranaje.
Nunca una variable VITE_
En una app Vite, todo lo que lleva el prefijo VITE_ se compila en el JavaScript que descarga el navegador. Una clave de mensajería ahí permite a cualquiera enviar desde tu número y tu buzón.
Nada de relé abierto
Una ruta pública que envía cualquier texto a cualquier número es una pasarela de spam con tu nombre. Exige una sesión, busca el destinatario en el servidor y limita los envíos por usuario.
Respuestas
¿Cómo recibes las respuestas en una app de Bolt.new o v0?
Todos los planes muestran las respuestas en la bandeja de Unlimited Messaging: hilos de email, chats de WhatsApp y SMS recibidos por la app Android. Llevarlas a tu propia app requiere webhooks, incluidos en los planes de pago: Medium a 19 € al mes y Max a 29 € al mes.
Pide al constructor una segunda ruta, por ejemplo app/api/um-webhook/route.ts, registra su URL pública en la página Webhooks del panel y suscríbete a message.received y message.status. Lee el cuerpo en bruto con await req.text() antes de parsearlo, porque la firma cubre los bytes exactos.
Las entregas siguen la especificación Standard Webhooks, firmadas con HMAC-SHA256 en la cabecera webhook-signature. Responde 2xx en menos de 10 segundos y luego haz el trabajo. Las entregas fallidas se reintentan durante algo más de 3 días, así que deduplica por eventId.
{
"type": "message.received",
"eventId": "whd_...",
"occurredAt": "2026-11-09T10:00:01.000Z",
"data": {
"channel": "WHATSAPP",
"message": {
"text": "Yes, see you Monday!"
}
}
}import { createHmac } from 'node:crypto';
import { Buffer } from 'node:buffer';
// Standard Webhooks signature check, before trusting the body.
export function isValid(rawBody: string, h: Headers, secret: string) {
const id = h.get('webhook-id');
const ts = h.get('webhook-timestamp');
const sig = h.get('webhook-signature') ?? '';
if (!id || !ts || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const key = Buffer.from(secret.replace(/^whsec_/, ''), 'base64');
const expected = createHmac('sha256', key)
.update(`${id}.${ts}.${rawBody}`)
.digest('base64');
return sig.split(' ').some((s) => s === `v1,${expected}`);
}Límites
¿Cuáles son los límites, sinceramente?
Unlimited Messaging envía desde cuentas personales, a ritmo humano. Tenlo en cuenta antes de lanzar.
WhatsApp no es oficial
Tu número se vincula como un dispositivo, igual que WhatsApp Web, fuera de la Business Platform de Meta. Los mensajes no solicitados hacen que bloqueen números. Si necesitas WhatsApp oficial a gran escala, usa la Cloud API de Meta.
El email sigue a tu buzón
Una cuenta personal de Gmail envía hasta 500 emails al día. Para newsletters o grandes volúmenes, la herramienta adecuada es un proveedor de email con un dominio de envío.
SMS al ritmo de Android
Android pide confirmación a partir de 30 SMS en 30 minutos, así que la app espacia los envíos. Los SMS cuentan en tu plan del operador, y el móvil que envía tiene que usar Android.
Lo que implica el plan gratis
Los mensajes del plan Gratis terminan con "Sent with UnlimitedMessaging.app". Los archivos multimedia, las notas de voz y los webhooks vienen con Medium y Max, que además quitan el pie.
FAQ
Preguntas sobre la mensajería desde Bolt.new y v0
Fuentes
Fuentes y referencias
Para verificar por ti mismo la información de este artículo:
- Security (solo las variables NEXT_PUBLIC_ llegan al navegador)Documentación de v0
- External APIs (variables de entorno cifradas y guardadas en Vercel)Documentación de v0
- Environment variablesDocumentación de Vercel
- Can I use SMTP with Vercel? (puerto 25 bloqueado)Vercel Knowledge Base
- Secrets (solo funcionan con las server functions)Soporte de Bolt
- Server functionsSoporte de Bolt
- Integración con SupabaseSoporte de Bolt
- Route handlersDocumentación de Next.js
- Límites de las Edge Functions (puertos 25 y 587 no permitidos)Documentación de Supabase
- Precios de Resend (Free: 3.000 emails al mes, 100 al día)Resend
- Precios de SMS en Estados Unidos (0,0083 $ por segmento)Twilio
- A2P 10DLC Brand Registration (tarifa de marca de 4,50 $)Twilio
- Revisión de plantillas de mensajes (decisión en 24 horas)Meta for Developers
- Límites de mensajería de WhatsApp (250 destinatarios únicos cada 24 horas al empezar)Meta for Developers
- Límites de envío y recepción de correo (500 emails al día)Ayuda de Gmail
- SmsUsageMonitor (umbral de 30 SMS en 30 minutos)Android Open Source Project
- Especificación Standard WebhooksStandard Webhooks

Escrito por
Ilian · Ingeniero de software senior
Ingeniero de software senior, funda y dirige varias empresas tecnológicas. Diseña productos en torno a las API de mensajería, la automatización y la integración de la IA, y comparte aquí lo que aprende construyendo.
Haz que tu app hable con tus usuarios hoy.
Crea una cuenta gratis, conecta un buzón, un número o un móvil, y pega el prompt en Bolt.new o v0.