# 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

```bash
npm i @nodium.io/whatsapp

# .env.local
NODIUM_KEY=nod_…                 # console › Settings › API keys
NODIUM_WEBHOOK_SECRET=whsec_…    # shown once, when you create the webhook
```

## La route

```ts
// app/api/webhooks/nodium/route.ts
import { 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

```bash
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 once
```

En 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](https://nodium.io/fr/features/templates-broadcasts) approuvé : le texte libre ne part que dans la [fenêtre de 24 heures](https://nodium.io/fr/guides/24-hour-window).
- Répondez `200` vite et faites le travail lent ensuite : un événement non acquitté est livré de nouveau, avec le même `id`.
- Branchez les numéros de vos clients avec [une clé pour tous](https://nodium.io/fr/features/multi-tenant).

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

Mis à jour le 2026-11-10 · https://nodium.io/fr/guides/whatsapp-api-nextjs
