Dokumentation

Benachrichtigungen: CLI-Befehle

Menschen und Systeme per Benachrichtigung und Webhook über Bildschirmzustände informieren, Ereignisse verfolgen, Alarme bearbeiten, Vorgänge abwarten.

Jeder Befehl läuft wie in der CLI-Referenz beschrieben: globale Flags, JSON-Ausgabe, Beendigungscodes, Revisionen und Wiederholungen.

Operationen

Uploads und Veröffentlichungen laufen als Operationen. media upload, media replace und app upload warten standardmäßig auf ihre; mit diesen Befehlen schließen Sie eine ab, die Sie mit --no-wait laufen ließen.

operations show#

Den aktuellen Status einer Operation lesen.

operations show <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Vorgangs-ID aus dem Umschlag, der ihn gestartet hat.
screenrig operations show op_01EXAMPLEOPERATION00000

state ist receiving, queued, running, succeeded, failed oder cancelled; die letzten drei beenden die Operation. Eine erfolgreiche Operation trägt ihr result, eine fehlgeschlagene trägt error mit code und detail des Problems.

operations wait#

Eine Operation abfragen, bis sie abgeschlossen ist.

operations wait <id> [--timeout MS] [--poll-ms MS]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Vorgangs-ID.
--timeout MSintegernein120000Frist für das Warten. Sie begrenzt auch jede zugrunde liegende Anfrage.
--poll-ms MSintegernein1000Intervall zwischen Abfragen von Operationen während des Wartens.
screenrig operations wait op_01EXAMPLEOPERATION00000

Das Warten endet, wenn die Operation succeeded, failed oder cancelled ist. Eine fehlgeschlagene oder abgebrochene Operation endet mit 13 und ihrem eigenen Fehler. Ein Warten, das die Zeit überschreitet, endet mit 11, und die Operation läuft weiter; das next des Fehlers ist operations wait ID, was das Warten fortsetzt, ohne die Operation erneut zu starten.

operations cancel#

Bitten Sie die Steuerungsebene, eine Operation abzubrechen.

operations cancel <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Vorgangs-ID.
screenrig operations cancel op_01EXAMPLEOPERATION00000

Zum Abbrechen ist Manage-Zugriff nötig. Die Antwort ist die abgebrochene Operation.

Ereignisse

Das Projekt-Ereignisprotokoll zeichnet auf, was das Projekt und die Flotte getan haben. Eine veröffentlichte Version fügt application.published hinzu; eine App, die screenrig.emit(code) aufruft, fügt ihr eigenes Ereignis hinzu, das der direkteste Beweis ist, dass sie auf einem Bildschirm lief.

Präsenz ist auch im Protokoll. screen.offline wird geschrieben, sobald ein Bildschirm 60 Sekunden offline war, und screen.online wenn er zurückkommt; eine Wiederverbindung innerhalb dieser 60 Sekunden schreibt keines von beiden. screen.offline enthält details.offline_since und, wenn der Bildschirm zuvor online war, details.last_online_at. screen.online enthält details.last_online_at plus details.offline_at, wenn der Bildschirm zuvor offline war, bevor er zurückkehrte. Wie jedes screen.*-Ereignis sind sie im Listen-Stream kostenlos, sodass ein Agent events follow offen halten kann, um eine Flotte zu überwachen.

Inhaltsaktualisierungen eines Players treffen als screen.manifest_changed, screen.manifest_activated und screen.manifest_upgrade ein, deren details manifest_revision, state und, falls vorhanden, code und attempt enthalten. Ein failed-Upgrade hat die Schwere „Fehler“, und retrying, blocked und partial sind Warnungen.

events list#

Eine endliche Seite von Projektereignissen lesen.

events list [--after CURSOR] [--limit N] [--type TYPE] [--source project|log] [--screen-id ID] [--playlist-id ID] [--app-id ID]
ParameterTypErforderlichStandardNotizen
--after CURSORstringneindie erste SeiteNach dem next_cursor der vorherigen Seite fortsetzen.
--limit Nintegernein50Seitengröße, 1 bis 200.
--type TYPEstringneinjeder TypEin Ereignistyp oder eine Familie durch ein Präfix, das auf einen Punkt endet, wie note..
--source SOURCEstringneinprojectproject listet Projektereignisse auf. log listet Player-Log-Einträge auf, die zu einem Bildschirm gehören: Verwenden Sie es zusammen mit --screen-id.
--screen-id IDstringneinjeder BildschirmEreignisse, deren Ressource dieser Bildschirm ist, einschließlich vom SDK gesendeter Ereignisse. Mit --source log die Player-Log-Einträge dieses Bildschirms.
--playlist-id IDstringneinjede PlaylistEreignisse, deren Ressource diese Playlist ist, und Ereignisse, die sie in details.playlist_id nennen, etwa ein Bildschirm, der sie übernimmt. Nicht mit --source log.
--app-id IDstringneinjede AnwendungEreignisse der Anwendungsressource, ihrer Releases und K/V-Einträge; vom SDK gesendete Ereignisse sind ausgeschlossen. Nicht mit --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

Die SDK-Methoden emit() und emitConfirmed() fügen application.event-Datensätze hinzu, deren Ressource der Bildschirm ist. Lesen Sie diese mit --type application.event und optional --screen-id. Die zurückgegebenen Felder details.primitive_id und details.code identifizieren das sendende Primitive und die benannte Aktion. --app-id wählt Ereignisse der Anwendungsressource, ihrer Releases und K/V-Einträge aus und schließt diese Bildschirmereignisse daher aus.

--source log liest das Player-Log: die Zustände, die ein Player meldet, aufbewahrt für die Ereignisaufbewahrung des Projekts. Es hat keine Sequenz, daher ist es nicht in events follow und wird nicht an Webhooks zugestellt, und --playlist-id und --app-id werden damit abgelehnt (usage_error, Exit 2). Eine ID der falschen Art wird vor jeder Anfrage abgelehnt. data.next_cursor ist am Ende des Verlaufs null.

Die Standardausgabe ist ein JSON-Umschlag für die Seite. Mit --human ist die Ausgabe eine logfmt-Zeile pro Ereignis: at=, type=, severity= und skalare Details.

events follow#

Bleiben Sie im Ereignisstrom und geben Sie Ereignisse aus, sobald sie eintreffen.

events follow [--after CURSOR] [--timeout MS] [--type TYPE]
ParameterTypErforderlichStandardNotizen
--after CURSORstringneinder Live-BereichAb diesem Cursor fortsetzen.
--timeout MSintegerneinkeine FristBeendet die gesamte Verfolgung, einschließlich Wiederverbindungs-Backoff.
--type TYPEstringneinjeder TypEin Ereignistyp oder eine Familie durch ein Präfix, das auf einen Punkt endet, wie note..
screenrig events follow

Eine Trennung oder ein vorübergehender Fehler verbindet sich mit Backoff neu und setzt ab der letzten Ereignis-ID fort. Wiedergabe nach einer Wiederverbindung ist kostenlos. Autorisierungs- und Nicht-Gefunden-Probleme stoppen den Befehl, anstatt ihn erneut zu versuchen.

Mit --type führt der Stream weiterhin jedes Ereignis, und die CLI gibt nur die passenden aus; die stream.*-Frames, die den Stream selbst beschreiben, werden immer ausgegeben: screenrig events follow --type note. beobachtet Projektnotizen.

