API WhatsApp avec Next.js : recevoir et répondre en une route
Pour utiliser l'API WhatsApp depuis une application Next.js, il faut une seule route : elle vérifie la signature du webhook, lit le message reçu et répond par l'API. La voici en entier, avec le SDK TypeScript de Nodium.
Installer et régler
npm i @nodium.io/whatsapp# .env.localNODIUM_KEY=nod_… # console › Settings › API keysNODIUM_WEBHOOK_SECRET=whsec_… # shown once, when you create the webhookLa route
// app/api/webhooks/nodium/route.tsimport { Nodium } from '@nodium.io/whatsapp'import { NodiumSignatureError, verifyWebhook } from '@nodium.io/whatsapp/server'const nodium = new Nodium(process.env.NODIUM_KEY!)export async function POST(request: Request) { // The raw body, before any JSON parsing: the signature is computed on it. const rawBody = await request.text() try { const event = verifyWebhook(rawBody, request.headers, process.env.NODIUM_WEBHOOK_SECRET!) if (event.event === 'message.received' && event.data.type === 'text') { await nodium.messages.send({ channelId: event.data.channel_id, to: event.data.from, type: 'text', text: `You wrote: ${event.data.text}`, idempotencyKey: `reply-${event.id}` // the same on every redelivery: sent once }) } return new Response(null, { status: 200 }) } catch (error) { if (error instanceof NodiumSignatureError) return new Response(null, { status: 400 }) throw error }}Dire à Nodium où vous appeler
curl https://nodium.io/api/v1/webhooks \ -H "Authorization: Bearer $NODIUM_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-app.example.com/webhooks/nodium", "events": ["message.received"] }'# → data.secret (whsec_…): shown onceEn développement, npx @nodium.io/cli listen rejoue vos vrais événements vers localhost, sans tunnel.
Ensuite
- Écrivez en premier à un client avec un modèle approuvé : le texte libre ne part que dans la fenêtre de 24 heures.
- Répondez
200vite et faites le travail lent ensuite : un événement non acquitté est livré de nouveau, avec le mêmeid. - Branchez les numéros de vos clients avec une clé pour tous.
Questions fréquentes
Est-ce que cela marche sur Vercel et dans le runtime Edge ?
La route ci-dessus tourne dans le runtime Node.js, celui par défaut des routes : le SDK vérifie la signature avec le module crypto de Node.
Puis-je appeler l'API depuis le navigateur ?
Non. La clé d'API doit rester sur le serveur : appelez Nodium depuis une route ou une action serveur, jamais depuis le code client.