Saltar al contenido principal

Guía Lovable

Email, SMS y WhatsApp
en tu app de Lovable, gratis.

Pega un prompt en Lovable: escribe una Edge Function que envía el mismo mensaje por email, WhatsApp y SMS, desde tu propio buzón, tu número y tu móvil, con la clave de API siempre en el servidor.

¿Con prisa? Resume este artículo con una IA

La respuesta corta

¿Cómo envías email, SMS y WhatsApp desde una app de Lovable?

Pide a Lovable que cree una Edge Function de Supabase que llame a un único endpoint REST, POST https://api.unlimitedmessaging.app/message, con tu clave de API guardada en los Secrets de Lovable. Una sola petición envía el mismo mensaje por email, WhatsApp y SMS, desde tu propio buzón, tu número y tu móvil Android, con un plan gratis y sin tarjeta.

Lovable escribe el frontend en React y, a través de Lovable Cloud o de un proyecto de Supabase conectado, las funciones de backend. Enviar un mensaje es trabajo de backend: la clave de API no puede acabar en el bundle del navegador, así que la llamada va en una Edge Function que invoca tu frontend.

Unlimited Messaging es una API de mensajería que envía desde cuentas que ya tienes: un email desde tu buzón de Gmail o de tu dominio por IMAP/SMTP, un WhatsApp desde tu número vinculado como WhatsApp Web, y un SMS desde la SIM de tu móvil Android con una app gratuita. El plan gratis no cobra nada por mensaje en ningún canal; los mensajes terminan con una línea corta "Sent with UnlimitedMessaging.app".

Lovable también tiene sus propias vías: Lovable Emails integrado para el email transaccional en los planes de pago de Lovable, y conectores para Resend y Twilio. Son buenas herramientas. Esta guía es para cuando quieres los tres canales detrás de una sola llamada, sin verificar un dominio de envío ni pagar por mensaje mientras pruebas.

El mismo mensaje en varios canales: email y WhatsApp en una sola petición a la API. Conectar Gmail: la guía de la contraseña de aplicación. SMS desde tu móvil: la app Android.

Ilustración: una petición POST /message que se divide en una burbuja de chat y un correo, con el titular «App Lovable, tres canales, una llamada».

Por qué no programarlo a mano

¿Por qué es tan lento conectar tú mismo SMTP, Twilio y Meta?

Cada canal tiene su proveedor, su cuenta, su verificación y sus reglas. Esto es lo que pide cada uno antes de que salga tu primer mensaje real.

  1. Email: los puertos SMTP están bloqueados en las Edge Functions

    Supabase no permite conexiones salientes a los puertos 25 y 587 desde las Edge Functions, así que el clásico fragmento de nodemailer por SMTP falla ahí. Acabas con una API de email como Resend, que exige un dominio verificado: su remitente compartido [email protected] solo entrega a tu propia dirección.

  2. SMS: una cuenta de proveedor, un número y un registro

    Con Twilio alquilas un número y pagas por segmento, 0,0083 $ por segmento en Estados Unidos más las tarifas del operador. Enviar a números de Estados Unidos desde un número largo normal exige además el registro A2P 10DLC, con una tarifa de marca de 4,50 $ y una verificación antes de poder enviar.

  3. WhatsApp: las reglas de la Business Platform de Meta

    La Cloud API oficial exige una configuración de empresa en Meta, una plantilla aprobada para cualquier mensaje fuera de la ventana de atención al cliente de 24 horas (la revisión tarda hasta 24 horas), un precio por mensaje de plantilla, y las cuentas nuevas empiezan con 250 destinatarios únicos cada 24 horas.

  4. Tres SDK, tres webhooks, tres facturas

    Cada proveedor tiene su librería cliente, su formato de errores y su webhook de entrada. Son tres integraciones que tu constructor con IA tiene que hacer bien, tres claves que guardar y tres facturas cuando lances.

Cara a cara

¿Por qué vía debería enviar mensajes una app de Lovable?

Las cuatro vías que más usan quienes construyen con Lovable, en los puntos que importan para un prototipo.