Die Standardausgabe ist NDJSON: ein Umschlag pro Ereignis in einer eigenen Zeile, statt eines einzelnen Umschlags. Verwenden Sie --human für logfmt-Zeilen.

Benachrichtigungen

Eine Benachrichtigung informiert eine Person oder ein anderes System, wenn ein Bildschirm den Zustand wechselt. Eine E-Mail-Benachrichtigung sendet jedem Empfänger eine E-Mail, eine Webhook-Benachrichtigung sendet einen signierten HTTPS-POST, und eine Slack-, Teams-, PagerDuty- oder Telegram-Benachrichtigung postet eine Nachricht in einen Chat oder Pager. Eine Organisation hat höchstens 50 über alle Kanäle und alle ihre Projekte zusammen, und jedes Projekt beginnt mit einer E-Mail an seinen Eigentümer, wenn ein Bildschirm 10 Minuten offline war.

Eine Benachrichtigung überwacht die Bedingungen, die Sie nennen:

BedingungBeginnEnde
screen_offlineDer Player ist seit 60 Sekunden offline.Der Bildschirm ist wieder online.
display_disconnectedDer Player meldet sein Display als getrennt.Das Display verbindet sich wieder.
running_hotDas Gerät meldet eine Temperatur, die die Hitzeschwelle erreicht oder überschreitet.Die Temperatur ist wieder normal.
on_batteryEin Gerät mit Akku meldet, dass es im Akkubetrieb läuft und nicht angeschlossen ist.Das Gerät meldet eine andere Stromquelle.
storage_fullDer Speicher des Players hat nicht genug Platz für seinen Inhalt.Der Platzmangel ist behoben.
content_stuckDie Inhaltsaktualisierung des Bildschirms wird wiederholt, ist fehlgeschlagen, blockiert oder nur teilweise abgeschlossen.Die Aktualisierung erreicht einen anderen Zustand.
not_playingDer Player zeigt statt seines Inhalts einen Fehler. Ein voller Speicher ist storage_full.Der Status des Players ist kein Fehler mehr.
loop_stalledEin Bildschirm, der online ist, im Zeitplan liegt und aktuelle Inhalte hat, hat länger kein Bild und kein Video gestartet, als seine Schleife erlaubt.Ein Bild oder Video startet wieder, oder screenRIG beurteilt den Bildschirm nicht mehr.
glass_blankDie Screenshots, die screenRIG über eine Serie aufgenommen hat, die die ganze Schleife abdeckt, hatten alle nur einen einzigen flachen Farbton.Zwei Screenshots hintereinander zeigen ein Bild, oder screenRIG beurteilt den Bildschirm nicht mehr.
glass_frozenDie Screenshots, die screenRIG über eine Serie aufgenommen hat, die die ganze Schleife abdeckt, zeigten alle dasselbe Bild.Zwei Screenshots hintereinander zeigen ein bewegtes Bild, oder screenRIG beurteilt den Bildschirm nicht mehr.
crashingDer Player ist wiederholt abgestürzt oder hat seinen Renderer wiederholt neu gestartet.Nie: Jede Spitze ist eine eigene Meldung.
source_failedDie Aktualisierung einer Datenquelle ist fehlgeschlagen.Eine Aktualisierung gelingt.
source_staleEine Datenquelle ist so lange ausgefallen, bis ihre Daten abgelaufen sind.Eine Aktualisierung gelingt.
card_data_staleDie Daten einer Karte, mit einem Ablauf geschrieben, haben ihn erreicht, während ein Bildschirm die Karte zeigt, und nichts hat sie erneuert.Ein Schreibzugriff auf die Daten der Karte geht durch.
reach_droppedEine Kampagne erreicht weniger Bildschirme als bei ihrer letzten Veröffentlichung, weil Bildschirme ihre Tags oder Ordner verlassen haben oder archiviert oder gelöscht wurden.Die Kampagne erreicht wieder so viele Bildschirme, oder sie wird erneut veröffentlicht.
group_emptyEin Tag oder Ordner in der Zielgruppe einer Kampagne passt auf keinen Bildschirm.Der Tag oder Ordner passt wieder auf einen Bildschirm, oder eine Veröffentlichung entfernt ihn aus der Zielgruppe.

Eine Bedingung löst eine Meldung aus, sobald sie --hold Minuten angedauert hat (Standard 10), sodass eine kurze Wiederverbindung ruhig bleibt. Endet sie vorher, wird nichts gesendet; endet sie, nachdem eine Meldung gesendet wurde, folgt eine Behebungsmeldung. crashing wird sofort gesendet. Eine Meldung wird außerdem übersprungen, wenn jemand den Alarm des Bildschirms während der Wartezeit quittiert oder zurückstellt oder wenn eine Stummschaltung den Bildschirm abdeckt. --tag beschränkt eine Benachrichtigung auf Bildschirme mit diesem Tag; ohne Tag zählt jeder Bildschirm.

Jede Meldung hat einen Schweregrad. Eine geöffnete Meldung ist error für screen_offline und warning für jede andere Bedingung, und eine behobene Meldung oder ein Test ist info. --min-severity LEVEL (info, warning oder error) erzeugt keine geöffnete Meldung unterhalb dieser Stufe, und eine behobene Meldung folgt ihrer geöffneten. --severity CONDITION=LEVEL, wiederholbar, setzt die Stufe einer Bedingung für diese Benachrichtigung, etwa --severity not_playing=error; sie zählt für --min-severity. Teams und PagerDuty zeigen die Stufe immer an, der Text von E-Mail, Slack und Telegram nennt sie, wenn die Benachrichtigung --min-severity oder --severity setzt, und ein Webhook-Body enthält severity.

--active-hours SPEC sendet geöffnete Meldungen nur innerhalb wöchentlicher Fenster, gelesen in --timezone ZONE, das es voraussetzt. SPEC ist DAYS HH:MM-HH:MM, etwa "Mon-Fri 08:00-22:00"; bis zu 16-mal wiederholbar. Mit --outside-hours hold, dem Standard, wartet eine Meldung, die außerhalb der Zeiten fällig wird, auf das nächste Fenster und geht dann hinaus, wenn ihre Bedingung noch gilt; eine Bedingung, die vorher endet, sendet also nichts. Mit drop wird die Meldung als outside_hours übersprungen, was notifications deliveries auflistet. Eine behobene Meldung zu einer gesendeten geöffneten Meldung geht immer hinaus, crashing folgt den Zeiten wie jede andere Bedingung, eine Zurückstellung wird zuerst geprüft, und notifications test ignoriert Zeiten, Schweregrad und Zielgruppe.

--audience FILE (Inline-JSON, eine Datei oder - für stdin) wählt die Bildschirme mit den Regeln einer Kampagnen-Zielgruppe aus, etwa {"all":[{"tag":"level2"},{"tag":"overhead"}]} für Bildschirme mit beiden Tags; --all-tags TAG und --any-tag TAG sind die Kurzformen für eine all- und eine any-Regel von Tags, und --tag bedeutet ein beliebiges der Tags. --tag, --any-tag, --all-tags und --audience schließen einander aus.

