Guide Bolt.new + v0
Votre app Bolt ou v0
envoie e-mails, SMS et WhatsApp.
Un prompt, une route serveur, un appel d'API : le même message part par e-mail, WhatsApp et SMS depuis votre propre boîte mail, votre numéro et votre téléphone Android, et la clé n'atteint jamais le navigateur.
Pressé ? Résumez cet article avec une IA
La réponse courte
Comment ajouter e-mail, SMS et WhatsApp à une app Bolt.new ou v0 ?
Demandez à Bolt.new ou v0 d'écrire une route côté serveur, un route handler Next.js ou une fonction serveur Bolt, qui envoie POST https://api.unlimitedmessaging.app/message avec une clé d'API lue dans une variable d'environnement serveur. Une requête atteint une boîte mail, une conversation WhatsApp et un téléphone, depuis vos propres comptes, sur un plan gratuit sans carte bancaire.
v0 génère des apps Next.js qui se déploient sur Vercel, et Bolt.new génère des projets full-stack, souvent en Next.js ou Vite avec Bolt Database ou Supabase. Les deux savent écrire du code serveur. C'est essentiel, car une clé de messagerie ne doit jamais se retrouver dans le bundle du navigateur : l'envoi se fait dans du code qui tourne sur le serveur.
Unlimited Messaging est une API de messagerie qui envoie depuis des comptes que vous possédez déjà : l'e-mail depuis votre boîte Gmail ou de domaine en IMAP/SMTP, WhatsApp depuis votre propre numéro lié comme WhatsApp Web, les SMS depuis la SIM de votre téléphone Android grâce à une app gratuite. Aucun frais par message sur le plan gratuit ; les messages portent une courte ligne "Sent with UnlimitedMessaging.app".
Pour une app codée en vibe coding, l'intérêt est la vitesse. Au lieu de trois fournisseurs, trois SDK et trois vérifications, l'outil d'IA écrit un seul appel fetch, et vous testez avec de vrais messages dans l'après-midi.
Client typé pour Node.js et Next.js : le SDK TypeScript. Plusieurs canaux en un appel : e-mail et WhatsApp en une requête d'API. Des SMS depuis votre téléphone : l'app Android.

