Documentation

Notifications : commandes CLI

Prévenez personnes et systèmes quand un écran change d’état (notifications, webhooks), suivez les événements, traitez les alertes, attendez les opérations.

Chaque commande s’exécute comme décrit dans la référence CLI : drapeaux globaux, sortie JSON, codes de sortie, révisions et réessais.

Opérations

Les téléversements et les publications s’exécutent comme des opérations. media upload, media replace et app upload attendent la leur par défaut ; ces commandes servent à terminer une opération laissée en cours avec --no-wait.

operations show#

Lire l’état actuel d’une opération.

operations show <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de l’opération depuis l’enveloppe qui l’a démarrée.
screenrig operations show op_01EXAMPLEOPERATION00000

state vaut receiving, queued, running, succeeded, failed ou cancelled ; les trois dernières terminent l’opération. Une opération réussie porte son result, et une opération échouée porte error avec les champs code et detail du problème.

operations wait#

Interrogez une opération jusqu’à sa fin.

operations wait <id> [--timeout MS] [--poll-ms MS]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de l’opération.
--timeout MSintegernon120000Date limite d’attente. Elle limite aussi chaque requête sous-jacente.
--poll-ms MSintegernon1000Intervalle entre les sondages d’opération en attente.
screenrig operations wait op_01EXAMPLEOPERATION00000

L’attente se termine quand l’opération est succeeded, failed ou cancelled. Une opération échouée ou annulée se termine avec 13 et sa propre erreur. Une attente qui dépasse son délai se termine avec 11 et l’opération continue de s’exécuter ; le next de l’erreur est operations wait ID, qui reprend l’attente sans relancer l’opération.

operations cancel#

Demander au plan de contrôle d’annuler une opération.

operations cancel <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de l’opération.
screenrig operations cancel op_01EXAMPLEOPERATION00000

L’annulation exige l’accès Gérer. La réponse est l’opération annulée.

Événements

Le journal d’événements du projet enregistre ce que le projet a fait et ce que la flotte a fait. Une version publiée ajoute application.published ; une application qui appelle screenrig.emit(code) ajoute son propre événement, qui est la preuve la plus directe qu’elle a été exécutée sur un écran.

La présence est aussi dans le journal. screen.offline est écrit une fois qu’un écran est hors ligne depuis 60 secondes, et screen.online quand il revient ; une reconnexion dans ces 60 secondes n’écrit ni l’un ni l’autre. screen.offline porte details.offline_since et, quand l’écran a déjà été en ligne, details.last_online_at. screen.online porte details.last_online_at, plus details.offline_at quand l’écran était hors ligne avant de revenir. Comme chaque événement screen.*, ils sont gratuits sur le flux d’écoute, donc un agent peut garder events follow ouvert pour surveiller une flotte.

Les mises à jour de contenu d’un Player arrivent sous forme de screen.manifest_changed, screen.manifest_activated et screen.manifest_upgrade, dont les details portent manifest_revision, state et, lorsqu’ils sont présents, code et attempt. Une mise à niveau failed a la gravité d’erreur, et retrying, blocked et partial sont des avertissements.

events list#

Lire une page finie d’événements de projet.

events list [--after CURSOR] [--limit N] [--type TYPE] [--source project|log] [--screen-id ID] [--playlist-id ID] [--app-id ID]
ParamètreTypeRequisPar défautNotes
--after CURSORstringnonla première pageReprendre après le next_cursor de la page précédente.
--limit Nintegernon50Taille de la page, de 1 à 200.
--type TYPEstringnonchaque typeUn type d’événement, ou une famille par un préfixe se terminant par un point, comme note..
--source SOURCEstringnonprojectproject liste les événements du projet. log liste les enregistrements du journal du Player, qui appartiennent à un écran : utilisez-le avec --screen-id.
--screen-id IDstringnonchaque écranÉvénements dont la ressource est cet écran, y compris ceux émis par le SDK. Avec --source log, les enregistrements du journal du Player de cet écran.
--playlist-id IDstringnonchaque liste de lectureÉvénements dont la ressource est cette liste de lecture, et événements qui la nomment dans details.playlist_id, par exemple un écran qui la prend. Pas avec --source log.
--app-id IDstringnontoutes les applicationsÉvénements de la ressource d’application, de ses versions et de ses entrées clé/valeur; exclut les événements émis par le SDK. Pas avec --source log.
screenrig events list --limit 25
screenrig events list --type application.event --screen-id scr_SCREEN
screenrig events list --playlist-id pl_PLAYLIST
screenrig events list --source log --screen-id scr_SCREEN

Les méthodes emit() et emitConfirmed() du SDK ajoutent des enregistrements application.event dont la ressource est l’écran. Lisez-les avec --type application.event et, au besoin, --screen-id. Les champs details.primitive_id et details.code renvoyés identifient la primitive émettrice et l’action nommée. --app-id sélectionne les événements de la ressource d’application, de ses versions et de ses entrées clé/valeur, et exclut donc ces événements d’écran.

--source log lit le journal du Player : les conditions qu’un Player signale, conservées pendant la durée de conservation des événements du projet. Il n’a pas de séquence, donc il n’est pas dans events follow et n’est pas livré aux webhooks, et --playlist-id et --app-id sont refusés avec lui (usage_error, sortie 2). Un identifiant du mauvais type est refusé avant toute requête. data.next_cursor vaut null à la fin de l’historique.

La sortie par défaut est une enveloppe JSON pour la page. Avec --human, la sortie est une ligne logfmt par événement : at=, type=, severity= et détails scalaires.

events follow#

Restez sur le flux d’événements et affichez les événements à leur arrivée.

events follow [--after CURSOR] [--timeout MS] [--type TYPE]
ParamètreTypeRequisPar défautNotes
--after CURSORstringnonla queue en directReprendre à partir de ce curseur.
--timeout MSintegernonpas de délaiMet fin à tout le suivi, y compris la temporisation de reconnexion.
--type TYPEstringnonchaque typeUn type d’événement, ou une famille par un préfixe se terminant par un point, comme note..
screenrig events follow

Une déconnexion ou une panne transitoire se reconnecte avec temporisation progressive et reprend depuis le dernier id d’événement. La relecture après reconnexion est gratuite. Les problèmes d’autorisation et de non-trouvé arrêtent la commande plutôt que de la réessayer.

Avec --type, le flux transporte toujours tous les événements et la CLI n’affiche que ceux qui correspondent, et les trames stream.* qui décrivent le flux lui-même s’affichent toujours : screenrig events follow --type note. surveille les notes du projet.