loop_stalled, glass_blank und glass_frozen sind Urteile, die screenRIG aus den Wiedergabeberichten und Screenshots zieht, die es erhält, und sie lassen aus, was sie nicht beurteilen können: einen Bildschirm, der offline ist, dessen Anzeige aus ist, der übernommen oder gesperrt ist, der ein einzelnes Standbild oder eine Videowand zeigt oder dessen Player keine Wiedergabenummern sendet. Beurteilt screenRIG einen Bildschirm nicht mehr, den es in einem dieser Zustände gefunden hatte, wird der Alarm geschlossen, aber E-Mail, Slack, Teams und Telegram senden keine Behebungsmeldung, weil nichts gezeigt hat, dass sich der Bildschirm erholt; PagerDuty behebt seinen Vorfall trotzdem.

source_failed und source_stale überwachen die Datenquellen des Projekts, nicht seine Bildschirme: Eine Meldung nennt die Quelle und verlinkt ihre Seite, und --tag passt nie auf eine Quelle.

card_data_stale beobachtet eine Karte, keinen Bildschirm. Schreiben Sie die Daten einer Karte mit einem Ablauf, der auf den Zeitplan ihres Schreibers abgestimmt ist (card data put --ttl 30m): Hört der Job oder Agent auf, der sie erneuert, laufen die Daten ab, die Karte ist auf jedem Bildschirm leer, der sie zeigt, und diese Bedingung meldet es Ihnen. Die Meldung nennt die Karte und wann ihre Daten abgelaufen sind und verlinkt den Seiteneditor auf einer Seite, die sie platziert. Die Dokumente einer Datenquelle werden hier nie gemeldet (source_stale deckt sie ab), ebenso wenig eine Karte, die kein Bildschirm zeigt, ohne Ablauf geschriebene Daten oder gelöschte Daten. --tag trifft nie auf eine Karte zu.

reach_dropped und group_empty überwachen eine Kampagne, nicht einen Bildschirm. Die Meldung nennt die Kampagne und die Bildschirme, die sie zuvor und jetzt erreicht hat, oder den leeren Tag oder Ordner und verlinkt auf den Kalender der Kampagne. Eine Kampagne gehört zum Projekt, daher schränken --tag, --any-tag, --all-tags und --audience diese beiden nie ein; --min-severity, --severity, --active-hours und --hold gelten wie für jede Bedingung, und beide sind standardmäßig warning. --reach-drop-screens N und --reach-drop-percent P senden eine reach_dropped-Meldung nur bei einem Rückgang um mindestens N Bildschirme und mindestens P Prozent der Bildschirme, die die Kampagne bei ihrer Veröffentlichung erreicht hat; ein Rückgang muss beides erfüllen, und ohne sie löst jeder Rückgang eine Meldung aus. Sie setzen reach_dropped in --conditions voraus. Jeder leere Tag oder Ordner einer Kampagne ist eine eigene Meldung, und notifications deliveries zeigt ihn als audience_group (tag:Lobby oder folder:sfd_…). Eine Veröffentlichung, die eine leere Gruppe aus der Zielgruppe entfernt, schließt einen PagerDuty-Incident und den Alarm eines Webhooks, sendet aber keine Behebungs-E-Mail und keine Chat-Nachricht.

E-Mails gehen an die verifizierte Adresse jedes Empfängers: eine E-Mail pro Empfänger für alles, was innerhalb von etwa zwei Minuten fällig wird, mit einem Link zu jedem Bildschirm und zur Benachrichtigung im Dashboard. Empfänger sind owner, also wer beim Versand der Meldung Projektinhaber ist, und die Benutzer-IDs von Projektmitgliedern. Ein Empfänger, der keine verifizierte Adresse hat oder das Projekt verlassen hat, wird übersprungen. Benachrichtigungs-E-Mails und Bildschirmmeldungen sind kostenlos.

Jede E-Mail enthält einen Abmeldelink für ihren eigenen Empfänger: die Abmelden-Schaltfläche von Mail-Apps und einen Link in der Fußzeile. Wer ihm folgt, beendet die E-Mails dieser Benachrichtigung an genau diese Person, ohne sich anzumelden, und die geöffnete Seite hat eine Schaltfläche Resubscribe. Die anderen Empfänger sind nicht betroffen, und die Person bleibt unter den Empfängern. notifications show listet mit unsubscribed auf, wer sich abgemeldet hat, und notifications resubscribe schickt ihr wieder E-Mails. Eine Meldung, für die niemand mehr übrig ist, wird als no_recipients übersprungen.

Eine Webhook-Benachrichtigung sendet jede Meldung als JSON per POST; Sie verifizieren sie, wie unter Lieferung verifizieren beschrieben. Mit --events sendet sie außerdem rohe Projekt-Ereignisse per POST, sobald sie eintreten; diese Zustellungen werden wie unter Webhooks beschrieben gemessen.

Eine Slack-, Teams-, PagerDuty- oder Telegram-Benachrichtigung postet eine Nachricht pro Ausfall und Bildschirm oder pro Gruppe von Bildschirmen: den Bildschirm, was sich geändert hat, seit wann, das Projekt, einen Link zum Bildschirm und, wenn ein Offline-Bildschirm zurück ist, seine wahrscheinliche Ursache, falls sie dann bekannt ist. Eine Wiederherstellungsnachricht folgt, sobald die erste gesendet wurde, und löst in PagerDuty den Vorfall auf, den die erste geöffnet hat. Die Zugangsdaten gibst du einmal an (--slack nimmt die URL eines eingehenden Webhooks, --teams die URL eines Workflows-Webhooks, --pagerduty einen Routing-Schlüssel der Events-API v2, --telegram ein Bot-Token mit --telegram-chat); sie werden versiegelt, nie wieder angezeigt, und destination_hint zeigt nur ihr maskiertes Ende. Ein - liest sie aus einer Zeile von stdin, damit sie nicht in deinem Shell-Verlauf landen. Ein fehlgeschlagener Post wird 24 Stunden lang wiederholt, und eine Benachrichtigung, die 72 Stunden lang fehlschlägt, wird deaktiviert.

Wenn drei oder mehr Bildschirme innerhalb von fünf Minuten in dieselbe Bedingung geraten und ein Netzwerk, einen Standort, ein Modell, eine Player-Version oder einen Tag teilen, sendet eine E-Mail-, Slack-, Teams-, PagerDuty- oder Telegram-Benachrichtigung eine Meldung für sie statt einer pro Bildschirm, und eine Meldung nennt die Gruppe, wenn ihr letzter Bildschirm wieder in Ordnung ist; die Meldung jedes anderen Bildschirms wird als grouped übersprungen. Ein Webhook sendet weiterhin eine Meldung pro Bildschirm.

Das Lesen von Benachrichtigungen und ihren Zustellungen erfordert Nur-Lese-Zugriff; das Anlegen, Ändern, Testen und Löschen einer Benachrichtigung, das Erneuern ihres Secrets und das erneute Anmelden einer Person erfordern Verwalten-Zugriff.

ProblemcodeBeendenBedeutung
webhook_url_rejected8Die URL ist nicht https auf Port 443 oder 8443, oder ihr Host löst nicht nur auf öffentliche Internetadressen auf. error.detail enthält den Grund des Servers. Es wurde nichts erstellt oder geändert.
notification_destination_rejected8Das Ziel passt nicht zu seinem Kanal oder ist die URL eines eingestellten Office-365-Connectors. error.detail nennt die passende Form. Es wurde nichts erstellt oder geändert.
notification_limit_reached5Die Organisation hat bereits 50 Benachrichtigungen. Bitte löschen Sie zuerst eine.
revision_conflict6Die --expect-rev Revision war veraltet. Führen Sie notifications show aus und versuchen Sie es erneut.
rate_limited7Mehr als 20 notifications test Aufrufe pro Minute für diese Organisation.
invalid_request8Ein --email-Empfänger, der kein Mitglied des Projekts ist, oder eine Option, die zu einem anderen Kanal gehört, etwa --url bei einer E-Mail-Benachrichtigung. Es wurde nichts erstellt oder geändert.

