Webhooks
Ajoutez l’URL de votre serveur dans Webhooks et choisissez les événements. GetSMS envoie une requête POST en JSON à chaque événement.
Sans liste de numéros, le webhook reçoit les événements de tous les numéros qui envoient pour vous, y compris les numéros partagés de GetSMS. C’est le réglage recommandé.
Événements
Section intitulée « Événements »| Événement | Quand |
|---|---|
message.phone.sending |
Le téléphone commence l’envoi. |
message.phone.sent |
Le SMS est remis au réseau. |
message.phone.delivered |
Le destinataire a reçu le SMS. |
message.send.failed |
L’envoi a échoué. |
message.send.expired |
Le SMS n’a pas pu partir à temps. |
message.phone.received |
Un destinataire vous a répondu. |
Le corps suit le format CloudEvents. L’en-tête X-Event-Type contient le nom de l’événement.
{ "specversion": "1.0", "id": "5c1a3bba-09cc-41a6-a4bb-c8f4872dce4d", "type": "message.phone.received", "time": "2026-11-10T09:42:11Z", "datacontenttype": "application/json", "data": { "message_id": "8f9c71b8-b84e-4417-8408-a62274f65a08", "owner": "+212661234501", "contact": "+212612345678", "content": "OUI, merci", "timestamp": "2026-11-10T09:42:09Z" }}Vérifier la signature
Section intitulée « Vérifier la signature »Si vous définissez une clé de signature, chaque requête porte un en-tête Authorization: Bearer <jeton>. C’est un JWT signé en HS256 avec votre clé, valable 10 minutes, dont l’audience est l’URL de votre webhook. Refusez toute requête dont le jeton est invalide.
import jwt from "jsonwebtoken";
app.post("/hooks/sms", express.json(), (req, res) => { const token = (req.get("Authorization") || "").replace("Bearer ", ""); try { jwt.verify(token, process.env.GETSMS_SIGNING_KEY, { algorithms: ["HS256"], audience: "https://atlas-shop.ma/hooks/sms", }); } catch { return res.sendStatus(401); }
if (req.body.type === "message.phone.received") { const { contact, content } = req.body.data; // ex. confirmer la commande si content vaut "1" ou "OUI" } res.sendStatus(200);});import os, jwtfrom flask import Flask, request, abort
app = Flask(__name__)
@app.post("/hooks/sms")def sms_hook(): token = request.headers.get("Authorization", "").removeprefix("Bearer ") try: jwt.decode(token, os.environ["GETSMS_SIGNING_KEY"], algorithms=["HS256"], audience="https://atlas-shop.ma/hooks/sms") except jwt.InvalidTokenError: abort(401)
event = request.get_json() if event["type"] == "message.phone.received": contact, content = event["data"]["contact"], event["data"]["content"] return "", 200