¿Por qué vía debería enviar mensajes una app de Lovable?
Lovable EmailsEmail transaccional integradoConector ResendAPI de emailConector TwilioAPI de SMS y WhatsAppUnlimited MessagingAPI de email, SMS y WhatsApp
CanalesEmailEmailSMS y WhatsAppEmail, WhatsApp y SMS en una sola petición
Nivel gratisSolo planes de pago de Lovable (50.000 emails al mes incluidos)3.000 emails al mes, 100 al díaCrédito de prueba, luego pago por mensajePlan gratis, sin coste por mensaje, línea de pie en los mensajes
Antes del primer envío realTu propio dominio y sus registros DNSUn dominio verificado en ResendUn número de Twilio, 10DLC para SMS en EE. UU., configuración de Meta para WhatsAppVincular un buzón, escanear un QR, instalar la app Android
RemitenteTu dominioTu dominioUn número alquilado o un ID de remitenteTu propio buzón, tu número y tu SIM
VolumenLímites por hora (100 emails de app por hora en Pro)Pensado para volumenPensado para volumenRitmo humano: límites del buzón, unos 30 SMS cada 30 minutos, sin envíos masivos
WhatsApp oficialSin WhatsAppSin WhatsAppSí, Business Platform de MetaNo: dispositivo vinculado, riesgo de bloqueo si haces spam

Precios y límites tomados de la página de cada proveedor, revisados el 9 de noviembre de 2026. En WhatsApp, Twilio repercute además la tarifa de Meta por cada mensaje de plantilla.

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 los canales que necesitas

    Añade tu buzón (Gmail con una contraseña de aplicación, o cualquier servidor IMAP/SMTP), escanea un código QR para vincular tu número de WhatsApp e instala la app Android en un móvil con SIM para los SMS. Con un canal basta para empezar.

  3. 03

    Crea una clave de API

    En el panel, abre la sección API y crea una clave. Cópiala en el momento y mantenla fuera de tu código.

  4. 04

    Guárdala en los Secrets de Lovable

    Abre Settings y luego Secrets y añade UM_API_KEY, o usa el campo seguro que muestra Lovable cuando una función necesita una clave. Lovable la inyecta solo en las Edge Functions.

  5. 05

    Pega el prompt de abajo

    Lovable escribe la Edge Function y el disparador que la llama. Envía la primera prueba a tu propio número y a tu bandeja.

Copiar y pegar

¿Qué prompt pegas en Lovable?

Pega esto en el chat de Lovable. Pide una Edge Function, la clave desde Secrets y un mensaje de bienvenida al registrarse. Cambia el disparador y el texto según tu app.

Prompt para LovablePrompt
Añade mensajería a esta app con Unlimited Messaging (API REST, documentación: https://docs.unlimitedmessaging.app).

1. Crea una Edge Function de Supabase llamada notify-user. Lee la clave de API del secreto UM_API_KEY: pídeme que lo añada en Secrets, nunca la pongas en el código del frontend ni en una variable VITE_.
2. La función llama a POST https://api.unlimitedmessaging.app/message con la cabecera "Authorization: Bearer <UM_API_KEY>" y este cuerpo JSON: { "to": { "phone": "<número E.164>", "email": "<email>" }, "subject": "...", "text": "...", "channels": [{ "channel": "EMAIL" }, { "channel": "WHATSAPP" }, { "channel": "SMS" }] }.
3. Mantén activada la verificación JWT y envía solo al email y al teléfono del usuario conectado, cargados en el servidor, nunca a una dirección tomada del cuerpo de la petición.
4. Llama a la función justo después del registro con un mensaje corto de bienvenida y registra la respuesta de la API para que los errores se vean.
5. Antes de probar, pídeme mi número de teléfono y mi email.
La API es HTTPS sin más, así que el mismo prompt sirve en Bolt, v0, Cursor o Claude Code cambiando la primera línea.
Edge FunctionDeno / Supabase
// supabase/functions/notify-user/index.ts
const cors = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',
};

Deno.serve(async (req) => {
  if (req.method === 'OPTIONS') return new Response('ok', { headers: cors });
  const { phone, email, name } = await req.json();

  const res = await fetch('https://api.unlimitedmessaging.app/message', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${Deno.env.get('UM_API_KEY')}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      to: { phone, email },
      subject: 'Welcome aboard',
      text: `Hi ${name}, your account is ready.`,
      channels: [{ channel: 'EMAIL' }, { channel: 'WHATSAPP' }, { channel: 'SMS' }],
    }),
  });

  return new Response(await res.text(), {
    status: res.status,
    headers: { ...cors, 'Content-Type': 'application/json' },
  });
});
Así es la Edge Function. Versión mínima: en producción, carga el email y el teléfono del usuario conectado desde tu base de datos en lugar de fiarte del cuerpo de la petición. Quita de la lista los canales que no hayas conectado.
supabase.functions.invokeReact
// In a React component: the browser never sees UM_API_KEY
const { data, error } = await supabase.functions.invoke('notify-user', {
  body: { phone: '+33612345678', email: '[email protected]', name: 'Lea' },
});
El frontend solo llama a la función. supabase.functions.invoke envía el token de sesión del usuario, y Supabase lo comprueba antes de ejecutar la función.