notifications create#

Erstellt eine E-Mail-, Webhook-, Slack-, Teams-, PagerDuty- oder Telegram-Benachrichtigung.

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]
ParameterTypErforderlichStandardNotizen
--email RECIPIENTSstringein Kanal-FlagkeineE-Mail an diese durch Kommas getrennten Empfänger senden: owner oder die Benutzer-ID eines Projektmitglieds, maximal 20.
--webhook URLstringein Kanal-FlagkeineEine https-URL auf Port 443 (Standard) oder 8443, deren Host nur auf öffentliche Internetadressen auflöst. Der Server prüft sie bei jedem Schreibvorgang und erneut vor jeder Lieferung. Eine URL mit Zugangsdaten (user:pass@ oder token@) oder einem #-Fragment wird lokal mit Exit 2 abgelehnt.
--conditions LISTstringja, außer bei einem WebhookkeineKommagetrennte Bedingungen aus der Tabelle oben. Ein Webhook benötigt diese, --events oder beides.
--slack URLstringein Kanal-FlagkeinePostet in Slack über die URL eines eingehenden Webhooks auf hooks.slack.com, oder -, um sie aus einer Zeile von stdin zu lesen.
--teams URLstringein Kanal-FlagkeinePostet in Teams über die URL eines Workflows-Webhooks (der Trigger „Wenn eine Teams-Webhookanforderung empfangen wird“), oder - für stdin. URLs von Office-365-Connectors sind eingestellt und werden abgelehnt.
--pagerduty KEYstringein Kanal-FlagkeineLöst PagerDuty-Vorfälle aus und behebt sie mit einem Routing-Schlüssel der Events-API v2 aus 32 Zeichen, oder - für stdin.
--telegram TOKENstringein Kanal-FlagkeinePostet in Telegram mit einem Bot-Token, oder - für stdin. Braucht --telegram-chat.
--telegram-chat CHAT_IDstringmit --telegramkeineDer Chat, in den gepostet wird: seine numerische ID, etwa -1001234567890, oder @channelname.
--events TYPESstringneinkeineNur für Webhooks. Außerdem diese rohen Projekt-Ereignisse per POST senden: 1 bis 32 durch Kommas getrennte genaue Typen, wie screen.online, oder Präfixe, die auf .* enden, wie screen.*.
--tag TAGstringneinjeder BildschirmNur Bildschirme mit mindestens einem dieser Tags. Wiederholen Sie das Flag oder trennen Sie mit Kommas, bis zu 16 Tags.
--hold MINUTESintegernein10Wie lange eine Bedingung andauern muss, bevor sie eine Meldung auslöst, 0 bis 1440. Bei crashing gibt es keine Wartezeit.
--all-tags TAGstringneinkeineNur Bildschirme mit allen aufgelisteten Tags. Wiederholen Sie das Flag oder trennen Sie mit Kommas.
--any-tag TAGstringneinkeineNur Bildschirme mit mindestens einem aufgelisteten Tag, wie --tag. Wiederholen Sie das Flag oder trennen Sie mit Kommas.
--audience FILEstringneinjeder BildschirmDie Bildschirme als Kampagnen-Zielgruppenregel in JSON: inline, eine Datei oder - für stdin. Nicht mit den Tag-Optionen.
--min-severity LEVELstringneinkeineinfo, warning oder error: darunterliegende geöffnete Meldungen werden nicht gesendet.
--severity CONDITION=LEVELstringneindie StandardwerteSetzt den Schweregrad einer Bedingung für diese Benachrichtigung. Wiederholen Sie das Flag.
--active-hours SPECstringneinimmerSendet geöffnete Meldungen nur innerhalb dieses wöchentlichen Fensters, DAYS HH:MM-HH:MM etwa "Mon-Fri 08:00-22:00". Bis zu 16-mal wiederholbar. Erfordert --timezone.
--timezone ZONEstringmit --active-hourskeineDie IANA-Zone, in der die Zeiten gelesen werden, etwa America/Los_Angeles.
--outside-hours MODEstringneinholdhold wartet auf das nächste Fenster; drop überspringt die Meldung.
--reach-drop-screens Nintegerneinjeder RückgangNur mit reach_dropped: sendet nur dann eine Meldung, wenn die Kampagne mindestens N Bildschirme verloren hat (1 oder mehr).
--reach-drop-percent Pintegerneinjeder RückgangNur mit reach_dropped: verlangt zusätzlich einen Verlust von mindestens P Prozent (1 bis 100) der Bildschirme, die die Kampagne bei ihrer Veröffentlichung erreicht hat.
--description TEXTstringneinkeineMaximal 200 Zeichen.
--disabledbooleanneinausDeaktiviert erstellen. Es wird nichts gesendet, bis 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

Der Umschlag ist die Benachrichtigung. Der Umschlag eines Webhooks enthält sein Signaturgeheimnis in data.secret (whsec_…) mit der Warnung webhook_secret_shown_once. Speichern Sie das Geheimnis sofort im Geheimnisspeicher des Empfängers. Nur notifications rotate-secret gibt es erneut zurück, und die CLI schreibt es nie in ihre Konfiguration, das Betriebsprotokoll oder den Wiederherstellungszustand. Nach einer unterbrochenen oder mehrdeutigen Erstellung führen Sie denselben Befehl innerhalb von 24 Stunden erneut aus: Er verwendet den gespeicherten Idempotenzschlüssel, und der Server liefert dieselbe Antwort inklusive Geheimnis zurück. Meldungen beginnen mit dem ersten Ereignis nach der Erstellung der Benachrichtigung.

notifications list#

Benachrichtigungen dieses Projekts auflisten, niemals deren Geheimnisse.

notifications list
screenrig notifications list

Jede Zeile ist eine Benachrichtigung beliebigen Kanals, älteste zuerst, mit ihrem status. Eine Slack-, Teams-, PagerDuty- oder Telegram-Benachrichtigung zeigt destination_hint, ihre bis auf Host und letzte Zeichen maskierten Zugangsdaten, in der Spalte TO von --human. Unterhalb des Verwalten-Zugriffs ist die url eines Webhooks leer und url_redacted ist wahr, und TO zeigt (withheld).

notifications show#

Eine Benachrichtigung und deren Zustellungsstatus prüfen.

notifications show <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Benachrichtigungs-ID ntf_ (jeder Kanal außer Webhook) oder whk_ (Webhook).
screenrig notifications show ntf_01EXAMPLENOTICE00000

status ist active, failing solange seit failing_since keine Zustellung erfolgreich war, oder disabled. Nach 72 Stunden ununterbrochenem Fehlschlag wird die Benachrichtigung mit disabled_reason: delivery_failures deaktiviert, und das Ereignisprotokoll verzeichnet notification.disabled. snoozed_until ist vorhanden, solange eine Pause gesetzt ist. last_success_at und last_failure_at melden die neuesten Ergebnisse. revision ist der Wert, den --expect-rev absichert. min_severity, severity, active_hours mit outside, audience und reach_drop erscheinen, solange sie gesetzt sind, und eine E-Mail-Benachrichtigung listet unsubscribed.

notifications update#