La sortie par défaut est NDJSON : une enveloppe par événement sur sa propre ligne, plutôt qu’une seule enveloppe. Utilisez --human pour des lignes logfmt.

Notifications

Une notification avertit une personne, ou un autre système, lorsqu’un écran change d’état. Une notification par courriel envoie un courriel à chaque destinataire, une notification webhook envoie un POST HTTPS signé, et une notification Slack, Teams, PagerDuty ou Telegram publie un message dans une messagerie ou un outil d’alerte. Une organisation en compte au plus 50, tous canaux confondus et tous projets confondus, et chaque projet démarre avec un courriel à son propriétaire lorsqu’un écran est hors ligne depuis 10 minutes.

Une notification surveille les conditions que vous nommez :

ConditionCommence quandSe termine quand
screen_offlineLe Player est hors ligne depuis 60 secondes.L’écran est revenu en ligne.
display_disconnectedLe Player signale que son afficheur est déconnecté.L’afficheur se reconnecte.
running_hotL’appareil signale une température égale ou supérieure au seuil de surchauffe.La température revient à la normale.
on_batteryUn appareil muni d’une batterie signale qu’il fonctionne sur batterie, débranché.L’appareil signale une autre source d’alimentation.
storage_fullLe stockage du Player ne suffit pas pour son contenu.Le manque est comblé.
content_stuckLa mise à jour du contenu de l’écran est en nouvelle tentative, échouée, bloquée ou partielle.La mise à jour atteint un autre état.
not_playingLe Player affiche une erreur au lieu de son contenu. Un stockage plein est storage_full.Le statut du Player n’est plus une erreur.
loop_stalledUn écran en ligne, conforme à son horaire et dont le contenu est à jour n’a démarré aucune image ni vidéo depuis plus longtemps que ne le permet sa boucle.Une image ou une vidéo redémarre, ou screenRIG cesse de juger l’écran.
glass_blankLes captures d’écran prises par screenRIG sur une série couvrant toute la boucle étaient toutes d’une seule teinte uniforme.Deux captures d’écran de suite montrent une image, ou screenRIG cesse de juger l’écran.
glass_frozenLes captures d’écran prises par screenRIG sur une série couvrant toute la boucle montraient toutes la même image.Deux captures d’écran de suite montrent une image en mouvement, ou screenRIG cesse de juger l’écran.
crashingLe Player a planté ou redémarré son moteur de rendu à répétition.Jamais : chaque pic est un avis à part.
source_failedL'actualisation d'une source de données a échoué.Une actualisation réussit.
source_staleUne source de données a continué d'échouer jusqu'à l'expiration de ses données.Une actualisation réussit.
card_data_staleLes données d’une carte, écrites avec une expiration, l’ont atteinte alors qu’un écran affiche la carte et que rien ne les a renouvelées.Une écriture dans les données de la carte aboutit.
reach_droppedUne campagne atteint moins d’écrans qu’à sa dernière publication, parce que des écrans ont quitté ses étiquettes ou ses dossiers, ou ont été archivés ou supprimés.La campagne atteint de nouveau autant d’écrans, ou elle est publiée de nouveau.
group_emptyUne étiquette ou un dossier de l’audience d’une campagne ne correspond à aucun écran.L’étiquette ou le dossier correspond de nouveau à un écran, ou une publication le retire de l’audience.

Une condition déclenche un avis une fois qu’elle a duré --hold minutes (10 par défaut), donc une reconnexion rapide reste silencieuse. Si elle prend fin avant, rien n’est envoyé ; si elle prend fin après l’envoi d’un avis, un avis de résolution suit. crashing est envoyé immédiatement. Un avis est aussi ignoré lorsque quelqu’un acquitte ou reporte l’alerte de l’écran pendant le délai d’attente, ou lorsqu’une mise en sourdine couvre l’écran. --tag limite une notification aux écrans portant cette étiquette ; sans étiquette, tous les écrans comptent.

Chaque avis a une gravité. Un avis ouvert est error pour screen_offline et warning pour toute autre condition, et un avis résolu ou un test est info. --min-severity LEVEL (info, warning ou error) ne crée aucun avis ouvert sous ce niveau, et un avis résolu suit son avis ouvert. --severity CONDITION=LEVEL, répétable, définit le niveau d’une condition pour cette notification, comme --severity not_playing=error ; il compte pour --min-severity. Teams et PagerDuty affichent toujours le niveau, le texte des courriels, de Slack et de Telegram le nomme quand la notification définit --min-severity ou --severity, et le corps d’un webhook porte severity.

--active-hours SPEC envoie les avis ouverts seulement à l’intérieur de fenêtres hebdomadaires, lues dans --timezone ZONE, qu’il exige. SPEC est DAYS HH:MM-HH:MM, comme "Mon-Fri 08:00-22:00" ; répétez-le jusqu’à 16 fois. Avec --outside-hours hold, la valeur par défaut, un avis qui arrive à échéance en dehors des heures attend la prochaine fenêtre et part alors si sa condition tient toujours, de sorte qu’une condition qui disparaît d’abord n’envoie rien. Avec drop, l’avis est ignoré comme outside_hours, que notifications deliveries liste. Un avis résolu pour un avis ouvert qui a été envoyé part toujours, crashing suit les heures comme n’importe quelle autre condition, un report est vérifié en premier, et notifications test ignore les heures, la gravité et l’audience.

--audience FILE (JSON en ligne, un fichier ou - pour l’entrée standard) choisit les écrans selon les règles d’une audience de campagne, comme {"all":[{"tag":"level2"},{"tag":"overhead"}]} pour les écrans portant les deux étiquettes ; --all-tags TAG et --any-tag TAG sont les raccourcis pour une règle all et une règle any d’étiquettes, et --tag signifie n’importe laquelle des étiquettes. --tag, --any-tag, --all-tags et --audience s’excluent mutuellement.

loop_stalled, glass_blank et glass_frozen sont des verdicts que screenRIG tire des rapports de lecture et des captures d’écran qu’il reçoit, et ils laissent de côté ce qu’ils ne peuvent pas juger : un écran hors ligne, dont l’affichage est éteint, sous prise de contrôle ou suspendu, qui montre une seule image fixe ou un mur vidéo, ou dont le Player n’envoie pas de numéros de lecture. Lorsque screenRIG cesse de juger un écran qu’il avait trouvé dans l’un de ces états, l’alerte se ferme, mais le courriel, Slack, Teams et Telegram n’envoient aucun avis de résolution, car rien n’a montré que l’écran se rétablissait ; PagerDuty résout tout de même son incident.

source_failed et source_stale surveillent les sources de données du projet, pas ses écrans : un avis nomme la source et renvoie à sa page, et --tag ne correspond jamais à une source.

