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
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 #
- Dans Discord : Paramètres du salon → Intégrations → Webhooks → Nouveau webhook → Copier l'URL (aide officielle de Discord : Intro aux webhooks).
- Dans Agora : Administration → Webhooks.
- Choisis l'Événement, colle l'Adresse (https), laisse le format sur Embed Discord.
- Enregistre, puis clique sur Tester : un événement d'exemple part avec des valeurs factices.
Les événements #
| Événement | Déclenché quand |
|---|---|
application.received | Une candidature vient d'être déposée |
application.approved / application.rejected | Le staff accepte ou refuse une candidature |
warrant.issued | Un mandat est émis (sans le nom du citoyen visé) |
bolo.created | Un avis de recherche est lancé |
leave.requested / leave.reviewed | Une absence est demandée (jamais son motif : il peut toucher à la santé), puis tranchée |
thread.created | Un sujet est ouvert sur le forum |
report.created | Un membre vient de signaler un message ou un sujet du forum (groupe Modération) |
court.case.filed / court.judgment.rendered | Un dossier est déposé au tribunal, puis jugé |
article.published | Un article du journal est publié |
txadmin.announcement / txadmin.restart | txAdmin annonce un message ou un redémarrage programmé (relayé par la ressource, txAdmin 8.0 ou plus récent) |
update.available | Une nouvelle version d'Agora est disponible : une seule annonce par version, au moment où Agora la repère |
vehicle.purchased | Un 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é ?
Articles liés
- Candidatures et examensConstruire un formulaire (whitelist, police…), ajouter un examen chronométré corrigé automatiquement, puis traiter les demandes dans Modération → Candidatures.
- Rapports, mandats, avis de recherche et arrestationsLes dossiers du quotidien : chacun a sa fiche, ses pièces jointes, son journal complet et une version imprimable.
- Employés et RH : grades, vacations, absences, fuseau horaireQui sert, qui est absent, combien d'heures et qui décroche : les heures viennent de la présence en jeu, les responsables gèrent grades et absences avec un motif.