Pourquoi ne pas tout coder
Pourquoi coder soi-même e-mail, SMS et WhatsApp prend autant de temps ?
Les outils d'IA écrivent le code en quelques secondes. Ce qui est lent, c'est tout le reste : fournisseurs, vérifications, règles et particularités de déploiement.
E-mail : SMTP passe mal sur les hébergeurs serverless
Vercel bloque le SMTP sortant sur le port 25 et recommande une API d'e-mail dans la plupart des cas, et les Edge Functions Supabase refusent carrément les ports 25 et 587. Une API d'e-mail demande alors un domaine vérifié et des enregistrements DNS avant de livrer à quelqu'un d'autre que vous.
SMS : numéros, enregistrement, frais au segment
Un fournisseur comme Twilio vous loue un numéro et facture chaque segment, 0,0083 $ aux États-Unis plus des frais d'opérateur. Le trafic américain depuis un numéro long classique exige l'enregistrement A2P 10DLC, qui commence par 4,50 $ de frais de marque et une vérification.
WhatsApp : templates et limites
L'API Cloud officielle de Meta exige un template approuvé pour tout envoi hors de la fenêtre de service client de 24 heures, examiné sous 24 heures, facturé par message template, et les nouveaux comptes sont plafonnés à 250 destinataires uniques par 24 heures.
Plus de code où l'IA peut se tromper
Trois SDK et trois formats de webhook, c'est plus de fichiers, plus de clés et plus d'endroits où un extrait généré fuite un secret ou avale une erreur. Un seul endpoint garde un diff assez petit pour être relu.
Côte à côte
Quelle solution de messagerie pour une app Bolt.new ou v0 ?
Ce qu'exige chaque option courante avant que votre app puisse écrire à un vrai utilisateur.
| Nodemailer + SMTPE-mail fait maison | ResendAPI d'e-mail | TwilioAPI SMS et WhatsApp | Unlimited MessagingAPI e-mail, SMS et WhatsApp | |
|---|---|---|---|---|
| Canaux | SMS et WhatsApp | E-mail, WhatsApp et SMS en une requête | ||
| Coût pour tester | Gratuit avec votre propre boîte mail | Gratuit : 3 000 e-mails par mois, 100 par jour | Crédit d'essai, puis au message | Plan gratuit, aucun frais par message, ligne en pied de message |
| Fonctionne en serverless | Selon les ports autorisés par l'hébergeur | Oui, HTTPS | Oui, HTTPS | Oui, HTTPS |
| Configuration avant les vrais utilisateurs | Identifiants SMTP | Domaine vérifié et DNS | Numéro, 10DLC (États-Unis), configuration Meta pour WhatsApp | Lier la boîte mail, scanner un QR code, installer l'app Android |
| Réponses entrantes | À coder vous-même en interrogeant IMAP | Webhooks d'événements de livraison | Webhooks | Boîte de réception sur tous les plans, webhooks sur les plans payants |
| Montée en charge | Les limites de votre boîte mail | Conçu pour le volume | Conçu pour le volume | Rythme humain, pas d'envoi de masse ; WhatsApp non officiel |
Prix et limites relevés sur la page de chaque fournisseur le 9 novembre 2026.
Étape par étape
De zéro au premier message en cinq étapes
- 01
Créez un compte gratuit
Inscrivez-vous sur app.unlimitedmessaging.app avec Google, GitHub ou votre adresse e-mail. Pas de carte bancaire ; le plan Gratuit est permanent.
- 02
Connectez vos canaux
Ajoutez votre boîte mail en IMAP/SMTP, scannez un QR code pour lier WhatsApp, et installez l'app Android sur un téléphone avec une SIM pour les SMS. Vous pouvez commencer par un seul.
- 03
Créez une clé d'API
Ouvrez la section API du tableau de bord et créez une clé. Copiez-la une fois.
- 04
Ajoutez UM_API_KEY côté serveur
v0 : menu du projet, Settings, Environment Variables, en cochant Development pour que l'aperçu la voie. Bolt : le panneau Secrets (icône base de données) pour les fonctions serveur, ou le menu engrenage sur un projet Supabase.
- 05
Collez le prompt
L'outil écrit la route et l'appel. Testez sur votre propre numéro et votre boîte avant tout vrai utilisateur.
Copier, coller
Quel prompt coller dans Bolt.new ou v0 ?
Collez ceci dans le chat. Il demande une route côté serveur, la clé depuis l'environnement et une confirmation de commande. Remplacez le déclencheur par le vôtre.
Ajoute l'envoi de messages à cette app avec Unlimited Messaging (API REST, docs : https://docs.unlimitedmessaging.app).
1. Crée une route côté serveur : en Next.js, app/api/notify/route.ts (ou une server action) ; dans une app Vite sur Bolt, une fonction serveur. N'appelle jamais l'API depuis des composants client.
2. Lis la clé dans la variable d'environnement UM_API_KEY. Ne la préfixe pas par NEXT_PUBLIC_ ni VITE_, ne l'écris pas en dur, et dis-moi où l'ajouter (v0 : Settings > Environment Variables ; Bolt : Secrets).
3. Envoie POST https://api.unlimitedmessaging.app/message avec "Authorization: Bearer <UM_API_KEY>" et le corps JSON { "to": { "phone": "<E.164>", "email": "<email>" }, "subject": "...", "text": "...", "channels": [{ "channel": "EMAIL" }, { "channel": "WHATSAPP" }, { "channel": "SMS" }] }.
4. N'écris qu'à l'utilisateur connecté, avec ses coordonnées lues côté serveur. Renvoie le statut et le corps de la réponse de l'API pour voir les erreurs.
5. Déclenche l'envoi après le paiement avec une confirmation de commande, et demande-moi mon numéro et mon e-mail pour un premier test.// 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.',
});Sécurité
Où ranger la clé d'API dans Bolt.new et v0 ?
Dans des variables d'environnement côté serveur, lues uniquement par du code serveur. Les deux outils documentent la même règle.
v0 : pas de préfixe NEXT_PUBLIC_
La documentation sécurité de v0 indique que seules les variables préfixées par NEXT_PUBLIC_ atteignent le navigateur, et que les autres restent sur le serveur. Nommez-la UM_API_KEY et lisez-la dans un route handler ou une server action.
v0 : cochez Development pour l'aperçu
Les variables sont chiffrées et stockées chez Vercel. L'aperçu de v0 ne voit que les variables disponibles dans l'environnement Development : ajoutez-y aussi la clé pendant le développement.
Bolt : Secrets, utilisés par les fonctions serveur
La documentation de Bolt précise que les secrets ne fonctionnent qu'avec les fonctions serveur, qui tournent sur les serveurs de Bolt et non dans le navigateur du visiteur. Sur un projet adossé à Supabase, ouvrez Secrets depuis le menu engrenage.
Jamais dans une variable VITE_
Dans une app Vite, tout ce qui est préfixé par VITE_ est compilé dans le JavaScript téléchargé par le navigateur. Une clé de messagerie à cet endroit permet à n'importe qui d'envoyer depuis votre numéro et votre boîte mail.
Pas de relais ouvert
Une route publique qui envoie n'importe quel texte à n'importe quel numéro est une passerelle à spam à votre nom. Exigez une session, cherchez le destinataire côté serveur et limitez les envois par utilisateur.
Réponses
Comment recevoir les réponses dans une app Bolt.new ou v0 ?
Tous les plans affichent les réponses dans la boîte de réception Unlimited Messaging : fils d'e-mails, conversations WhatsApp et SMS reçus par l'app Android. Pour les pousser vers votre app, il faut des webhooks, inclus dans les plans payants : Moyen à 19 €/mois et Max à 29 €/mois.
Demandez à l'outil une seconde route, par exemple app/api/um-webhook/route.ts, enregistrez son URL publique sur la page Webhooks du tableau de bord, et abonnez-vous à message.received et message.status. Lisez le corps brut avec await req.text() avant de le parser, car la signature couvre les octets exacts.
Les livraisons suivent la spécification Standard Webhooks, signées en HMAC-SHA256 dans l'en-tête webhook-signature. Répondez 2xx en moins de 10 secondes, puis faites le travail. Les livraisons échouées sont relancées pendant un peu plus de 3 jours : dédupliquez sur 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}`);
}Limites
Quelles sont les limites, honnêtement ?
Unlimited Messaging envoie depuis des comptes personnels, à un rythme humain. Prévoyez-le avant le lancement.
WhatsApp est non officiel
Votre numéro est lié comme un appareil, à la manière de WhatsApp Web, en dehors de la plateforme Business de Meta. Les messages non sollicités font bannir les numéros. Si vous avez besoin de WhatsApp officiel à grande échelle, utilisez l'API Cloud de Meta.
L'e-mail suit votre boîte
Un compte Gmail personnel envoie jusqu'à 500 e-mails par jour. Pour les newsletters ou les gros volumes, un service d'e-mailing avec un domaine d'envoi est le bon outil.
Les SMS au rythme d'Android
Android demande une confirmation au-delà de 30 SMS en 30 minutes, l'app espace donc les envois. Les SMS sont décomptés de votre forfait opérateur, et le téléphone qui envoie doit tourner sous Android.
Les compromis du plan gratuit
Sur Gratuit, les messages se terminent par "Sent with UnlimitedMessaging.app". Les médias, les messages vocaux et les webhooks viennent avec Moyen et Max, qui retirent aussi ce pied de message.
FAQ
Questions sur l'envoi de messages depuis Bolt.new et v0
Sources
Sources & références
Pour vérifier par vous-même les informations de cet article :
- Security (seules les variables NEXT_PUBLIC_ atteignent le navigateur)Documentation v0
- External APIs (variables d'environnement chiffrées et stockées chez Vercel)Documentation v0
- Variables d'environnementDocumentation Vercel
- Can I use SMTP with Vercel? (port 25 bloqué)Vercel Knowledge Base
- Secrets (ne fonctionnent qu'avec les fonctions serveur)Support Bolt
- Fonctions serveurSupport Bolt
- Intégration SupabaseSupport Bolt
- Route handlersDocumentation Next.js
- Limites des Edge Functions (ports 25 et 587 interdits)Documentation Supabase
- Tarifs Resend (Free : 3 000 e-mails par mois, 100 par jour)Resend
- Tarifs SMS aux États-Unis (0,0083 $ par segment)Twilio
- Enregistrement de marque A2P 10DLC (4,50 $ de frais de marque)Twilio
- Examen des templates de message (décision sous 24 heures)Meta for Developers
- Limites de messagerie WhatsApp (250 destinataires uniques par 24 heures au départ)Meta for Developers
- Limites d'envoi et de réception (500 e-mails par jour)Aide Gmail
- SmsUsageMonitor (seuil de 30 SMS en 30 minutes)Android Open Source Project
- Spécification Standard WebhooksStandard Webhooks

Écrit par
Ilian · Senior Software Engineer
Ingénieur logiciel senior, il fonde et dirige plusieurs sociétés tech. Il conçoit des produits autour des API de messagerie, de l’automatisation et de l’intégration de l’IA, et partage ici ce qu’il apprend en construisant.
Faites parler votre app à vos utilisateurs dès aujourd'hui.
Créez un compte gratuit, connectez une boîte mail, un numéro ou un téléphone, et collez le prompt dans Bolt.new ou v0.