card_data_stale surveille une carte, pas un écran. Écrivez les données d’une carte avec une expiration adaptée au calendrier de son rédacteur (card data put --ttl 30m) : quand la tâche ou l’agent qui les renouvelle s’arrête, les données expirent, la carte est vide sur chaque écran qui l’affiche, et cette condition vous en informe. L’avis nomme la carte et le moment où ses données ont expiré, et renvoie à l’éditeur de pages sur une page qui la place. Les documents d’une source de données ne sont jamais annoncés ici (source_stale s’en charge), pas plus qu’une carte qu’aucun écran n’affiche, des données écrites sans expiration ou des données supprimées. --tag ne correspond jamais à une carte.

reach_dropped et group_empty surveillent une campagne, pas un écran. L’avis nomme la campagne et les écrans qu’elle atteignait avant et atteint maintenant, ou l’étiquette ou le dossier vide, et renvoie au calendrier de la campagne. Une campagne appartient au projet, donc --tag, --any-tag, --all-tags et --audience ne les limitent jamais ; --min-severity, --severity, --active-hours et --hold s’appliquent comme pour toute condition, et les deux sont warning par défaut. --reach-drop-screens N et --reach-drop-percent P n’envoient un avis reach_dropped que pour une baisse d’au moins N écrans et d’au moins P pour cent des écrans que la campagne atteignait lors de sa publication ; une baisse doit remplir les deux seuils, et sans eux toute baisse déclenche un avis. Ils exigent reach_dropped dans --conditions. Chaque étiquette ou dossier vide d’une campagne donne son propre avis, et notifications deliveries l’affiche comme audience_group (tag:Lobby ou folder:sfd_…). Une publication qui retire un groupe vide de l’audience ferme un incident PagerDuty et l’alerte d’un webhook, mais n’envoie aucun courriel ni message de rétablissement dans une messagerie.

Le courriel est envoyé à l’adresse vérifiée de chaque destinataire, un courriel par destinataire pour tout ce qui arrive à échéance en l’espace d’environ deux minutes, avec un lien vers chaque écran et vers la notification dans le tableau de bord. Les destinataires sont owner (la personne qui possède le projet au moment de l’envoi de l’avis) et les identifiants d’utilisateur des membres du projet. Un destinataire sans adresse vérifiée, ou qui a quitté le projet, est ignoré. Les courriels de notification et les avis d’écran sont gratuits.

Chaque courriel contient un lien de désabonnement pour son propre destinataire : le bouton de désabonnement des applications de courriel et un lien dans le pied de page. Le suivre arrête les courriels de cette notification pour cette seule personne, sans connexion, et la page qui s’ouvre contient un bouton Resubscribe. Les autres destinataires ne sont pas touchés, et la personne reste parmi les destinataires. notifications show indique qui s’est désabonné avec unsubscribed, et notifications resubscribe lui renvoie des courriels. Un avis sans personne à qui écrire est ignoré avec no_recipients.

Une notification par webhook envoie chaque avis par POST en JSON, et vous le vérifiez comme décrit dans Vérifier une livraison. Avec --events, elle envoie aussi par POST les événements bruts du projet au fur et à mesure ; ces livraisons sont mesurées comme décrit dans Webhooks.

Une notification Slack, Teams, PagerDuty ou Telegram publie un message par panne et par écran, ou par groupe d’écrans : l'écran, ce qui a changé, depuis quand, le projet, un lien vers l'écran et, lorsqu'un écran hors ligne revient, sa cause probable si elle est connue à ce moment-là. Un message de rétablissement suit une fois le premier envoyé et, dans PagerDuty, il résout l'incident ouvert par le premier. Vous donnez le justificatif une seule fois (--slack prend l'URL d'un webhook entrant, --teams l'URL d'un webhook Workflows, --pagerduty une clé d'acheminement de l'API Events v2, --telegram un jeton de bot avec --telegram-chat); il est scellé, jamais affiché de nouveau, et destination_hint n'en montre que la fin masquée. Un - le lit depuis une ligne de stdin pour qu'il reste hors de l'historique de votre shell. Une publication échouée est retentée pendant 24 heures, et une notification qui échoue pendant 72 heures est désactivée.

Quand trois écrans ou plus entrent dans la même condition à moins de cinq minutes les uns des autres et partagent un réseau, un emplacement, un modèle, une version du Player ou une étiquette, une notification par courriel, Slack, Teams, PagerDuty ou Telegram envoie un seul avis pour eux au lieu d’un par écran, et un seul avis annonce le groupe quand son dernier écran est rétabli ; l’avis de chaque autre écran est ignoré comme grouped. Un webhook envoie toujours un avis par écran.

La lecture des notifications et de leurs livraisons demande l’accès Lecture seule ; créer, modifier, tester et supprimer une notification, renouveler son secret et réabonner une personne demandent l’accès Gérer.

Code de problèmeSortieSens
webhook_url_rejected8L’URL n’est pas https sur le port 443 ou 8443, ou son hôte ne résout pas uniquement en adresses Internet publiques. error.detail indique la raison du serveur. Rien n’a été créé ni modifié.
notification_destination_rejected8La destination ne convient pas à son canal, ou c'est l'URL d'un connecteur Office 365 retiré. error.detail indique la forme attendue. Rien n'a été créé ni modifié.
notification_limit_reached5L’organisation a déjà 50 notifications. Supprimez-en une d’abord.
revision_conflict6La révision --expect-rev était périmée. Exécutez notifications show, puis réessayez.
rate_limited7Plus de 20 appels notifications test en une minute pour cette organisation.
invalid_request8Un destinataire --email qui n’est pas membre du projet, ou une option qui appartient à un autre canal, comme --url sur une notification par courriel. Rien n’a été créé ni modifié.

notifications create#

Créer une notification par courriel, webhook, Slack, Teams, PagerDuty ou Telegram.

notifications create (--email RECIPIENTS | --webhook URL | --slack URL | --teams URL | --pagerduty KEY
                      | --telegram TOKEN --telegram-chat CHAT_ID) [--conditions LIST] [--events TYPES]
                     [--tag TAG... | --any-tag TAG... | --all-tags TAG... | --audience FILE] [--hold MINUTES]
                     [--min-severity LEVEL] [--severity CONDITION=LEVEL]... [--active-hours SPEC]...
                     [--timezone ZONE] [--outside-hours hold|drop] [--reach-drop-screens N] [--reach-drop-percent P]
                     [--description TEXT] [--disabled]
