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énement | Quand |
|---|---|
connection.paired | Un compte vient d’appairer votre application (code/QR ou deep-link). |
connection.provisioned | Une connexion a été créée par provisioning serveur-à-serveur. |
sender.assigned | Un Sender ID a été assigné à une connexion. |
connection.disconnected | Une 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-Idunique : 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
2xxrapidement ; traitez en asynchrone si besoin.
Last updated on