Aller au contenu principal

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.

Illustration : une grille de petites icônes dont une en évidence, avec le titre « Des apps Bolt et v0 qui écrivent aux clients ».

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.

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

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

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

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

Quelle solution de messagerie pour une app Bolt.new ou v0 ?
Nodemailer + SMTPE-mail fait maisonResendAPI d'e-mailTwilioAPI SMS et WhatsAppUnlimited MessagingAPI e-mail, SMS et WhatsApp
CanauxE-mailE-mailSMS et WhatsAppE-mail, WhatsApp et SMS en une requête
Coût pour testerGratuit avec votre propre boîte mailGratuit : 3 000 e-mails par mois, 100 par jourCrédit d'essai, puis au messagePlan gratuit, aucun frais par message, ligne en pied de message
Fonctionne en serverlessSelon les ports autorisés par l'hébergeurOui, HTTPSOui, HTTPSOui, HTTPS
Configuration avant les vrais utilisateursIdentifiants SMTPDomaine vérifié et DNSNuméro, 10DLC (États-Unis), configuration Meta pour WhatsAppLier la boîte mail, scanner un QR code, installer l'app Android
Réponses entrantesÀ coder vous-même en interrogeant IMAPWebhooks d'événements de livraisonWebhooksBoîte de réception sur tous les plans, webhooks sur les plans payants
Montée en chargeLes limites de votre boîte mailConçu pour le volumeConçu pour le volumeRythme 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

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

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

  3. 03

    Créez une clé d'API

    Ouvrez la section API du tableau de bord et créez une clé. Copiez-la une fois.

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

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

Prompt pour Bolt.new ou v0Prompt
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.
L'endpoint est du simple HTTPS : le même prompt convient à Lovable, Cursor ou Claude Code en changeant la première étape.
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 });
}
Le route handler que l'outil doit produire. En production, prenez le téléphone et l'e-mail de l'utilisateur connecté dans votre base, pas dans le corps de la requête. Retirez les canaux que vous n'avez pas connectés.
@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.',
});
Le SDK typé (npm i @unlimited-messaging/sdk) pour des envois sur un seul canal depuis du code serveur. Pour plusieurs canaux en un appel, le corps REST de gauche fait référence.

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.

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

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

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

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

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

message.receivedJSON
{
  "type": "message.received",
  "eventId": "whd_...",
  "occurredAt": "2026-11-09T10:00:01.000Z",
  "data": {
    "channel": "WHATSAPP",
    "message": {
      "text": "Yes, see you Monday!"
    }
  }
}
Un événement message.received, raccourci. data.message contient l'expéditeur, le texte et, pour un e-mail, le sujet et les pièces jointes.
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}`);
}
Vérification de signature pour un route handler Next.js ou une fonction serveur Bolt. Gardez le secret whsec_ dans une seconde variable serveur, UM_WEBHOOK_SECRET.

Limites

Quelles sont les limites, honnêtement ?

Unlimited Messaging envoie depuis des comptes personnels, à un rythme humain. Prévoyez-le avant le lancement.

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

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

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

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

Ilian, ingénieur logiciel senior

Écrit par

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

Voir le profil LinkedInMis à jour le

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.