Ändert Empfänger, URL, Ziel, Bedingungen, Bildschirme, Wartezeit, Pause oder Aktivierungszustand einer Benachrichtigung.

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]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Benachrichtigungs-ID ntf_ (jeder Kanal außer Webhook) oder whk_ (Webhook).
--email RECIPIENTSstringMindestens eine ÄnderungUnverändertE-Mail-Benachrichtigungen: ersetzt die Empfänger.
--url URLstringMindestens eine ÄnderungUnverändertWebhook-Benachrichtigungen: ersetzt die URL, geprüft wie bei create.
--destination VALUEstringMindestens eine ÄnderungUnverändertSlack-, Teams-, PagerDuty- und Telegram-Benachrichtigungen: ersetzt die Zugangsdaten, geprüft wie bei create. - liest sie aus einer Zeile von stdin.
--telegram-chat CHAT_IDstringMindestens eine ÄnderungUnverändertTelegram-Benachrichtigungen: ersetzt den Chat.
--conditions LISTstringMindestens eine ÄnderungUnverändertErsetzt die Bedingungen.
--clear-conditionsbooleanMindestens eine ÄnderungausAlle Bedingungen entfernen. Ein Webhook benötigt dann --events.
--events TYPESstringMindestens eine ÄnderungUnverändertWebhook-Benachrichtigungen: ersetzt die rohen Projekt-Ereignisse.
--clear-eventsbooleanMindestens eine ÄnderungausWebhook-Benachrichtigungen: keine rohen Projekt-Ereignisse mehr per POST senden. Sie benötigt dann Bedingungen.
--tag TAGstringMindestens eine ÄnderungUnverändertErsetzt die Bildschirm-Tags und eine Zielgruppe, falls die Benachrichtigung eine hat.
--all-screensbooleanMindestens eine ÄnderungausDie Bildschirm-Tags und die Zielgruppe entfernen; die Benachrichtigung deckt jeden Bildschirm ab.
--hold MINUTESintegerMindestens eine ÄnderungUnverändert0 bis 1440.
--all-tags TAGstringMindestens eine ÄnderungUnverändertErsetzt die Bildschirme durch die mit allen aufgelisteten Tags.
--any-tag TAGstringMindestens eine ÄnderungUnverändertErsetzt die Bildschirme durch die mit mindestens einem aufgelisteten Tag, wie --tag.
--audience FILEstringMindestens eine ÄnderungUnverändertErsetzt die Bildschirme durch eine Kampagnen-Zielgruppenregel in JSON: inline, eine Datei oder - für stdin.
--min-severity LEVELstringMindestens eine ÄnderungUnverändertinfo, warning oder error.
--clear-min-severitybooleanMindestens eine ÄnderungausDen Schweregradfilter entfernen.
--severity CONDITION=LEVELstringMindestens eine ÄnderungUnverändertErsetzt die Schweregrad-Übersteuerungen durch diese. Wiederholen Sie das Flag.
--clear-severitybooleanMindestens eine ÄnderungausJede Schweregrad-Übersteuerung entfernen.
--active-hours SPECstringMindestens eine ÄnderungUnverändertErsetzt die Fenster durch diese. Bis zu 16-mal wiederholbar. --timezone ist standardmäßig die Zone, die die Benachrichtigung bereits hat.
--timezone ZONEstringMindestens eine ÄnderungUnverändertDie IANA-Zone, in der die Zeiten gelesen werden. Allein behält es die aktuellen Fenster.
--outside-hours MODEstringMindestens eine ÄnderungUnveränderthold oder drop. Allein behält es die aktuellen Fenster.
--clear-active-hoursbooleanMindestens eine ÄnderungausDie aktiven Zeiten entfernen. Dafür zurückgehaltene Meldungen werden sofort neu beurteilt.
--reach-drop-screens NintegerMindestens eine ÄnderungUnverändertErsetzt die Mindestzahl an Bildschirmen, die die Kampagne für eine reach_dropped-Meldung verloren haben muss.
--reach-drop-percent PintegerMindestens eine ÄnderungUnverändertErsetzt den Mindestprozentsatz ihrer veröffentlichten Reichweite, den die Kampagne verloren haben muss.
--clear-reach-dropbooleanMindestens eine ÄnderungausEntfernt den Schwellenwert, sodass jeder Rückgang eine Meldung auslöst. Nehmen Sie reach_dropped nur zusammen damit aus --conditions.
--description TEXTstringMindestens eine ÄnderungUnverändertMaximal 200 Zeichen.
--clear-descriptionbooleanMindestens eine ÄnderungausDie Beschreibung entfernen.
--enablebooleanMindestens eine ÄnderungausSetzt den Fehlerzustand zurück und beginnt beim Ereignis, das die Änderung aufzeichnet; nichts aus der Zeit der Deaktivierung wird gesendet.
--disablebooleanMindestens eine ÄnderungausStoppt Meldungen; ausstehende Meldungen schlagen mit webhook_disabled fehl.
--snooze WHENstringMindestens eine ÄnderungUnverändertBis dahin nichts senden: eine Dauer wie 30m, 1h oder 2d (unter 30 Tagen), ein Zeitpunkt nach RFC 3339 mit Sekunden und Offset oder off, um die Pause zu beenden. Meldungen, die in der Zwischenzeit fällig werden, werden übersprungen und nicht später gesendet.
--expect-rev REVISIONstringneinkeineOptionale Revisionsvoraussetzung.
screenrig notifications update ntf_01EXAMPLENOTICE00000 --snooze 2h

update ändert nur die Felder, die Sie übergeben. Der Kanal ändert sich nie: --email gilt für eine E-Mail-Benachrichtigung, --url und --events für einen Webhook, und --destination und --telegram-chat für eine Chat- oder Pager-Benachrichtigung, und eine Option eines anderen Kanals ergibt invalid_request (Exit 8). Geben Sie höchstens eine von --email, --url und --destination an. Die Bildschirm-Tags und eine Zielgruppe schließen sich aus: Das Setzen des einen löscht das andere. Eine E-Mail-Benachrichtigung behält mindestens eine Bedingung, ein Webhook behält Bedingungen oder Ereignisse. Das Signaturgeheimnis bleibt unverändert; verwenden Sie notifications rotate-secret.

notifications delete#

Eine Benachrichtigung löschen. Ausstehende Meldungen schlagen mit webhook_deleted fehl.

notifications delete <id> [--expect-rev REVISION]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Benachrichtigungs-ID ntf_ (jeder Kanal außer Webhook) oder whk_ (Webhook).
--expect-rev REVISIONstringneinkeineOptionale Revisionsvoraussetzung.
screenrig notifications delete ntf_01EXAMPLENOTICE00000

Das Zustellungsprotokoll kann danach nicht mehr gelesen werden; die Zeilen laufen mit der Ereignisaufbewahrung ab.

notifications rotate-secret#

Ersetzt das Signaturgeheimnis einer Webhook-Benachrichtigung und gibt das neue einmal aus. Jeder andere Kanal hat kein Geheimnis und antwortet mit invalid_request (Exit 8).

notifications rotate-secret <id> [--expect-rev REVISION]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Benachrichtigungs-ID ntf_ (jeder Kanal außer Webhook) oder whk_ (Webhook).
--expect-rev REVISIONstringneinkeineOptionale Revisionsvoraussetzung.
screenrig notifications rotate-secret whk_01EXAMPLEWEBHOOK00000

