Les webhooks vous permettent de construire des intégrations personnalisées avec n'importe quel système. Quand les intégrations standard ne répondent pas à vos besoins, les webhooks offrent la flexibilité de créer exactement ce que vous voulez.
Qu'est-ce que les Webhooks ?
Les webhooks sont des callbacks HTTP qui notifient votre système quand des événements se produisent. Au lieu de sonder pour des mises à jour, votre système reçoit des notifications en temps réel.
Le moniteur détecte un downtime
↓
Webhook envoyé à votre endpoint
↓
Votre système traite et agit
Structure du Payload Webhook
Payload typique d'un webhook de monitoring :
{
"event_type": "monitor.down",
"timestamp": "2026-01-31T14:30:00Z",
"monitor": {
"id": "mon_abc123",
"name": "API Production",
"url": "https://api.example.com",
"type": "http"
},
"check": {
"status": "down",
"response_code": 500,
"response_time_ms": 2500,
"location": "us-east"
}
}
Construire un Récepteur Webhook
Récepteur Python Basique
from flask import Flask, request, jsonify
import hmac
import hashlib
app = Flask(__name__)
WEBHOOK_SECRET = "votre-cle-secrete"
def verifier_signature(payload, signature):
expected = hmac.new(
WEBHOOK_SECRET.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
@app.route('/webhook', methods=['POST'])
def gerer_webhook():
# Vérifier l'authenticité
signature = request.headers.get('X-Signature')
if not verifier_signature(request.data, signature):
return jsonify({"error": "Signature invalide"}), 401
data = request.json
event_type = data.get('event_type')
if event_type == 'monitor.down':
gerer_downtime(data)
elif event_type == 'monitor.up':
gerer_recuperation(data)
return jsonify({"status": "ok"})
Patterns d'Intégration Courants
Auto-Scaling sur Alerte
import boto3
def gerer_downtime(data):
if 'api' in data['monitor']['name'].lower():
# Scale up les instances API
client = boto3.client('autoscaling')
client.set_desired_capacity(
AutoScalingGroupName='api-asg',
DesiredCapacity=10
)
Créer un Ticket Support
def gerer_downtime(data):
requests.post(
"https://api.zendesk.com/tickets",
json={
"ticket": {
"subject": f"Alerte : {data['monitor']['name']} est down",
"description": f"Service down depuis {data['incident']['started_at']}",
"priority": "high"
}
}
)
Mettre à Jour la Page de Statut
def gerer_downtime(data):
requests.post(
"https://api.statuspage.io/incidents",
json={
"incident": {
"name": f"Panne {data['monitor']['name']}",
"status": "investigating",
"impact_override": "major"
}
}
)
Sécuriser les Webhooks
Vérification de Signature
Vérifiez toujours l'authenticité des webhooks :
def verifier_webhook(payload, signature, secret):
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)
Allowlisting IP
Restreignez aux IPs connues :
IPS_AUTORISEES = ['1.2.3.4', '5.6.7.8']
@app.before_request
def verifier_ip():
if request.remote_addr not in IPS_AUTORISEES:
abort(403)
Checklist Intégration Webhook
- Endpoint déployé et accessible
- HTTPS activé
- Vérification de signature implémentée
- Gestion des erreurs configurée
- Logique de retry en place
- Logging activé
- Monitoring pour le handler
- Webhooks de test vérifiés
- Documentation mise à jour