Skip to Content

Webhooks

Si votre application déclare une webhookUrl, Mon SMS Pro y envoie les événements en POST (JSON), signés et avec réessais.

Événements

ÉvénementQuand
connection.pairedUn compte vient d’appairer votre application (code/QR ou deep-link).
connection.provisionedUne connexion a été créée par provisioning serveur-à-serveur.
sender.assignedUn Sender ID a été assigné à une connexion.
connection.disconnectedUne connexion a été déconnectée.

En-têtes

Content-Type: application/json X-Webhook-Event: connection.paired X-Webhook-Id: <id unique de livraison> X-Webhook-Timestamp: <epoch ms> X-Webhook-Signature: sha256=<hmac hex>

Vérifier la signature

La signature est un HMAC-SHA256 de "<timestamp>.<corps brut>" avec votre webhookSecret (whsec_…) :

import crypto from "crypto"; function verify(req, webhookSecret) { const ts = req.headers["x-webhook-timestamp"]; const sig = req.headers["x-webhook-signature"]; // "sha256=…" const expected = "sha256=" + crypto .createHmac("sha256", webhookSecret) .update(`${ts}.${req.rawBody}`) .digest("hex"); return crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected)); }

Rejetez toute requête dont la signature ne correspond pas. Vérifiez aussi que le X-Webhook-Timestamp est récent pour éviter les rejeux.

Idempotence & réessais

  • Chaque livraison porte un X-Webhook-Id unique : dédupliquez dessus, une même livraison pouvant être réémise.
  • En cas d’échec (réponse non-2xx ou timeout), Mon SMS Pro réessaie avec un backoff exponentiel (≈ 5 s, 30 s, 5 min, 30 min) avant de marquer la livraison FAILED.
  • Répondez 2xx rapidement ; traitez en asynchrone si besoin.
Last updated on