Der Umschlag enthält das neue Geheimnis in data.secret mit der Warnung webhook_secret_shown_once; speichern Sie es sofort. Das vorherige Geheimnis signiert nicht mehr, aber höchstens ein bereits laufender Versuch kann noch damit signiert ankommen, daher akzeptieren Sie beide für kurze Zeit. Nach einer unterbrochenen oder mehrdeutigen Rotation führen Sie denselben Befehl innerhalb von 24 Stunden erneut aus, um dasselbe Geheimnis zurückzubekommen.

notifications test#

Sendet nur an diese Benachrichtigung eine Test-E-Mail, einen signierten Test-POST oder eine Chat-Nachricht.

notifications test <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Benachrichtigungs-ID ntf_ (jeder Kanal außer Webhook) oder whk_ (Webhook).
screenrig notifications test ntf_01EXAMPLENOTICE00000

Der Umschlag ist die eingereihte Zustellung. Sie wird einmal ohne Wiederholungen versucht, funktioniert bei einer deaktivierten oder pausierten Benachrichtigung und ändert nie den Fehlerzustand der Benachrichtigung. Maximal 20 Testzustellungen pro Minute und Organisation; mehr ist rate_limited (Exit 7). Lesen Sie das Ergebnis mit notifications deliveries.

Ein PagerDuty-Test löst ein Informationsereignis mit dem Schlüssel screenrig:test:DELIVERY_ID aus und löst es sofort wieder auf, sodass kein Vorfall offen bleibt.

notifications resubscribe#

Sendet einer Person, die sich von den E-Mails einer Benachrichtigung abgemeldet hat, wieder E-Mails.

notifications resubscribe <id> --user USER_ID
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie ntf_-ID einer E-Mail-Benachrichtigung.
--user USER_IDstringjakeineDie Benutzer-ID der Person, wie notifications show sie unter unsubscribed aufführt.
screenrig notifications resubscribe ntf_01EXAMPLENOTICE00000 --user usr_01EXAMPLEPERSON0000

Der Umschlag ist die Benachrichtigung. Eine Person, die nicht abgemeldet ist, ändert nichts. Das erneute Anmelden einer Person erhöht die Revision und hängt notification.updated an. Eine Benachrichtigung eines anderen Kanals oder Projekts ist not_found (Exit 4).

notifications deliveries#

Das Zustellungsprotokoll einer Benachrichtigung lesen, neueste zuerst.

notifications deliveries <id> [--before CURSOR] [--limit N]
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie Benachrichtigungs-ID ntf_ (jeder Kanal außer Webhook) oder whk_ (Webhook).
--before CURSORstringneindas neueste EreignisDie next_cursor (whc1_… oder whc2_…) der vorherigen Seite.
--limit Nintegernein50Zeilen pro Seite, 1 bis 200.
screenrig notifications deliveries ntf_01EXAMPLENOTICE00000 --limit 20

Jede Zeile ist ein Ereignis oder eine Meldung zu einer Bedingung auf einem Bildschirm: event_type, state (pending, succeeded, failed oder skipped), attempts, last_status und eine feste last_error-Klasse wie http_status, timeout, connection_failed, tls_failed, dns_failed, url_rejected, email_failed, email_rejected oder secret_unavailable. Eine Bildschirmmeldung ergänzt condition, phase (opened oder resolved), screen_id, screen_name (bei einer Datenquelle, einer Kampagne oder einer Karte deren ID und Name) und since, und eine E-Mail-Meldung ergänzt emailed, die Zahl der erreichten Personen. Eine Meldung, die nicht gesendet werden musste, ist skipped, mit ihrem Grund in last_error: condition_cleared (der Bildschirm verließ den Zustand vor Ende der Wartezeit), not_opened (keine Meldung wurde zum Beheben gesendet), snoozed (die Benachrichtigung ist pausiert), acknowledged (jemand hat den Alarm des Bildschirms während der Wartezeit quittiert oder zurückgestellt), muted (eine Stummschaltung deckt den Bildschirm ab), outside_hours (die aktiven Zeiten der Benachrichtigung waren geschlossen und sie verwirft Meldungen außerhalb davon), below_severity (die Meldung liegt unter min_severity, das nach dem Einreihen erhöht wurde), planned_reboot (der Bildschirm ging offline, trennte sein Display oder stürzte ab, während er für einen von screenRIG gesendeten Neustart neu startete, bis dieser beendet ist oder zehn Minuten nach dem Senden vergangen sind), no_recipients (kein Empfänger ist ein Projektmitglied mit verifizierter Adresse, das sich nicht abgemeldet hat), grouped (der Bildschirm geriet gemeinsam mit anderen in die Bedingung, und eine Meldung in einer anderen Zeile nennt sie alle), oder no_longer_judged (eine Bedingung loop_stalled, glass_blank oder glass_frozen endete, weil screenRIG den Bildschirm nicht mehr beurteilte, eine Bedingung reach_dropped, weil die Kampagne erneut veröffentlicht oder gelöscht wurde, eine Bedingung group_empty, weil eine Veröffentlichung den Tag oder Ordner aus ihrer Zielgruppe entfernte, oder eine Bedingung card_data_stale, weil die Daten der Karte gelöscht wurden, sodass keine Wiederherstellung gemeldet wurde). Die Meldung, die eine Gruppe von Bildschirmen nannte, trägt group (id, attribute, value und count), und jeder andere Bildschirm der Gruppe trägt group_id; --human zeigt beides in einer Spalte GROUP. Zeilen enthalten nie die Antwort des Empfängers. next_cursor ist am Ende des Protokolls null. Ein fehlgeschlagener Versuch wird mit Backoff wiederholt, 30 Sekunden mit Verdopplung bis zu einer Stunde, 24 Stunden lang, danach ist die Zeile failed.

Lieferung verifizieren

Der Body einer Bildschirmmeldung ist JSON: type (alert.opened oder alert.resolved), id (die Zustellungs-ID), notification_id, project_id, condition, screen (id und name), since (wann die Bedingung begann), at (wann sie lange genug angedauert hat oder behoben wurde), event_id und severity (info, warning oder error: die Stufe der Bedingung bei alert.opened, info bei alert.resolved). alert.resolved für screen_offline enthält außerdem likely_cause (device_restart, app_crash, app_restart, network oder platform), null solange die Ursache unbekannt ist. Bei einer Datenquelle, einer Kampagne oder einer Karte benennt screen sie, und eine Kampagnenmeldung fügt reach (published und current Bildschirme) für reach_dropped oder audience_group (kind tag oder folder und value) für group_empty hinzu. Ein rohes Ereignis von --events ist dasselbe JSON-Objekt, das events list zurückgibt. Die Header sind ScreenRig-Webhook-Id (die Benachrichtigungs-ID), ScreenRig-Event-Id (stabil bei Wiederholungen: die Zustellungs-ID bei einer Meldung, der Ereignis-Cursor bei einem Ereignis) und ScreenRig-Signature: t=<unix seconds>,v1=<hex>, wobei v1 HMAC-SHA256 über "<t>.<raw body>" ist, mit dem geheimen String als Schlüssel. Berechnen Sie es über die Rohbytes vor dem Parsen von JSON, vergleichen Sie in konstanter Zeit, lehnen Sie ein altes t ab und deduplizieren Sie anhand von ScreenRig-Event-Id, da die Zustellung mindestens einmal und ungeordnet erfolgt. Antworten Sie innerhalb von 10 Sekunden mit 2xx; Weiterleitungen werden nicht verfolgt.

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);
}

