[Nom du Webhook Sanity]
Type de ressource : Configuration Webhook Sanity
Emplacement : Sanity Studio â Settings â Webhooks
Statut : [Actif / Déprécié / En développement]
1. Vue dâensemble
Section titled â1. Vue dâensembleâ1.1. Description
Section titled â1.1. Descriptionâ[Description concise de ce que ce webhook dĂ©clenche dans lâĂ©cosystĂšme]
1.2. Objectif
Section titled â1.2. Objectifâ- [Objectif principal : ex. dĂ©clencher un rebuild du site lors de la publication]
- [Bénéfice pour le workflow éditorial]
1.3. ĂvĂ©nements Sanity dĂ©clencheurs
Section titled â1.3. ĂvĂ©nements Sanity dĂ©clencheursâ- CrĂ©ation de document : [â /â]
- Modification de document : [â /â]
- Publication de document : [â /â]
- Suppression de document : [â /â]
- Types de documents concernés : [Liste : post, project, page, author, category, etc.]
2. Configuration dans Sanity Studio
Section titled â2. Configuration dans Sanity Studioâ2.1. ParamĂštres du webhook
Section titled â2.1. ParamĂštres du webhookâ| Champ | Valeur | Description |
|---|---|---|
| Name | [Nom du webhook] | Nom lisible pour lâidentification |
| URL | https://[worker-name].[subdomain].workers.dev |
URL du Worker L3 qui reçoit le webhook |
| HTTP Method | POST |
Méthode HTTP utilisée |
| Content Type | application/json |
Format du payload |
| Secret | [Valeur du secret] | Secret pour validation HMAC-SHA256 (stocké en env) |
| Events | [Liste des événements] | Ex: publish.create, publish.update, publish.delete |
| Include drafts | [â /â] | Inclure ou non les sauvegardes de brouillons |
| Filter | [Expression GROQ] | Filtre pour limiter les documents déclencheurs |
2.2. Filtre GROQ (si applicable)
Section titled â2.2. Filtre GROQ (si applicable)â_type in ["post", "project", "page", "author", "category"]Rationale : [Expliquer pourquoi ce filtre est nĂ©cessaire]
2.3. Payload envoyé par Sanity
Section titled â2.3. Payload envoyĂ© par Sanityâ{ "transactionId": "abc123", "transition": "publish", "documentId": "post-123", "document": { "_id": "post-123", "_type": "post", "title": "Mon article", "slug": { "current": "mon-article" }, "status": "published", "publishedAt": "2026-09-03T10:00:00Z" }, "previousRevision": "rev-456", "currentRevision": "rev-789", "timestamp": "2026-09-03T10:00:00Z"}2.4. En-tĂȘtes HTTP envoyĂ©s
Section titled â2.4. En-tĂȘtes HTTP envoyĂ©sâ| En-tĂȘte | Description |
|---|---|
Content-Type |
application/json |
x-sanity-signature |
t=1693735200,v1=abc123... (timestamp + signature HMAC-SHA256) |
x-sanity-webhook-id |
ID unique du webhook |
User-Agent |
Sanity-webhook/1.0 |
3. Flux et intégration
Section titled â3. Flux et intĂ©grationâ3.1. Diagramme de flux
Section titled â3.1. Diagramme de fluxâ[Sanity Content Lake] â (Ă©vĂ©nement : publish, create, update, delete) âŒ[HTTP POST vers URL du webhook] â âŒ[Worker L3 : cms-webhook-receiver] â âą Validation HMAC-SHA256 â âą Debouncing KV â âą DĂ©clenchement du build âŒ[HĂ©bergeur / CI/CD] â âą Build SSG Astro â âą RĂ©gĂ©nĂ©ration index Pagefind â âą DĂ©ploiement Cloudflare Pages âŒ[Site mis Ă jour]3.2. Composants impliquĂ©s
Section titled â3.2. Composants impliquĂ©sâ| Composant | RĂŽle | Couche | Documentation |
|---|---|---|---|
| Webhook Sanity | Envoi des notifications dâĂ©vĂ©nements | L1 | Ce document |
cms-webhook-receiver |
Réception, validation et traitement | L3 | /L3_Backend/cloudflare/workers/cms-webhook-receiver.md |
| Pipeline CI/CD | Build et déploiement | Infrastructure | [Lien vers docs CI/CD] |
4. Sécurité
Section titled â4. SĂ©curitĂ©â4.1. MĂ©canismes de sĂ©curitĂ©
Section titled â4.1. MĂ©canismes de sĂ©curitĂ©â| MĂ©canisme | ImplĂ©mentation | Rationale |
|---|---|---|
| Validation HMAC-SHA256 | Signature cryptographique du payload | Garantit lâauthenticitĂ© et lâintĂ©gritĂ© |
| Secret stocké en env | wrangler secret put cÎté Worker L3 |
Jamais dans le code source |
| HTTPS obligatoire | Cloudflare force TLS | Chiffrement en transit |
| Filtre GROQ | Limitation des documents dĂ©clencheurs | Ăvite les webhooks inutiles |
4.2. Gestion du secret
Section titled â4.2. Gestion du secretâCĂŽtĂ© Sanity : Le secret est configurĂ© dans lâinterface Studio lors de la crĂ©ation du webhook.
CÎté Worker L3 : Le secret est injecté via wrangler secret put :
wrangler secret put SANITY_WEBHOOK_SECRET --env productionwrangler secret put SANITY_WEBHOOK_SECRET --env stagingRĂšgle : Le secret doit ĂȘtre identique des deux cĂŽtĂ©s.
5. Débogage et troubleshooting
Section titled â5. DĂ©bogage et troubleshootingâ5.1. ProblĂšmes courants
Section titled â5.1. ProblĂšmes courantsâ| SymptĂŽme | Cause probable | Solution |
|---|---|---|
| Webhook non reçu | URL incorrecte ou firewall | VĂ©rifier lâURL dans Sanity et les logs du Worker L3 |
| âSignature invalideâ (cĂŽtĂ© Worker) | Secret incorrect ou payload modifiĂ© | VĂ©rifier que le secret est identique dans Sanity et le Worker |
| Build non déclenché | Filtre Sanity trop restrictif | Vérifier le filtre GROQ dans la configuration |
| Webhooks en cascade | Pas de debouncing cÎté Worker | Vérifier la configuration KV dans le Worker L3 |
5.2. Logs et monitoring
Section titled â5.2. Logs et monitoringâCĂŽtĂ© Sanity :
- Sanity Studio â Settings â Webhooks â Delivery logs
- Vérifier les tentatives de livraison et les réponses HTTP
CÎté Worker L3 :
- Cloudflare Worker Logs (voir
/L3_Backend/cloudflare/workers/cms-webhook-receiver.md)
5.3. Tests manuels
Section titled â5.3. Tests manuelsâ# Test de validation de signature (avec payload factice)PAYLOAD='{"test": "data"}'TIMESTAMP=$(date +%s)SECRET="your-secret"SIGNATURE=$(echo -n "${TIMESTAMP}.${PAYLOAD}" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')
curl -X POST "https://[worker-url]" \ -H "Content-Type: application/json" \ -H "x-sanity-signature: t=${TIMESTAMP},v1=${SIGNATURE}" \ -d "$PAYLOAD"6. Bonnes pratiques
Section titled â6. Bonnes pratiquesâ6.1. Configuration
Section titled â6.1. Configurationâ- â Utiliser un filtre GROQ pour limiter les webhooks aux documents pertinents
- â DĂ©sactiver âInclude draftsâ pour Ă©viter les webhooks inutiles
- â Utiliser un secret fort et unique par environnement (production/staging)
- â Documenter les changements de configuration dans ce fichier
6.2. Workflow éditorial
Section titled â6.2. Workflow Ă©ditorialâ- â Publier les modifications par lots plutĂŽt quâune par une
- â VĂ©rifier que le build a bien Ă©tĂ© dĂ©clenchĂ© aprĂšs publication
- â Ne pas modifier la configuration du webhook sans validation technique
- â Signaler immĂ©diatement tout Ă©chec de build aprĂšs publication
6.3. Considérations de performance
Section titled â6.3. ConsidĂ©rations de performanceâ- â ïž Les webhooks ne sont dĂ©clenchĂ©s que sur
publish(pas sur les sauvegardes de draft) - â ïž Le Worker L3 implĂ©mente un debouncing de 2 minutes pour protĂ©ger les quotas CI/CD
- â Les builds SSG peuvent prendre plusieurs minutes selon le volume de contenu
7. Ăvolutions et roadmap
Section titled â7. Ăvolutions et roadmapâ7.1. AmĂ©liorations planifiĂ©es
Section titled â7.1. AmĂ©liorations planifiĂ©esâ- [Ăvolution 1 : ex. Filtrage avancĂ© par type de document]
- [Ăvolution 2 : ex. Notification Slack/Teams en cas dâĂ©chec]
- [Ăvolution 3 : ex. Rejeu manuel des webhooks Ă©chouĂ©s]
7.2. Limitations connues
Section titled â7.2. Limitations connuesâ- â Les webhooks ne sont pas rĂ©troactifs (pas de rejeu automatique en cas dâĂ©chec)
- â Le payload Sanity ne contient pas toutes les mĂ©tadonnĂ©es (seulement le document modifiĂ©)
- â Le debouncing de 2 minutes peut masquer des publications rapides successives
8. Ressources liées
Section titled â8. Ressources liĂ©esâ- Documentation Sanity : Webhooks
- Worker L3 :
/L3_Backend/cloudflare/workers/cms-webhook-receiver.md - DAT L1 : §4.9.3 - Alerting Webhook & Opérations
- DAT L2 : §7 - Pipeline de DĂ©ploiement et dâInvalidation
- DAT L3 : §5.2 - Worker
cms-webhook-receiver
9. Historique des modifications
Section titled â9. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |
| YYYY-MM-DD | 1.1 | [Modification] | [Nom] |