Agora

Les webhooks sortants

Prévenir un salon Discord (ou une intégration) à chaque candidature, mandat, avis de recherche, dossier du tribunal, absence, sujet, article, mise à jour ou achat.

Mis à jour le 5 oct. 2026, 13 h 36

Sur cette page
  1. Ajouter un webhook pour Discord
  2. Les événements
  3. Le signalement dans un salon Discord
  4. Adresses refusées
  5. Échecs et coupure
  6. Pour une intégration maison : le JSON signé

En bref. Administration → Webhooks envoie un message quand il se passe quelque chose. Un webhook = un événement. Ils ne dépendent d'aucune licence.

Ajouter un webhook pour Discord #

  1. Dans Discord : Paramètres du salon → Intégrations → Webhooks → Nouveau webhook → Copier l'URL (aide officielle de Discord : Intro aux webhooks).
  2. Dans Agora : Administration → Webhooks.
  3. Choisis l'Événement, colle l'Adresse (https), laisse le format sur Embed Discord.
  4. Enregistre, puis clique sur Tester : un événement d'exemple part avec des valeurs factices.

Les événements #

ÉvénementDéclenché quand
application.receivedUne candidature vient d'être déposée
application.approved / application.rejectedLe staff accepte ou refuse une candidature
warrant.issuedUn mandat est émis (sans le nom du citoyen visé)
bolo.createdUn avis de recherche est lancé
leave.requested / leave.reviewedUne absence est demandée (jamais son motif : il peut toucher à la santé), puis tranchée
thread.createdUn sujet est ouvert sur le forum
report.createdUn membre vient de signaler un message ou un sujet du forum (groupe Modération)
court.case.filed / court.judgment.renderedUn dossier est déposé au tribunal, puis jugé
article.publishedUn article du journal est publié
txadmin.announcement / txadmin.restarttxAdmin annonce un message ou un redémarrage programmé (relayé par la ressource, txAdmin 8.0 ou plus récent)
update.availableUne nouvelle version d'Agora est disponible : une seule annonce par version, au moment où Agora la repère
vehicle.purchasedUn véhicule est acheté à la concession avec l'argent du jeu, une fois la livraison faite. Un achat en argent réel (PayPal) ou par Tebex n'est pas annoncé par ce webhook

Il y a 16 événements, rangés à l'écran en groupes : Candidatures, MDT, Tribunal, RH, Forum et journal, Modération, Concession, Système, txAdmin. Aucun n'est annoncé tant qu'un webhook ne le coche pas.

Un webhook annonce qu'il s'est passé quelque chose et où regarder. Il ne recopie jamais un dossier : ni réponse de candidature, ni rapport médical, ni contenu de message. Courriels, clés et identifiants Discord sont masqués automatiquement.

Le signalement dans un salon Discord #

report.created ne dit ni qui signale, ni son commentaire, ni qui est visé : seulement la section, le titre du sujet et le motif, avec un lien vers Modération → Signalements. Pour un sujet d'une section restreinte (lisible par certains groupes seulement), la section et le titre sont omis : le salon Discord n'a pas les mêmes droits de lecture que le forum. Le signaleur, lui, reçoit une notification « Ton signalement a été traité par le staff » (sans l'issue ni le motif) quand le staff traite son signalement. Voir Traiter les signalements.

Adresses refusées #

Seules les adresses https:// publiques sont acceptées : ni boucle locale, ni réseau privé, ni identifiant dans l'URL. C'est une protection du serveur.

Échecs et coupure #

  • 5 secondes d'attente, 3 tentatives par envoi.
  • Après 3 échecs consécutifs, le webhook est coupé et porte la pastille Coupé.
  • Corrige l'adresse, puis Tester : un test réussi le remet en service. Un webhook que tu as éteint à la main n'est jamais rallumé par un test.
  • Un échec est compté pour l'adresse qui l'a subi : si tu corriges l'adresse pendant qu'un envoi vers l'ancienne échoue, la nouvelle n'est pas coupée à tort.

Un webhook ne bloque jamais l'action qui le déclenche. Quand un événement est lié à un service, le message du salon Discord du service part en même temps que les webhooks, sans attendre qu'ils aient fini.

Pour une intégration maison : le JSON signé #

Choisis le format Autre intégration (JSON signé) et un secret de signature (16 à 200 caractères, jamais réaffiché). Chaque envoi porte les en-têtes X-Agora-Event, X-Agora-Delivery et X-Agora-Signature (t=horodatage,v1=HMAC-SHA256). La signature est le HMAC-SHA256 de horodatage.corps avec ton secret. Refuse un envoi de plus de 300 secondes et compare les signatures en temps constant.

Le corps contient event, at, id, site, title, summary, url et data. data donne chaque champ sous son libellé traduit (« Formulaire »), et data._byKey les mêmes valeurs sous leur clé technique stable (form, applicant, member…). Lis plutôt _byKey : elle ne change pas avec la langue du site.

Cet article t'a aidé ?