Alarme

Ein Alarm ist ein Problem auf einem Bildschirm, solange es besteht. Er wird geöffnet, wenn ein Bildschirm in eine der Benachrichtigungsbedingungen für Bildschirme (screen_offline, display_disconnected, running_hot, on_battery, storage_full, content_stuck, not_playing, loop_stalled, glass_blank oder glass_frozen) gerät, ob eine Benachrichtigung sie überwacht oder nicht, und wird behoben, wenn die Bedingung endet. Ein Bildschirm hat pro Bedingung höchstens einen offenen Alarm. Eine Absturzserie, eine Datenquelle, eine Karte und eine Kampagne sind Meldungen, nie Alarme. Ein Bildschirm, der für einen von screenRIG gesendeten Neustart neu startet (screen reboot oder ein Neustartplan), öffnet keinen screen_offline- oder display_disconnected-Alarm, bis der Neustart abgeschlossen ist oder zehn Minuten nach dem Senden vergangen sind; eine Bedingung, die dann noch besteht, öffnet ihren Alarm. alerts list zeigt, was gerade offen ist.

Ein offener Alarm braucht Aufmerksamkeit, bis jemand ihn quittiert oder zurückstellt oder eine Stummschaltung seinen Bildschirm abdeckt. Quittieren bedeutet, dass sich jemand darum kümmert: Der Alarm bleibt offen, hält fest, wer ihn wann quittiert hat, und braucht bis zu seiner Behebung keine Aufmerksamkeit. Zurückstellen quittiert bis zu einem Zeitpunkt, der höchstens 30 Tage in der Zukunft liegt, und der Alarm braucht dann wieder Aufmerksamkeit, wenn er noch offen ist. Ein späteres Quittieren oder Zurückstellen ersetzt das frühere. Solange ein Alarm quittiert oder zurückgestellt ist, wird die Meldung einer Benachrichtigung dazu, die noch in der Wartezeit ist, übersprungen.

Eine Stummschaltung ist für Wartungsarbeiten gedacht: Sie nennt Bildschirme, Tags oder beides und endet zu einem Zeitpunkt, der höchstens 30 Tage in der Zukunft liegt. Sie deckt einen Bildschirm ab, solange seine ID aufgeführt ist oder er einen aufgeführten Tag trägt; ein später getaggter Bildschirm ist also abgedeckt, einer, der den Tag verliert, nicht mehr. Die Alarme eines stummgeschalteten Bildschirms werden weiterhin geöffnet und behoben, mit muted markiert, brauchen aber nie Aufmerksamkeit, und jede Benachrichtigung überspringt ihre Meldungen. Eine Organisation hat höchstens 50 aktuelle Stummschaltungen über alle ihre Projekte.

counts.attention in alerts list ist die Zahl, die das Dashboard neben Alarme anzeigt. Das Öffnen, Beheben und Quittieren eines Alarms fügt screen.alert_opened, screen.alert_resolved und screen.alert_acknowledged zum Projekt-Ereignisprotokoll hinzu, und das Anlegen und Beenden einer Stummschaltung fügt alert_mute.created und alert_mute.deleted hinzu. Sie sind im Listen-Stream und bei Webhooks kostenlos, wie jedes screen.*-Ereignis. Behobene Alarme bleiben für die Ereignisaufbewahrung des Tarifs aufgelistet. Das Lesen von Alarmen und Stummschaltungen erfordert Nur-Lese-Zugriff; Quittieren, Zurückstellen, Stummschalten und Aufheben der Stummschaltung erfordern Verwalten-Zugriff.

ProblemcodeBeendenBedeutung
alert_not_open5Der Alarm ist bereits behoben, es gibt also nichts zu quittieren oder zurückzustellen. Führen Sie alerts list aus und verwenden Sie einen offenen.
alert_mute_limit_reached5Die Organisation hat bereits 50 aktuelle Stummschaltungen. Beenden Sie eine mit alerts unmute oder decken Sie mehr Bildschirme mit einer Stummschaltung per Tag ab.
invalid_request8Der Zeitpunkt --until liegt mehr als 30 Tage in der Zukunft. Nichts wurde geändert.
not_found4Kein Alarm und keine Stummschaltung im Projekt hat diese ID. Ein behobener Alarm ist nach der Ereignisaufbewahrung des Tarifs weg, eine Stummschaltung, sobald sie beendet ist.

alerts list#

Die Alarme dieses Projekts auflisten, offene zuerst.

alerts list [--state open|resolved|all] [--screen-id ID] [--before CURSOR] [--limit N]
            [--format json|csv|xlsx|pdf] [--output FILE]
ParameterTypErforderlichStandardNotizen
--state STATEstringneinopenopen, resolved oder all.
--screen-id IDstringneinjeder BildschirmNur die Alarme dieses Bildschirms.
--before CURSORstringneindie erste SeiteDie next_cursor der vorherigen Seite.
--limit Nintegernein100Zeilen pro Seite, 1 bis 200.
--format FORMATstringneinjsonjson oder csv, xlsx oder pdf, um die Alarme in eine Datei zu schreiben, statt sie auszugeben.
--output FILEPfadnein./alerts.FORMATDie Datei, die mit --format csv, xlsx oder pdf geschrieben wird. Nicht mit json.
screenrig alerts list
screenrig alerts list --state all --screen-id scr_01EXAMPLESCREEN00000000
screenrig alerts list --state all --format csv --output alerts.csv

Jede Zeile ist ein Alarm: id (alr_…), screen_id, screen_name, condition, state (open oder resolved), since (wann die Bedingung begann), resolved_at nach der Behebung, acknowledged_at und acknowledged_by (kind, id und name der Person oder des Agenten) nach dem Quittieren, snoozed_until während der Zurückstellung, muted und attention. Offene Alarme stehen zuerst, die neuesten zuerst. counts enthält open und attention für das gesamte Projekt, unabhängig von Seite und Filtern, und next_cursor ist am Ende null.

Mit --format csv, xlsx oder pdf enthält die Datei alle Alarme, auf die die Filter zutreffen, bis zu 50.000 Zeilen, und der Umschlag trägt ihren path, ihre bytes und ihren sha256. Berichte und Exporte beschreibt die Dateien.

alerts show#

Einen Alarm anzeigen.

alerts show <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie alr_ Alarm-ID.
screenrig alerts show alr_01EXAMPLEALERT000000

Der Umschlag ist der Alarm, in der Form einer Zeile von alerts list.

alerts ack#

Einen offenen Alarm quittieren: Jemand kümmert sich darum.

alerts ack <id>
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie alr_ Alarm-ID.
screenrig alerts ack alr_01EXAMPLEALERT000000

Der Alarm bleibt offen und braucht bis zu seiner Behebung keine Aufmerksamkeit; acknowledged_by nennt die Person oder den Agenten und acknowledged_at den Zeitpunkt. Die Meldung einer Benachrichtigung, die noch in der Wartezeit ist, wird übersprungen. Erneutes Quittieren ersetzt das frühere Quittieren oder Zurückstellen. Ein behobener Alarm ergibt alert_not_open (Exit 5). Der Umschlag ist der Alarm, und das Ereignisprotokoll verzeichnet screen.alert_acknowledged.

alerts snooze#

Einen offenen Alarm bis zu einem Zeitpunkt quittieren, damit er dann wieder Aufmerksamkeit braucht.