Seguridad

¿Dónde debe estar la clave de API en una app de Lovable?

Solo en el servidor. La propia documentación de Lovable marca la línea: secretos para las Edge Functions, variables VITE_ para valores que pueden ser públicos.

  1. En Secrets, leída por la Edge Function

    Lovable guarda los secretos cifrados, los inyecta en las Edge Functions al ejecutarse y nunca los incluye en el código del frontend. La función lee la clave con Deno.env.get('UM_API_KEY').

  2. Nunca en una variable VITE_

    La documentación de Lovable indica que las variables VITE_ se incrustan en el bundle del cliente al compilar. Cualquiera puede leerlas en las herramientas de desarrollo del navegador y enviar mensajes desde tus cuentas.

  3. Tampoco en el chat

    No pegues la clave en texto plano en un prompt. Lovable muestra un campo seguro cuando una función necesita un secreto; úsalo, o la página Secrets.

  4. Nada de relé abierto

    Una función que envía cualquier texto a cualquier número sacado del cuerpo de la petición deja que desconocidos usen tu WhatsApp y tu buzón. Mantén la verificación JWT, busca el destinatario en el servidor y limita los envíos por usuario.

  5. Una clave por entorno

    Crea una clave para pruebas y otra para producción, así puedes revocar una clave filtrada sin romper la app en producción.

Respuestas

¿Cómo recibes las respuestas en tu app de Lovable?

En todos los planes, las respuestas llegan a la bandeja de Unlimited Messaging: emails agrupados por hilo, chats de WhatsApp y SMS recibidos por la app Android después de iniciar sesión. Para llevarlas a tu propia app necesitas webhooks, incluidos en los planes de pago: Medium a 19 € al mes y Max a 29 € al mes.

Pide a Lovable una segunda Edge Function, por ejemplo um-webhook, registra su URL en la página Webhooks del panel y suscríbete a message.received (un mensaje entrante) y message.status (enviado, entregado, leído, fallido). A esta función la llama Unlimited Messaging, no un usuario conectado, así que desactiva la verificación JWT para ella y comprueba la firma en su lugar.

Cada entrega va firmada según la especificación Standard Webhooks, con un HMAC-SHA256 en la cabecera webhook-signature. Responde con un 2xx en menos de 10 segundos y haz el trabajo después. 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 lleva el remitente y el texto, y en un email también 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}`);
}
Una comprobación de firma que funciona en una Edge Function (Deno) o en Node.js. Guarda el secreto whsec_ como segundo secreto, por ejemplo UM_WEBHOOK_SECRET.

Límites

¿Cuáles son los límites, sinceramente?

Unlimited Messaging envía desde cuentas personales a ritmo humano. Encaja con notificaciones, recordatorios y conversaciones, no con envíos masivos.

  1. WhatsApp no es oficial

    Tu número se vincula como un dispositivo, igual que WhatsApp Web, no a través de la Business Platform de Meta. Escribir a gente que no lo ha pedido hace que bloqueen números. Para marketing a gran escala, la herramienta adecuada es la Cloud API oficial de Meta.

  2. El email sigue los límites de tu buzón

    Una cuenta personal de Gmail envía hasta 500 emails al día. Usa un buzón de Workspace o de tu dominio para más, y un proveedor de email para las newsletters.

  3. Los SMS van al ritmo de Android

    Android pide confirmación a partir de 30 SMS en 30 minutos, así que la app espacia los mensajes. Cada SMS cuenta en tu plan del operador, y el móvil que envía tiene que ser Android.

  4. Lo que deja fuera el plan gratis

    Los mensajes del plan Gratis terminan con "Sent with UnlimitedMessaging.app". Los archivos multimedia, las notas de voz y los webhooks requieren un plan de pago, que además quita el pie.

FAQ

Preguntas sobre la mensajería desde Lovable

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

Lanza las notificaciones hoy. Paga después, si acaso.

Crea una cuenta gratis, conecta un buzón, un número o un móvil, y pega el prompt en Lovable.