ParamètreTypeRequisPar défautNotes
--email RECIPIENTSstringun indicateur de canalaucunEnvoyer un courriel à ces destinataires séparés par des virgules : owner, ou l’identifiant d’utilisateur d’un membre du projet, au maximum 20.
--webhook URLstringun indicateur de canalaucunUne URL https sur le port 443 (par défaut) ou 8443 dont l’hôte ne résout qu’en adresses Internet publiques. Le serveur la vérifie à chaque écriture et de nouveau avant chaque livraison. Une URL portant des identifiants (user:pass@ ou token@) ou un fragment # est refusée localement avec la sortie 2.
--conditions LISTstringoui, sauf pour un webhookaucunConditions séparées par des virgules, tirées du tableau ci-dessus. Un webhook nécessite ce paramètre, --events, ou les deux.
--slack URLstringun indicateur de canalaucunPublier dans Slack avec l'URL d'un webhook entrant sur hooks.slack.com, ou - pour la lire depuis une ligne de stdin.
--teams URLstringun indicateur de canalaucunPublier dans Teams avec l'URL d'un webhook Workflows (le déclencheur « Lorsqu'une requête webhook Teams est reçue »), ou - pour stdin. Les URL de connecteurs Office 365 sont retirées et refusées.
--pagerduty KEYstringun indicateur de canalaucunDéclencher et résoudre des incidents PagerDuty avec une clé d'acheminement de l'API Events v2 de 32 caractères, ou - pour stdin.
--telegram TOKENstringun indicateur de canalaucunPublier dans Telegram avec un jeton de bot, ou - pour stdin. Nécessite --telegram-chat.
--telegram-chat CHAT_IDstringavec --telegramaucunLa conversation où publier : son identifiant numérique, par exemple -1001234567890, ou @channelname.
--events TYPESstringnonaucunWebhook seulement. Envoyer aussi par POST ces événements bruts du projet : 1 à 32 types exacts séparés par des virgules, comme screen.online, ou des préfixes finissant par .*, comme screen.*.
--tag TAGstringnonchaque écranSeulement les écrans portant l’une de ces étiquettes. Répétez l’indicateur ou séparez par des virgules, jusqu’à 16 étiquettes.
--hold MINUTESintegernon10Combien de temps une condition doit durer avant de déclencher un avis, de 0 à 1440. Aucun délai d’attente ne s’applique à crashing.
--all-tags TAGstringnonaucunSeulement les écrans portant toutes les étiquettes listées. Répétez l’indicateur ou séparez par des virgules.
--any-tag TAGstringnonaucunSeulement les écrans portant au moins une des étiquettes listées, comme --tag. Répétez l’indicateur ou séparez par des virgules.
--audience FILEstringnonchaque écranLes écrans sous forme de règle d’audience de campagne en JSON : en ligne, un fichier, ou - pour l’entrée standard. Pas avec les options d’étiquettes.
--min-severity LEVELstringnonaucuninfo, warning ou error : les avis ouverts en dessous de ce niveau ne sont pas envoyés.
--severity CONDITION=LEVELstringnonles valeurs par défautDéfinit la gravité d’une condition pour cette notification. Répétez l’indicateur.
--active-hours SPECstringnontoujoursN’envoyer les avis ouverts qu’à l’intérieur de cette fenêtre hebdomadaire, DAYS HH:MM-HH:MM comme "Mon-Fri 08:00-22:00". Répétez jusqu’à 16 fois. Exige --timezone.
--timezone ZONEstringavec --active-hoursaucunLe fuseau IANA dans lequel les heures sont lues, comme America/Los_Angeles.
--outside-hours MODEstringnonholdhold attend la prochaine fenêtre ; drop ignore l’avis.
--reach-drop-screens Nintegernontoute baisseSeulement avec reach_dropped : n’envoie un avis que si la campagne a perdu au moins N écrans (1 ou plus).
--reach-drop-percent Pintegernontoute baisseSeulement avec reach_dropped : exige aussi une perte d’au moins P pour cent (1 à 100) des écrans que la campagne atteignait lors de sa publication.
--description TEXTstringnonaucunAu maximum 200 caractères.
--disabledbooleannondésactivéCréer désactivée. Rien n’est envoyé avant notifications update --enable.
screenrig notifications create --email owner --conditions screen_offline,display_disconnected --tag Lobby
screenrig notifications create --webhook https://hooks.example.com/screenrig --conditions screen_offline,crashing
screenrig notifications create --slack - --conditions screen_offline,crashing < slack-url.txt

L’enveloppe est la notification. Celle d’un webhook contient son secret de signature dans data.secret (whsec_…) avec l’avertissement webhook_secret_shown_once. Stockez le secret dans le magasin de secrets du récepteur immédiatement. Seul notifications rotate-secret le renvoie à nouveau, et le CLI ne l’écrit jamais dans sa configuration, son journal d’opération ou son état de récupération d’écriture. Après une création interrompue ou ambiguë, relancez la même commande dans les 24 heures : elle réutilise la clé d’idempotence enregistrée, et le serveur renvoie la même réponse, secret inclus. Les avis commencent au premier événement qui suit la création de la notification.

notifications list#

Lister les notifications de ce projet, jamais leurs secrets.

notifications list
screenrig notifications list

Chaque ligne est une notification de n’importe quel canal, de la plus ancienne à la plus récente, avec son status. Une notification Slack, Teams, PagerDuty ou Telegram affiche destination_hint, son justificatif masqué jusqu’à l’hôte et aux derniers caractères, dans la colonne TO de --human. Sous l’accès Gérer, l’url d’un webhook est vide et url_redacted est vrai, et TO affiche (withheld).

notifications show#

Inspecter une notification et sa santé de livraison.

notifications show <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'identifiant de notification ntf_ (tout canal sauf webhook) ou whk_ (webhook).
screenrig notifications show ntf_01EXAMPLENOTICE00000

status est active, failing tant qu’aucune livraison n’a réussi depuis failing_since, ou disabled. Après 72 heures d’échec continu, la notification est désactivée avec disabled_reason: delivery_failures, et le journal des événements enregistre notification.disabled. snoozed_until est présent tant qu’une mise en sourdine est définie. last_success_at et last_failure_at rapportent les derniers résultats. revision est la valeur que --expect-rev contrôle. min_severity, severity, active_hours avec outside, audience et reach_drop apparaissent tant qu’ils sont définis, et une notification par courriel liste unsubscribed.

notifications update#

Modifier les destinataires, l'URL, la destination, les conditions, les écrans, le délai, la mise en veille ou l'état d'activation d'une notification.

notifications update <id> [--email RECIPIENTS | --url URL | --destination VALUE] [--telegram-chat CHAT_ID]
                          [--conditions LIST | --clear-conditions]
                          [--events TYPES | --clear-events] [--tag TAG... | --any-tag TAG... | --all-tags TAG... | --audience FILE | --all-screens]
                          [--hold MINUTES] [--min-severity LEVEL | --clear-min-severity]
                          [--severity CONDITION=LEVEL]... [--clear-severity]
                          [--active-hours SPEC]... [--timezone ZONE] [--outside-hours hold|drop] [--clear-active-hours]
                          [--reach-drop-screens N] [--reach-drop-percent P] [--clear-reach-drop]
                          [--description TEXT | --clear-description] [--enable | --disable]
                          [--snooze WHEN] [--expect-rev REVISION]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'identifiant de notification ntf_ (tout canal sauf webhook) ou whk_ (webhook).
--email RECIPIENTSstringau moins un changementinchangéNotifications par courriel : remplace les destinataires.
--url URLstringau moins un changementinchangéNotifications par webhook : remplace l’URL, vérifiée comme create.
--destination VALUEstringau moins un changementinchangéNotifications Slack, Teams, PagerDuty et Telegram : remplace le justificatif, vérifié comme avec create. - le lit depuis une ligne de stdin.
--telegram-chat CHAT_IDstringau moins un changementinchangéNotifications Telegram : remplace la conversation.
--conditions LISTstringau moins un changementinchangéRemplace les conditions.
--clear-conditionsbooleanau moins un changementdésactivéSupprimer toutes les conditions. Un webhook nécessite alors --events.
--events TYPESstringau moins un changementinchangéNotifications par webhook : remplace les événements bruts du projet.
--clear-eventsbooleanau moins un changementdésactivéNotifications par webhook : arrêter d’envoyer par POST les événements bruts du projet. La notification nécessite alors des conditions.
--tag TAGstringau moins un changementinchangéRemplace les étiquettes d’écran, et l’audience si la notification en a une.
--all-screensbooleanau moins un changementdésactivéSupprimer les étiquettes d’écran et l’audience ; la notification couvre chaque écran.
--hold MINUTESintegerau moins un changementinchangé0 à 1440.
--all-tags TAGstringau moins un changementinchangéRemplace les écrans par ceux portant toutes les étiquettes listées.
--any-tag TAGstringau moins un changementinchangéRemplace les écrans par ceux portant au moins une des étiquettes listées, comme --tag.
--audience FILEstringau moins un changementinchangéRemplace les écrans par une règle d’audience de campagne en JSON : en ligne, un fichier, ou - pour l’entrée standard.
--min-severity LEVELstringau moins un changementinchangéinfo, warning ou error.
--clear-min-severitybooleanau moins un changementdésactivéSupprimer le filtre de gravité.
--severity CONDITION=LEVELstringau moins un changementinchangéRemplace les substitutions de gravité par celles-ci. Répétez l’indicateur.
--clear-severitybooleanau moins un changementdésactivéSupprimer chaque substitution de gravité.
--active-hours SPECstringau moins un changementinchangéRemplace les fenêtres par celles-ci. Répétez jusqu’à 16 fois. --timezone prend par défaut le fuseau que la notification a déjà.
--timezone ZONEstringau moins un changementinchangéLe fuseau IANA dans lequel les heures sont lues. Seul, il conserve les fenêtres actuelles.
--outside-hours MODEstringau moins un changementinchangéhold ou drop. Seul, il conserve les fenêtres actuelles.
--clear-active-hoursbooleanau moins un changementdésactivéSupprimer les heures actives. Les avis qui étaient en attente pour elles sont jugés de nouveau aussitôt.
--reach-drop-screens Nintegerau moins un changementinchangéRemplace le nombre minimal d’écrans que la campagne doit avoir perdus pour qu’un avis reach_dropped soit envoyé.
--reach-drop-percent Pintegerau moins un changementinchangéRemplace le pourcentage minimal de sa portée publiée que la campagne doit avoir perdu.
--clear-reach-dropbooleanau moins un changementdésactivéSupprimer le seuil, de sorte que toute baisse déclenche un avis. Retirez reach_dropped de --conditions seulement avec lui.
--description TEXTstringau moins un changementinchangéAu maximum 200 caractères.
--clear-descriptionbooleanau moins un changementdésactivéSupprimer la description.
--enablebooleanau moins un changementdésactivéEfface l’état d’échec et démarre à l’événement qui enregistre le changement ; rien de ce qui s’est produit pendant sa désactivation n’est envoyé.
--disablebooleanau moins un changementdésactivéArrête les avis ; les avis en attente échouent avec webhook_disabled.
--snooze WHENstringau moins un changementinchangéNe rien envoyer jusque-là : une durée comme 30m, 1h ou 2d (moins de 30 jours), un instant RFC 3339 avec secondes et décalage, ou off pour mettre fin à la mise en sourdine. Les avis qui arrivent à échéance entre-temps sont ignorés, pas envoyés plus tard.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision.
screenrig notifications update ntf_01EXAMPLENOTICE00000 --snooze 2h

update modifie uniquement les champs que vous passez. Le canal ne change jamais : --email s’applique à une notification par courriel, --url et --events à un webhook, et --destination et --telegram-chat à une notification de messagerie ou de pagination, et une option d’un autre canal donne invalid_request (sortie 8). Donnez au plus l’un de --email, --url et --destination. Les étiquettes d’écran et une audience s’excluent mutuellement : définir l’une efface l’autre. Une notification par courriel garde au moins une condition, et un webhook garde des conditions ou des événements. Le secret de signature reste inchangé ; utilisez notifications rotate-secret.

notifications delete#

Supprimer une notification. Ses avis en attente échouent avec webhook_deleted.

notifications delete <id> [--expect-rev REVISION]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'identifiant de notification ntf_ (tout canal sauf webhook) ou whk_ (webhook).
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision.
screenrig notifications delete ntf_01EXAMPLENOTICE00000

Son journal de livraison ne peut plus être lu ensuite ; ses lignes expirent avec la conservation des événements.

notifications rotate-secret#

Remplace le secret de signature d’une notification webhook et reçoit le nouveau une seule fois. Tout autre canal n’a pas de secret et répond invalid_request (sortie 8).

notifications rotate-secret <id> [--expect-rev REVISION]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'identifiant de notification ntf_ (tout canal sauf webhook) ou whk_ (webhook).
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision.
screenrig notifications rotate-secret whk_01EXAMPLEWEBHOOK00000

L’enveloppe transporte le nouveau secret dans data.secret avec l’avertissement webhook_secret_shown_once ; stockez-le immédiatement. Le secret précédent cesse de signer, mais au plus une tentative déjà en cours peut encore arriver signée avec lui, donc acceptez les deux pendant un court moment. Après une rotation interrompue ou ambiguë, relancez la même commande dans les 24 heures pour récupérer le même secret.

notifications test#

Envoyer un courriel de test, un POST de test signé ou un message de messagerie à cette notification seulement.

notifications test <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'identifiant de notification ntf_ (tout canal sauf webhook) ou whk_ (webhook).
screenrig notifications test ntf_01EXAMPLENOTICE00000

L’enveloppe est la livraison en file d’attente. Elle est tentée une fois sans nouvelle tentative, fonctionne sur une notification désactivée ou en sourdine, et ne change jamais l’état d’échec de la notification. Au plus 20 livraisons de test par minute et par organisation ; au-delà, la réponse est rate_limited (sortie 7). Lisez le résultat avec notifications deliveries.

Un test PagerDuty déclenche un événement d'information de clé screenrig:test:DELIVERY_ID et le résout aussitôt, de sorte qu'aucun incident ne reste ouvert.

notifications resubscribe#

Envoyer de nouveau les courriels d’une notification à une personne qui s’est désabonnée.

notifications resubscribe <id> --user USER_ID
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant ntf_ d’une notification par courriel.
--user USER_IDstringouiaucunL’identifiant d’utilisateur de la personne, tel que notifications show l’indique sous unsubscribed.
screenrig notifications resubscribe ntf_01EXAMPLENOTICE00000 --user usr_01EXAMPLEPERSON0000

L’enveloppe est la notification. Une personne qui n’est pas désabonnée ne change rien. Réabonner une personne augmente la révision et ajoute notification.updated. Une notification d’un autre canal ou d’un autre projet est not_found (sortie 4).

notifications deliveries#

Lire le journal de livraison d’une notification, du plus récent au plus ancien.

notifications deliveries <id> [--before CURSOR] [--limit N]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'identifiant de notification ntf_ (tout canal sauf webhook) ou whk_ (webhook).
--before CURSORstringnonl’événement le plus récentLe next_cursor (whc1_… ou whc2_…) de la page précédente.
--limit Nintegernon50Lignes par page, de 1 à 200.
screenrig notifications deliveries ntf_01EXAMPLENOTICE00000 --limit 20

Chaque ligne est un événement, ou un avis d’une condition sur un écran : event_type, state (pending, succeeded, failed ou skipped), attempts, last_status et une classe last_error fixe comme http_status, timeout, connection_failed, tls_failed, dns_failed, url_rejected, email_failed, email_rejected ou secret_unavailable. Un avis d’écran ajoute condition, phase (opened ou resolved), screen_id, screen_name (pour une source de données, une campagne ou une carte, son identifiant et son nom) et since, et un avis par courriel ajoute emailed, le nombre de personnes jointes. Un avis qu’il n’a pas fallu envoyer est skipped, avec sa raison dans last_error : condition_cleared (l’écran a quitté l’état avant la fin du délai), not_opened (aucun avis n’est parti à résoudre), snoozed (la notification est en sourdine), acknowledged (quelqu’un a acquitté ou reporté l’alerte de l’écran pendant le délai), muted (une mise en sourdine couvre l’écran), outside_hours (les heures actives de la notification étaient fermées et elle abandonne les avis hors de ces heures), below_severity (l’avis est sous min_severity, relevé après sa mise en file), planned_reboot (l’écran a fait une panne, déconnecté son affichage ou planté pendant un redémarrage envoyé par screenRIG, jusqu’à sa fin ou jusqu’à dix minutes après son envoi), no_recipients (aucun destinataire n’est membre du projet avec une adresse vérifiée et sans désabonnement), grouped (l’écran est entré dans la condition avec d’autres, et un avis sur une autre ligne les dit tous), ou no_longer_judged (une condition loop_stalled, glass_blank ou glass_frozen a pris fin parce que screenRIG a cessé de juger l’écran, une condition reach_dropped parce que la campagne a été republiée ou supprimée, une condition group_empty parce qu’une publication a retiré l’étiquette ou le dossier de son audience, ou une condition card_data_stale parce que les données de la carte ont été supprimées, de sorte qu’aucun rétablissement n’a été signalé). L’avis qui a dit un groupe d’écrans porte group (id, attribute, value et count), et chaque autre écran du groupe porte group_id ; --human affiche les deux dans une colonne GROUP. Les lignes n’incluent jamais la réponse du récepteur. next_cursor vaut null à la fin du journal. Une tentative échouée est retentée avec un délai croissant, de 30 secondes doublant jusqu’à une heure, pendant 24 heures, puis la ligne est failed.

Vérifier une livraison

Le corps d’un avis d’écran est du JSON : type (alert.opened ou alert.resolved), id (l’identifiant de livraison), notification_id, project_id, condition, screen (id et name), since (quand la condition a commencé), at (quand elle a duré assez longtemps, ou quand elle a pris fin), event_id et severity (info, warning ou error : le niveau de la condition pour alert.opened, info pour alert.resolved). alert.resolved pour screen_offline porte aussi likely_cause (device_restart, app_crash, app_restart, network ou platform), null tant que la cause est inconnue. Pour une source de données, une campagne ou une carte, screen la désigne, et un avis de campagne ajoute reach (published et current écrans) pour reach_dropped ou audience_group (kind tag ou folder, et value) pour group_empty. Un événement brut issu de --events est le même objet JSON que events list renvoie. Les en-têtes sont ScreenRig-Webhook-Id (l’identifiant de la notification), ScreenRig-Event-Id (stable entre tentatives : l’identifiant de livraison pour un avis, le curseur d’événement pour un événement), et ScreenRig-Signature: t=<unix seconds>,v1=<hex>, où v1 est un HMAC-SHA256 sur "<t>.<raw body>" avec la chaîne secrète. Calculez-le sur les octets bruts avant d’analyser le JSON, comparez en temps constant, rejetez un ancien t, et dédupliquez sur ScreenRig-Event-Id, car la livraison est au moins une fois et non ordonnée. Répondez 2xx dans les 10 secondes ; les redirections ne sont pas suivies.

import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody: the request body bytes (Buffer) exactly as received.
function verify(rawBody, signatureHeader, secret, toleranceSeconds = 300) {
  if (typeof signatureHeader !== "string" || !signatureHeader) return false;
  const parts = Object.fromEntries(signatureHeader.split(",").map((part) => part.split("=", 2)));
  const t = Number(parts.t);
  if (!Number.isInteger(t) || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = createHmac("sha256", secret).update(`${t}.`).update(rawBody).digest();
  const given = Buffer.from(parts.v1 ?? "", "hex");
  return given.length === expected.length && timingSafeEqual(given, expected);
}

Alertes

Une alerte est un problème sur un écran, tant qu’il dure. Elle s’ouvre lorsqu’un écran entre dans l’une des conditions de notification d’écran (screen_offline, display_disconnected, running_hot, on_battery, storage_full, content_stuck, not_playing, loop_stalled, glass_blank ou glass_frozen), qu’une notification la surveille ou non, et se résout lorsque la condition prend fin. Un écran a au plus une alerte ouverte par condition. Un pic de plantages, une source de données, une carte et une campagne sont des avis, jamais des alertes. Un écran qui redémarre pour un redémarrage envoyé par screenRIG (screen reboot ou une planification de redémarrage) n’ouvre aucune alerte screen_offline ou display_disconnected jusqu’à la fin du redémarrage ou jusqu’à dix minutes après son envoi ; une condition qui persiste alors ouvre son alerte. alerts list montre ce qui est ouvert maintenant.

Une alerte ouverte demande de l’attention jusqu’à ce que quelqu’un l’acquitte ou la reporte, ou qu’une mise en sourdine couvre son écran. Acquitter signifie que quelqu’un s’en occupe : l’alerte reste ouverte, enregistre qui l’a acquittée et quand, et ne demande plus d’attention jusqu’à sa résolution. Reporter acquitte jusqu’à un moment au plus 30 jours plus tard, et l’alerte demande de nouveau de l’attention à ce moment si elle est encore ouverte. Un acquittement ou un report ultérieur remplace le précédent. Tant qu’une alerte est acquittée ou reportée, l’avis d’une notification à son sujet qui est encore en délai d’attente est ignoré.

Une mise en sourdine sert à la maintenance : elle nomme des écrans, des étiquettes ou les deux, et prend fin à un moment au plus 30 jours plus tard. Elle couvre un écran tant que son identifiant est listé ou qu’il porte une étiquette listée ; un écran étiqueté plus tard est donc couvert, et un écran qui perd l’étiquette ne l’est plus. Les alertes d’un écran en sourdine s’ouvrent et se résolvent toujours, marquées muted, mais n’exigent jamais d’attention, et chaque notification ignore leurs avis. Une organisation compte au plus 50 mises en sourdine en cours, tous projets confondus.

counts.attention dans alerts list est le nombre que le tableau de bord affiche à côté d’Alertes. L’ouverture, la résolution et l’acquittement d’une alerte ajoutent screen.alert_opened, screen.alert_resolved et screen.alert_acknowledged au journal des événements du projet, et la création et la fin d’une mise en sourdine ajoutent alert_mute.created et alert_mute.deleted. Ils sont gratuits sur le flux d’écoute et sur les webhooks, comme tout événement screen.*. Les alertes résolues restent listées pendant la rétention d’événements du forfait. La lecture des alertes et des mises en sourdine demande l’accès Lecture seule ; acquitter, reporter, mettre en sourdine et lever une mise en sourdine demandent l’accès Gérer.

Code de problèmeSortieSens
alert_not_open5L’alerte est déjà résolue, il n’y a donc rien à acquitter ni à reporter. Exécutez alerts list et utilisez une alerte ouverte.
alert_mute_limit_reached5L’organisation compte déjà 50 mises en sourdine en cours. Terminez-en une avec alerts unmute, ou couvrez plus d’écrans avec une seule mise en sourdine par étiquette.
invalid_request8L’instant --until est à plus de 30 jours dans le futur. Rien n’a été modifié.
not_found4Aucune alerte ni mise en sourdine du projet n’a cet identifiant. Une alerte résolue disparaît après la rétention d’événements du forfait, et une mise en sourdine dès qu’elle est terminée.

alerts list#

Lister les alertes de ce projet, les ouvertes d’abord.

alerts list [--state open|resolved|all] [--screen-id ID] [--before CURSOR] [--limit N]
            [--format json|csv|xlsx|pdf] [--output FILE]
ParamètreTypeRequisPar défautNotes
--state STATEstringnonopenopen, resolved ou all.
--screen-id IDstringnonchaque écranSeulement les alertes de cet écran.
--before CURSORstringnonla première pageLe next_cursor de la page précédente.
--limit Nintegernon100Lignes par page, de 1 à 200.
--format FORMATstringnonjsonjson, ou csv, xlsx ou pdf pour écrire les alertes dans un fichier au lieu de les afficher.
--output FILEcheminnon./alerts.FORMATLe fichier à écrire avec --format csv, xlsx ou pdf. Pas avec json.
screenrig alerts list
screenrig alerts list --state all --screen-id scr_01EXAMPLESCREEN00000000
screenrig alerts list --state all --format csv --output alerts.csv

Chaque ligne est une alerte : id (alr_…), screen_id, screen_name, condition, state (open ou resolved), since (quand la condition a commencé), resolved_at une fois résolue, acknowledged_at et acknowledged_by (kind, id et name de la personne ou de l’agent) une fois acquittée, snoozed_until pendant un report, muted et attention. Les alertes ouvertes viennent en premier, les plus récentes d’abord. counts contient open et attention pour tout le projet, quels que soient la page et les filtres, et next_cursor est null à la fin.

Avec --format csv, xlsx ou pdf, le fichier contient toutes les alertes que les filtres retiennent, jusqu’à 50 000 lignes, et l’enveloppe porte son path, ses bytes et son sha256. Rapports et exportations décrit les fichiers.

alerts show#

Afficher une alerte.

alerts show <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant d’alerte alr_.
screenrig alerts show alr_01EXAMPLEALERT000000

L’enveloppe est l’alerte, sous la forme d’une ligne alerts list.

alerts ack#

Acquitter une alerte ouverte : quelqu’un s’en occupe.

alerts ack <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant d’alerte alr_.
screenrig alerts ack alr_01EXAMPLEALERT000000

L’alerte reste ouverte et ne demande plus d’attention jusqu’à sa résolution ; acknowledged_by nomme la personne ou l’agent et acknowledged_at l’heure. L’avis d’une notification encore en délai d’attente est ignoré. Acquitter de nouveau remplace l’acquittement ou le report précédent. Une alerte résolue donne alert_not_open (sortie 5). L’enveloppe est l’alerte, et le journal des événements enregistre screen.alert_acknowledged.

alerts snooze#

Acquitter une alerte ouverte jusqu’à un moment donné, afin qu’elle demande de nouveau de l’attention à ce moment.

alerts snooze <id> (--for DURATION | --until TIME)
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant d’alerte alr_.
--for DURATIONduréel’un de --for ou --untilaucunDurée du report à partir de maintenant : une durée comme 30m, 4h ou 2d, au plus 29d23h59m.
--until TIMEstringl’un de --for ou --untilaucunFin du report : un instant RFC 3339 avec secondes et décalage, comme 2026-11-01T09:00:00-07:00, au plus 30 jours plus tard.
screenrig alerts snooze alr_01EXAMPLEALERT000000 --for 4h

snoozed_until est l’heure de fin du report. D’ici là, l’alerte ne demande aucune attention et l’avis d’une notification encore en délai d’attente est ignoré, comme pour alerts ack ; si l’alerte est encore ouverte à ce moment, elle demande de nouveau de l’attention. Une alerte résolue donne alert_not_open (sortie 5).

alerts mute#

Mettre des écrans en sourdine pour la maintenance.

alerts mute [--screen-id ID]... [--tag TAG]... (--for DURATION | --until TIME) [--note TEXT]
ParamètreTypeRequisPar défautNotes
--screen-id IDstringau moins l’un de --screen-id ou --tagaucunUn identifiant d’écran scr_. Répétez-le, ou listez les identifiants séparés par des virgules ; au maximum 100.
--tag TAGstringau moins l’un de --screen-id ou --tagaucunChaque écran portant cette étiquette. Répétez-le, ou listez les étiquettes séparées par des virgules ; au plus 16.
--for DURATIONduréel’un de --for ou --untilaucunDurée de la mise en sourdine à partir de maintenant : une durée comme 30m, 4h ou 2d, au plus 29d23h59m.
--until TIMEstringl’un de --for ou --untilaucunFin de la mise en sourdine : un instant RFC 3339 avec secondes et décalage, comme 2026-11-01T09:00:00-07:00, au plus 30 jours plus tard.
--note TEXTstringnonaucunPourquoi les écrans sont en sourdine, pour les personnes qui voient la mise en sourdine ; au plus 200 caractères.
screenrig alerts mute --tag Lobby --for 2h --note "Rewiring the lobby displays"

L’enveloppe est la mise en sourdine : id (amt_…), screen_ids, tags, until, note, created_by et created_at. Les alertes de chaque écran couvert indiquent muted aussitôt, y compris celles déjà ouvertes. Une organisation compte au plus 50 mises en sourdine en cours, tous projets confondus ; une de plus donne alert_mute_limit_reached (sortie 5), et une mise en sourdine terminée ne compte plus. Après une mise en sourdine interrompue ou ambiguë, lisez d’abord alerts mutes : relancer la même commande avec --until dans les 24 heures renvoie la même mise en sourdine, alors qu’une relance avec --for compte à partir d’un nouveau moment et en crée une autre.

alerts mutes#

Lister les mises en sourdine qui ne sont pas terminées, celles qui finissent le plus tôt d’abord.

alerts mutes
screenrig alerts mutes

Chaque ligne est une mise en sourdine telle que alerts mute l’affiche.

alerts unmute#

Mettre fin à une mise en sourdine maintenant.

alerts unmute <mute-id>
ParamètreTypeRequisPar défautNotes
<mute-id>stringouiaucunL’identifiant de mise en sourdine amt_.
screenrig alerts unmute amt_01EXAMPLEMUTE0000000

Les alertes ouvertes de ces écrans demandent de nouveau de l’attention, et les avis ultérieurs ne sont plus ignorés comme étant en sourdine. Une mise en sourdine terminée donne not_found (sortie 4). Le journal des événements enregistre alert_mute.deleted.

Webhooks

Un webhook envoie les événements propres à ce projet, sous forme de POST signés, vers un point de terminaison HTTPS que vous exécutez, ainsi un événement correspondant peut réveiller un agent, un bot ou votre propre service. Chaque événement correspondant arrive comme le même objet JSON que events list renvoie. Un webhook est une notification sous sa forme d’origine : il compte parmi les 50 notifications de l’organisation, et notifications list l’affiche. Tout nouveau travail utilise notifications, qui envoie aussi des courriels et des avis d’écran.

Chaque tentative d’envoi est gratuite et ne compte pas dans la limite horaire de requêtes d’agent de l’organisation.

webhooks create --url URL --event-types TYPES [--description TEXT] [--disabled]
webhooks list
webhooks show <id>
webhooks update <id> [--url URL] [--event-types TYPES] [--description TEXT | --clear-description]
                     [--enable | --disable] [--expect-rev REVISION]
webhooks delete <id> [--expect-rev REVISION]
webhooks rotate-secret <id> [--expect-rev REVISION]
webhooks test <id>
webhooks deliveries <id> [--before CURSOR] [--limit N]

webhooks create répond webhook_limit_reached (sortie 5) lorsque l’organisation compte déjà 50 notifications, alors que notifications create répond notification_limit_reached. Une URL refusée donne webhook_url_rejected (sortie 8) dans les deux cas.

--url prend une URL https sur le port 443 ou 8443 dont l’hôte ne résout qu’en adresses Internet publiques, vérifiée comme pour notifications create ; une URL qui contient des identifiants ou un fragment # est refusée localement avec la sortie 2. --event-types prend de 1 à 32 types exacts séparés par des virgules, comme screen.online, ou des préfixes se terminant par .*, comme screen.*. --description fait au plus 200 caractères. --disabled crée le webhook désactivé. webhooks update --enable efface l’état d’échec et repart de l’événement courant, de sorte que rien de ce qui s’est passé pendant sa désactivation n’est envoyé, et --disable fait échouer les livraisons en attente avec webhook_disabled. --expect-rev contrôle la révision (revision_conflict, sortie 6).

webhooks create et webhooks rotate-secret affichent une seule fois le secret de signature dans data.secret avec l’avertissement webhook_secret_shown_once ; après un appel interrompu ou ambigu, relancez la même commande dans les 24 heures pour récupérer la même réponse. La livraison commence au premier événement qui suit la création du webhook. webhooks test met en file une livraison webhook.test pour ce webhook uniquement ; elle fonctionne sur un webhook désactivé, n’est tentée qu’une fois sans nouvelle tentative, est mesurée comme toute livraison et est limitée à 20 par minute et par organisation (rate_limited, sortie 7). webhooks list liste les notifications webhook de ce projet, des plus anciennes aux plus récentes, et un identifiant en lecture seule reçoit chaque url vide avec url_redacted à true. webhooks deliveries lit le journal en commençant par l’événement le plus récent, de 1 à 200 lignes par page (50 par défaut), avec next_cursor (whc1_…) comme --before ; le state d’une ligne est pending, succeeded ou failed, avec last_status et une classe last_error fixe. Vérifiez une livraison comme décrit sous Vérifier une livraison.

Autres groupes de commandes