← projets

WhatsApp Internal API — multi-sessions Baileys

OTP & notifications WhatsApp sans Chromium, via un SDK npm

BaileysExpressBullMQSocket.IODrizzle ORMRedisSDK npm

Le besoin

Un canal WhatsApp interne, léger, réutilisable — pour envoyer OTP et notifications sans payer les API officielles ni gérer leur validation. Une brique unique que tous les produits (Mon Bara, TransitSoft) consomment via un SDK.

Baileys, sans Chromium

Pas de WhatsApp Web dans un Chromium headless (lourd, fragile, gourmand en RAM). Baileys parle le protocole WhatsApp directement en WebSocket. Résultat : ça tourne sur un petit VPS.

  • Serveur — Express + Socket.IO + Baileys + BullMQ
  • Dashboard — Next.js : créer une session, scanner le QR, générer les clés
  • packages/shared — types + schémas Zod + events socket (source de vérité)
  • packages/sdk — le client npm @wa/sdk

Multi-sessions & clés

Chaque session = un numéro WhatsApp, créée par QR depuis le dashboard, avec une clé API affichée une seule fois. Le projet consommateur ne voit jamais Baileys : juste une baseUrl et une clé.

Rate limiting = survie

WhatsApp bannit vite un numéro qui spamme. Toute émission passe par une file BullMQ rate-limitée (15 msg/min, configurable), avec retry backoff et concurrence contrôlée. Statuts en temps réel via Socket.IO :

queued → sending → sent → delivered → read | failed

Stack

Baileys · Express · BullMQ · Socket.IO · Drizzle ORM · Redis · SDK npm


Retour d'expérience détaillé : Une API WhatsApp interne avec Baileys (sans Chromium).