alerts snooze <id> (--for DURATION | --until TIME)
ParameterTypErforderlichStandardNotizen
<id>stringjakeineDie alr_ Alarm-ID.
--for DURATIONDauereines von --for, --untilkeineWie lange ab jetzt zurückgestellt wird: eine Dauer wie 30m, 4h oder 2d, höchstens 29d23h59m.
--until TIMEstringeines von --for, --untilkeineWann die Zurückstellung endet: ein Zeitpunkt nach RFC 3339 mit Sekunden und Offset, etwa 2026-11-01T09:00:00-07:00, höchstens 30 Tage in der Zukunft.
screenrig alerts snooze alr_01EXAMPLEALERT000000 --for 4h

snoozed_until ist der Zeitpunkt, zu dem die Zurückstellung endet. Bis dahin braucht der Alarm keine Aufmerksamkeit, und die Meldung einer Benachrichtigung, die noch in der Wartezeit ist, wird übersprungen, wie bei alerts ack; ist der Alarm zu diesem Zeitpunkt noch offen, braucht er wieder Aufmerksamkeit. Ein behobener Alarm ergibt alert_not_open (Exit 5).

alerts mute#

Bildschirme für Wartungsarbeiten stummschalten.

alerts mute [--screen-id ID]... [--tag TAG]... (--for DURATION | --until TIME) [--note TEXT]
ParameterTypErforderlichStandardNotizen
--screen-id IDstringmindestens eines von --screen-id, --tagkeineEine scr_ Bildschirm-ID. Wiederholen Sie sie oder listen Sie IDs kommasepariert auf; maximal 100.
--tag TAGstringmindestens eines von --screen-id, --tagkeineJeder Bildschirm mit diesem Tag. Wiederholen Sie es oder listen Sie Tags kommasepariert auf; maximal 16.
--for DURATIONDauereines von --for, --untilkeineWie lange die Stummschaltung ab jetzt gilt: eine Dauer wie 30m, 4h oder 2d, höchstens 29d23h59m.
--until TIMEstringeines von --for, --untilkeineWann die Stummschaltung endet: ein Zeitpunkt nach RFC 3339 mit Sekunden und Offset, etwa 2026-11-01T09:00:00-07:00, höchstens 30 Tage in der Zukunft.
--note TEXTstringneinkeineWarum die Bildschirme stummgeschaltet sind, für die Personen, die die Stummschaltung sehen; höchstens 200 Zeichen.
screenrig alerts mute --tag Lobby --for 2h --note "Rewiring the lobby displays"

Der Umschlag ist die Stummschaltung: id (amt_…), screen_ids, tags, until, note, created_by und created_at. Die Alarme jedes abgedeckten Bildschirms zeigen sofort muted, auch die bereits offenen. Eine Organisation hat höchstens 50 aktuelle Stummschaltungen über alle ihre Projekte; eine weitere ergibt alert_mute_limit_reached (Exit 5), und eine beendete Stummschaltung zählt nicht mehr. Lesen Sie nach einer unterbrochenen oder mehrdeutigen Stummschaltung zuerst alerts mutes: Dasselbe Kommando mit --until innerhalb von 24 Stunden erneut auszuführen liefert dieselbe Stummschaltung, während eine Wiederholung mit --for ab einem neuen Zeitpunkt zählt und eine weitere anlegt.

alerts mutes#

Die noch nicht beendeten Stummschaltungen auflisten, die zuerst endende zuerst.

alerts mutes
screenrig alerts mutes

Jede Zeile ist eine Stummschaltung, wie alerts mute sie ausgibt.

alerts unmute#

Eine Stummschaltung jetzt beenden.

alerts unmute <mute-id>
ParameterTypErforderlichStandardNotizen
<mute-id>stringjakeineDie amt_ Stummschaltungs-ID.
screenrig alerts unmute amt_01EXAMPLEMUTE0000000

Die offenen Alarme dieser Bildschirme brauchen wieder Aufmerksamkeit, und spätere Meldungen werden nicht mehr als stummgeschaltet übersprungen. Eine beendete Stummschaltung ergibt not_found (Exit 4). Das Ereignisprotokoll verzeichnet alert_mute.deleted.

Webhooks

Ein Webhook sendet die eigenen Ereignisse dieses Projekts an einen von Ihnen betriebenen HTTPS-Endpunkt als signierte POSTs, sodass ein passendes Ereignis einen Agenten, Bot oder Ihren eigenen Dienst wecken kann. Jedes passende Ereignis kommt als dasselbe JSON-Objekt an, das events list zurückgibt. Ein Webhook ist eine Benachrichtigung in ihrer ursprünglichen Form: Er wird auf die 50 Benachrichtigungen der Organisation angerechnet, und notifications list zeigt ihn an. Richten Sie Neues mit notifications ein; damit lassen sich auch E-Mails und Bildschirmmeldungen senden.

Jeder Zustellversuch ist kostenlos und zählt nicht zum stündlichen Limit der Organisation für Agentenanfragen.

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 antwortet mit webhook_limit_reached (Exit 5), wenn die Organisation bereits 50 Benachrichtigungen hat, während notifications create mit notification_limit_reached antwortet. Eine abgelehnte URL ist bei beiden webhook_url_rejected (Exit 8).

--url nimmt eine https-URL auf Port 443 oder 8443, deren Host nur auf öffentliche Internetadressen auflöst, geprüft wie bei notifications create; eine URL mit Zugangsdaten oder einem #-Fragment wird lokal mit Exit 2 abgelehnt. --event-types nimmt 1 bis 32 kommagetrennte exakte Typen, etwa screen.online, oder Präfixe, die auf .* enden, etwa screen.*. --description hat höchstens 200 Zeichen. --disabled legt den Webhook deaktiviert an. webhooks update --enable löscht den Fehlerzustand und beginnt beim aktuellen Ereignis, sodass nichts aus der Zeit der Deaktivierung gesendet wird, und --disable lässt ausstehende Zustellungen mit webhook_disabled fehlschlagen. --expect-rev sichert die Revision ab (revision_conflict, Exit 6).

webhooks create und webhooks rotate-secret geben das Signaturgeheimnis einmal in data.secret mit der Warnung webhook_secret_shown_once aus; nach einem unterbrochenen oder mehrdeutigen Aufruf führen Sie denselben Befehl innerhalb von 24 Stunden erneut aus, um dieselbe Antwort zurückzubekommen. Die Zustellung beginnt mit dem ersten Ereignis nach dem Anlegen des Webhooks. webhooks test stellt eine webhook.test-Zustellung nur für diesen Webhook in die Warteschlange; sie funktioniert bei einem deaktivierten Webhook, wird einmal ohne Wiederholungen versucht, wird wie jede Zustellung gemessen und ist auf 20 pro Minute und Organisation begrenzt (rate_limited, Exit 7). webhooks list zeigt die Webhook-Benachrichtigungen dieses Projekts, älteste zuerst, und eine Nur-Lese-Anmeldeinformation erhält jede url leer mit url_redacted true. webhooks deliveries liest das Protokoll beginnend mit dem neuesten Ereignis, 1 bis 200 Zeilen pro Seite (Standard 50), mit next_cursor (whc1_…) als --before; der state einer Zeile ist pending, succeeded oder failed, mit last_status und einer festen last_error-Klasse. Verifizieren Sie eine Zustellung wie unter Lieferung verifizieren beschrieben.

Weitere Befehlsgruppen