Saltar al contenido principal

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.

Ilustración: una cuadrícula de iconos pequeños con uno resaltado, con el titular «Apps de Bolt y v0 que escriben a sus usuarios».

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.

  1. 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ú.

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

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

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

¿Qué stack de mensajería encaja con una app de Bolt.new o v0?
Nodemailer + SMTPEmail hecho a manoResendAPI de emailTwilioAPI de SMS y WhatsAppUnlimited MessagingAPI de email, SMS y WhatsApp
CanalesEmailEmailSMS y WhatsAppEmail, WhatsApp y SMS en una sola petición
Coste para probarGratis con tu propio buzónGratis: 3.000 emails al mes, 100 al díaCrédito de prueba, luego por mensajePlan gratis, sin coste por mensaje, línea de pie
Funciona en funciones serverlessDepende de las reglas de puertos del hostSí, HTTPSSí, HTTPSSí, HTTPS
Configuración antes de usuarios realesCredenciales SMTPDominio verificado y DNSNúmero, 10DLC (EE. UU.), configuración de Meta para WhatsAppVincular buzón, escanear un QR, instalar la app Android
Respuestas entrantesMontar tu propio sondeo IMAPWebhooks de eventos de entregaWebhooksBandeja en todos los planes, webhooks en los planes de pago
EscalaLos límites de tu buzónPensado para volumenPensado para volumenRitmo 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

  1. 01

    Crea una cuenta gratis

    Regístrate en app.unlimitedmessaging.app con Google, GitHub o tu email. Sin tarjeta; el plan Gratis es permanente.

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

  3. 03

    Crea una clave de API

    Abre la sección API del panel y crea una clave. Cópiala una vez.

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

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

Prompt para Bolt.new o v0Prompt
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.
El endpoint es HTTPS sin más: el mismo prompt sirve en Lovable, Cursor o Claude Code cambiando el primer paso.
POST /api/notifyNext.js
// 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 });
}
El route handler que debería generar el constructor. En producción, toma el teléfono y el email del usuario conectado desde tu base de datos, no del cuerpo de la petición. Quita los canales que no hayas conectado.
@unlimited-messaging/sdkTypeScript
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.',
});
El SDK tipado (npm i @unlimited-messaging/sdk) para envíos de un solo canal desde código de servidor. Para varios canales en una llamada, el cuerpo REST de la izquierda es la referencia.

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.

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

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

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

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

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

message.receivedJSON
{
  "type": "message.received",
  "eventId": "whd_...",
  "occurredAt": "2026-11-09T10:00:01.000Z",
  "data": {
    "channel": "WHATSAPP",
    "message": {
      "text": "Yes, see you Monday!"
    }
  }
}
Un evento message.received, abreviado. data.message contiene el remitente, el texto y, en un email, el asunto y los adjuntos.
verify-webhook.tsTypeScript
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}`);
}
Comprobación de firma para un route handler de Next.js o una server function de Bolt. Guarda el secreto whsec_ en una segunda variable de servidor, UM_WEBHOOK_SECRET.

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.

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

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

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

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

Ilian, ingeniero de software senior

Escrito por

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

Ver el perfil de LinkedInActualizado el

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.