Operações
Uploads e publicações são executados como operações. media upload, media replace e app upload aguardam a sua por padrão; estes comandos servem para concluir uma que você deixou em execução com --no-wait.
operations show#
Leia o estado atual de uma operação.
operations show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da operação do envelope que a iniciou. |
screenrig operations show op_01EXAMPLEOPERATION00000state é receiving, queued, running, succeeded, failed ou cancelled; os três últimos encerram a operação. Uma operação bem-sucedida traz seu result, e uma que falhou traz error com o code e o detail do problema.
operations wait#
Pesquise uma operação até que ela termine.
operations wait <id> [--timeout MS] [--poll-ms MS]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da operação. |
--timeout MS | integer | não | 120000 | Prazo para a espera. Também limita cada solicitação subjacente. |
--poll-ms MS | integer | não | 1000 | Intervalo entre pesquisas de operação enquanto aguarda. |
screenrig operations wait op_01EXAMPLEOPERATION00000A espera termina quando a operação está succeeded, failed ou cancelled. Uma operação que falhou ou foi cancelada sai com 13 e seu próprio erro. Uma espera que estoura o tempo sai com 11 e a operação continua em execução; o next do erro é operations wait ID, que retoma a espera sem iniciar a operação de novo.
operations cancel#
Peça ao plano de controle para cancelar uma operação.
operations cancel <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da operação. |
screenrig operations cancel op_01EXAMPLEOPERATION00000Cancelar exige acesso Gerenciar. A resposta é a operação cancelada.
Eventos
O registro de eventos do projeto registra o que o projeto fez e o que a frota fez. Um lançamento publicado adiciona application.published; um app que chama screenrig.emit(code) adiciona seu próprio evento, que é a evidência mais direta de que ele foi executado em uma tela.
Presença também está no log. screen.offline é gravado uma vez que uma tela fica offline por 60 segundos, e screen.online quando ela volta; uma reconexão dentro desses 60 segundos não grava nenhum dos dois. screen.offline carrega details.offline_since e, quando a tela já esteve online antes, details.last_online_at. screen.online carrega details.last_online_at, mais details.offline_at quando a tela estava offline antes de retornar. Como todo evento screen.*, eles são gratuitos na corrente de escuta, para que um agente possa manter events follow aberto para monitorar uma frota.
As atualizações de conteúdo de um Player chegam como screen.manifest_changed, screen.manifest_activated e screen.manifest_upgrade, cujos details trazem manifest_revision, state e, quando presentes, code e attempt. Um upgrade failed tem gravidade de erro, e retrying, blocked e partial são avisos.
events list#
Leia uma página finita de eventos do projeto.
events list [--after CURSOR] [--limit N] [--type TYPE] [--source project|log] [--screen-id ID] [--playlist-id ID] [--app-id ID]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--after CURSOR | string | não | a primeira página | Retomar após o next_cursor da página anterior. |
--limit N | integer | não | 50 | Tamanho da página, de 1 a 200. |
--type TYPE | string | não | todo tipo | Um tipo de evento, ou uma família por um prefixo terminando em ponto, como note.. |
--source SOURCE | string | não | project | project lista os eventos do projeto. log lista os registros de log do Player, que pertencem a uma tela: use-o com --screen-id. |
--screen-id ID | string | não | tela inteira | Eventos cujo recurso é esta tela, incluindo os emitidos pelo SDK. Com --source log, os registros de log do Player dessa tela. |
--playlist-id ID | string | não | cada playlist | Eventos cujo recurso é esta playlist e eventos que a nomeiam em details.playlist_id, como uma tela que a assume. Não com --source log. |
--app-id ID | string | não | todas as aplicações | Eventos do recurso de aplicação, de suas versões e de suas entradas K/V; exclui eventos emitidos pelo SDK. Não com --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_SCREENOs métodos emit() e emitConfirmed() do SDK adicionam registros application.event cujo recurso é a tela. Leia-os com --type application.event, adicionando --screen-id opcionalmente. Os campos retornados details.primitive_id e details.code identificam a primitiva emissora e a ação nomeada. --app-id seleciona eventos do recurso de aplicação, de suas versões e de suas entradas K/V, portanto exclui esses eventos de tela.
--source log lê o log do Player: as condições que um Player informa, mantidas pela retenção de eventos do projeto. Ele não tem sequência, então não está em events follow e não é entregue a webhooks, e --playlist-id e --app-id são recusados com ele (usage_error, exit 2). Um id de tipo errado é recusado antes de qualquer requisição. data.next_cursor é null no fim do histórico.
A saída padrão é um envelope JSON para a página. Com --human, a saída é uma linha logfmt por evento: at=, type=, severity= e detalhes escalares.
events follow#
Permaneça no fluxo de eventos e imprima os eventos conforme chegam.
events follow [--after CURSOR] [--timeout MS] [--type TYPE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--after CURSOR | string | não | o final ao vivo | Retomar a partir deste cursor. |
--timeout MS | integer | não | sem prazo | Encerra todo o acompanhamento, incluindo reconexão com recuo. |
--type TYPE | string | não | todo tipo | Um tipo de evento, ou uma família por um prefixo terminando em ponto, como note.. |
screenrig events followUma desconexão ou falha transitória reconecta com recuo e retoma do último id de evento. A reprodução após reconexão é gratuita. Problemas de autorização e não encontrado param o comando em vez de tentar novamente.
Com --type, o fluxo continua trazendo todos os eventos e a CLI imprime apenas os que correspondem, e os quadros stream.* que descrevem o próprio fluxo são sempre impressos: screenrig events follow --type note. acompanha as notas do projeto.
A saída padrão é NDJSON: um envelope por evento em sua própria linha, em vez de um único envelope. Use --human para linhas logfmt.
Notificações
Uma notificação avisa uma pessoa, ou outro sistema, quando uma tela muda de estado. Uma notificação por e-mail envia um e-mail a cada destinatário, uma notificação de webhook envia um POST HTTPS assinado, e uma notificação do Slack, Teams, PagerDuty ou Telegram publica uma mensagem em um chat ou em um sistema de plantão. Uma organização tem no máximo 50, somando todos os canais e todos os seus projetos, e todo projeto começa com um e-mail ao proprietário quando uma tela fica 10 minutos offline.
Uma notificação observa as condições que você indicar:
| Condição | Começa quando | Termina quando |
|---|---|---|
screen_offline | O Player está offline há 60 segundos. | A tela está online novamente. |
display_disconnected | O Player informa que seu monitor está desconectado. | O monitor se reconecta. |
running_hot | O dispositivo informa uma temperatura igual ou superior ao limite de temperatura alta. | A temperatura volta ao normal. |
on_battery | Um dispositivo com bateria informa que está funcionando na bateria, desconectado da tomada. | O dispositivo informa outra fonte de energia. |
storage_full | O armazenamento do Player não comporta seu conteúdo. | A falta de espaço desaparece. |
content_stuck | A atualização de conteúdo da tela está sendo tentada novamente, falhou, está bloqueada ou parcial. | A atualização passa para qualquer outro estado. |
not_playing | O Player mostra um erro em vez do seu conteúdo. Armazenamento cheio é storage_full. | O status do Player não é mais um erro. |
loop_stalled | Uma tela que está online, dentro do horário e com conteúdo atual não iniciou nenhuma imagem ou vídeo por mais tempo do que o ciclo dela permite. | Uma imagem ou um vídeo volta a iniciar, ou o screenRIG deixa de julgar a tela. |
glass_blank | As capturas que o screenRIG fez ao longo de uma série que cobre todo o ciclo eram todas de um único tom chapado. | Duas capturas seguidas mostram uma imagem, ou o screenRIG deixa de julgar a tela. |
glass_frozen | As capturas que o screenRIG fez ao longo de uma série que cobre todo o ciclo mostravam todas a mesma imagem. | Duas capturas seguidas mostram uma imagem em movimento, ou o screenRIG deixa de julgar a tela. |
crashing | O Player travou ou reiniciou seu renderizador repetidamente. | Nunca: cada pico é um aviso próprio. |
source_failed | A atualização de uma fonte de dados falhou. | Uma atualização funciona. |
source_stale | Uma fonte de dados continuou falhando até os dados expirarem. | Uma atualização funciona. |
card_data_stale | Os dados de um cartão, gravados com uma expiração, chegaram a ela enquanto uma tela mostra o cartão e nada os renovou. | Uma gravação nos dados do cartão é concluída. |
reach_dropped | Uma campanha alcança menos telas do que quando foi publicada pela última vez, porque telas saíram de suas tags ou pastas, ou foram arquivadas ou excluídas. | A campanha volta a alcançar o mesmo número de telas, ou é publicada novamente. |
group_empty | Uma tag ou pasta do público-alvo de uma campanha não corresponde a nenhuma tela. | A tag ou pasta volta a corresponder a uma tela, ou uma publicação a remove do público-alvo. |
Uma condição notifica depois de durar --hold minutos (padrão 10), para que uma reconexão rápida fique silenciosa. Se ela terminar antes, nada é enviado; se terminar depois de um aviso ter sido enviado, um aviso de resolução vem em seguida. crashing é enviado imediatamente. Um aviso também é ignorado quando alguém reconhece ou adia o alerta da tela durante o tempo de espera, ou quando um silenciamento cobre a tela. --tag limita uma notificação às telas com essa tag; sem ela, todas as telas são consideradas.
Cada aviso tem uma severidade. Um aviso aberto é error para screen_offline e warning para toda outra condição, e um aviso de resolvido ou um teste é info. --min-severity LEVEL (info, warning ou error) não cria aviso aberto abaixo desse nível, e um aviso de resolvido segue o seu aberto. --severity CONDITION=LEVEL, repetível, define o nível de uma condição para esta notificação, como --severity not_playing=error; conta para --min-severity. Teams e PagerDuty sempre mostram o nível, o texto de e-mail, Slack e Telegram o nomeia quando a notificação define --min-severity ou --severity, e o corpo de um webhook carrega severity.
--active-hours SPEC envia avisos abertos somente dentro de janelas semanais, lidas em --timezone ZONE, que ele exige. SPEC é DAYS HH:MM-HH:MM, como "Mon-Fri 08:00-22:00"; repita até 16 vezes. Com --outside-hours hold, o padrão, um aviso que vence fora do horário espera a próxima janela e é enviado então se sua condição ainda se mantiver, de modo que uma condição que termina antes não envia nada. Com drop o aviso é ignorado como outside_hours, que notifications deliveries lista. Um aviso de resolvido para um aviso aberto que foi enviado sempre é enviado, crashing segue o horário como qualquer outra condição, um adiamento é verificado primeiro, e notifications test ignora horário, severidade e público-alvo.
--audience FILE (JSON inline, um arquivo ou - para stdin) escolhe as telas com as regras de um público-alvo de campanha, como {"all":[{"tag":"level2"},{"tag":"overhead"}]} para telas com ambas as tags; --all-tags TAG e --any-tag TAG são os atalhos para uma regra all e uma regra any de tags, e --tag significa qualquer uma das tags. --tag, --any-tag, --all-tags e --audience são mutuamente excludentes.
loop_stalled, glass_blank e glass_frozen são veredictos que o screenRIG tira dos relatórios de reprodução e das capturas de tela que recebe, e deixam de fora o que não conseguem julgar: uma tela offline, com o display desligado, sob takeover ou suspensa, que mostra uma única imagem estática ou um video wall, ou cujo Player não envia números de reprodução. Quando o screenRIG deixa de julgar uma tela que havia encontrado em um deles, o alerta se fecha, mas e-mail, Slack, Teams e Telegram não enviam aviso de resolução, pois nada mostrou a tela se recuperando; o PagerDuty ainda resolve o incidente.
source_failed e source_stale acompanham as fontes de dados do projeto, não as telas: um aviso nomeia a fonte e liga à página dela, e --tag nunca corresponde a uma fonte.
card_data_stale vigia um cartão, não uma tela. Grave os dados de um cartão com uma expiração dimensionada pelo horário de quem os grava (card data put --ttl 30m), e quando o job ou agente que os renova para, os dados expiram, o cartão fica em branco em toda tela que o mostra, e esta condição avisa você. O aviso nomeia o cartão e quando os dados dele expiraram, e liga ao editor de páginas em uma página que o coloca. Os documentos de uma fonte de dados nunca são anunciados aqui (source_stale os cobre), nem um cartão que nenhuma tela mostra, dados gravados sem expiração ou dados excluídos. --tag nunca corresponde a um cartão.
reach_dropped e group_empty observam uma campanha, não uma tela. O aviso nomeia a campanha e as telas que ela alcançava antes e alcança agora, ou a tag ou pasta vazia, e traz um link para o calendário da campanha. Uma campanha pertence ao projeto, portanto --tag, --any-tag, --all-tags e --audience nunca limitam esses dois; --min-severity, --severity, --active-hours e --hold se aplicam como em qualquer condição, e ambos são warning por padrão. --reach-drop-screens N e --reach-drop-percent P enviam um aviso reach_dropped somente para uma queda de pelo menos N telas e de pelo menos P por cento das telas que a campanha alcançava quando foi publicada; uma queda precisa atender aos dois critérios, e sem eles qualquer queda gera aviso. Eles exigem reach_dropped em --conditions. Cada tag ou pasta vazia de uma campanha é um aviso próprio, e notifications deliveries o mostra como audience_group (tag:Lobby ou folder:sfd_…). Uma publicação que remove um grupo vazio do público-alvo encerra um incidente do PagerDuty e o alerta de um webhook, mas não envia e-mail nem mensagem de chat de recuperação.
O e-mail vai para o endereço verificado de cada destinatário, um e-mail por destinatário para tudo o que deve ser enviado dentro de cerca de dois minutos, com um link para cada tela e para a notificação no dashboard. Os destinatários são owner, quem for o proprietário do projeto quando o aviso é enviado, e os ids de usuário dos membros do projeto. Um destinatário sem endereço verificado, ou que saiu do projeto, é ignorado. Os e-mails de notificação e os avisos de tela são gratuitos.
Cada e-mail traz um link de cancelamento de inscrição para o próprio destinatário: o botão de cancelar inscrição dos apps de e-mail e um link no rodapé. Segui-lo interrompe os e-mails dessa notificação para essa única pessoa, sem fazer login, e a página aberta tem um botão Resubscribe. Os outros destinatários não são afetados, e a pessoa continua entre os destinatários. notifications show lista quem cancelou com unsubscribed, e notifications resubscribe volta a enviar e-mails para ela. Um aviso sem ninguém para receber o e-mail é ignorado como no_recipients.
Uma notificação por webhook envia cada aviso por POST, como JSON, e você o verifica conforme descrito em Verificar uma entrega. Com --events, ela também envia por POST eventos brutos do projeto à medida que acontecem; essas entregas são medidas conforme descrito em Webhooks.
Uma notificação do Slack, Teams, PagerDuty ou Telegram publica uma mensagem por queda e por tela, ou por grupo de telas: a tela, o que mudou, desde quando, o projeto, um link para a tela e, quando uma tela offline volta, a causa provável se já for conhecida. Uma mensagem de recuperação vem depois que a primeira foi enviada e, no PagerDuty, resolve o incidente que a primeira abriu. Você informa a credencial uma única vez (--slack recebe a URL de um webhook de entrada, --teams a URL de um webhook do Workflows, --pagerduty uma chave de roteamento da API Events v2, --telegram um token de bot com --telegram-chat); ela é selada, nunca é mostrada de novo, e destination_hint mostra só o final mascarado. Um - a lê de uma linha do stdin para que fique fora do histórico do seu shell. Uma publicação com falha é repetida por 24 horas, e uma notificação que falha por 72 horas é desativada.
Quando três ou mais telas entram na mesma condição com menos de cinco minutos de diferença e compartilham rede, localização, modelo, versão do Player ou tag, uma notificação por e-mail, Slack, Teams, PagerDuty ou Telegram envia um único aviso para elas em vez de um por tela, e um único aviso diz o grupo quando a última tela se recupera; o aviso de cada outra tela é ignorado como grouped. Um webhook continua enviando um aviso por tela.
Ler notificações e suas entregas exige o acesso Somente leitura; criar, alterar, testar e excluir uma, girar o segredo dela e reinscrever uma pessoa exigem o acesso Gerenciar.
| Código do problema | Sair | Significado |
|---|---|---|
webhook_url_rejected | 8 | A URL não é https na porta 443 ou 8443, ou seu host não resolve apenas para endereços públicos da Internet. error.detail carrega o motivo do servidor. Nada foi criado ou alterado. |
notification_destination_rejected | 8 | O destino não serve ao seu canal, ou é a URL de um conector do Office 365 descontinuado. error.detail informa a forma que serve. Nada foi criado nem alterado. |
notification_limit_reached | 5 | A organização já tem 50 notificações. Exclua uma primeiro. |
revision_conflict | 6 | A revisão --expect-rev estava desatualizada. Execute notifications show e tente novamente. |
rate_limited | 7 | Mais de 20 chamadas notifications test em um minuto para esta organização. |
invalid_request | 8 | Um destinatário de --email que não é membro do projeto, ou uma opção que pertence a outro canal, como --url em uma notificação por e-mail. Nada foi criado ou alterado. |
notifications create#
Cria uma notificação por e-mail, 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]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--email RECIPIENTS | string | um flag de canal | nenhum | Enviar e-mail para estes destinatários separados por vírgula: owner, ou o id de usuário de um membro do projeto, no máximo 20. |
--webhook URL | string | um flag de canal | nenhum | Uma URL https na porta 443 (padrão) ou 8443 cujo host resolve apenas para endereços públicos da Internet. O servidor verifica a cada gravação e novamente antes de cada entrega. Uma URL que carrega credenciais (user:pass@ ou token@) ou um fragmento # é recusada localmente com saída 2. |
--conditions LIST | string | sim, exceto em um webhook | nenhum | Condições separadas por vírgula, da tabela acima. Um webhook precisa disto, de --events ou de ambos. |
--slack URL | string | um flag de canal | nenhum | Publica no Slack com a URL de um webhook de entrada em hooks.slack.com, ou - para lê-la de uma linha do stdin. |
--teams URL | string | um flag de canal | nenhum | Publica no Teams com a URL de um webhook do Workflows (o gatilho “Quando uma solicitação de webhook do Teams é recebida”), ou - para o stdin. URLs de conectores do Office 365 foram descontinuadas e são recusadas. |
--pagerduty KEY | string | um flag de canal | nenhum | Aciona e resolve incidentes do PagerDuty com uma chave de roteamento da API Events v2 de 32 caracteres, ou - para stdin. |
--telegram TOKEN | string | um flag de canal | nenhum | Publica no Telegram com um token de bot, ou - para o stdin. Exige --telegram-chat. |
--telegram-chat CHAT_ID | string | com --telegram | nenhum | O chat onde publicar: seu id numérico, como -1001234567890, ou @channelname. |
--events TYPES | string | não | nenhum | Somente webhook. Enviar também por POST estes eventos brutos do projeto: de 1 a 32 tipos exatos separados por vírgula, como screen.online, ou prefixos terminando em .*, como screen.*. |
--tag TAG | string | não | tela inteira | Somente telas com alguma destas tags. Repita a flag ou separe por vírgula, até 16 tags. |
--hold MINUTES | integer | não | 10 | Por quanto tempo uma condição deve durar antes de notificar, de 0 a 1440. crashing nunca espera. |
--all-tags TAG | string | não | nenhum | Apenas telas com todas as tags listadas. Repita a flag ou separe por vírgulas. |
--any-tag TAG | string | não | nenhum | Apenas telas com pelo menos uma das tags listadas, como --tag. Repita a flag ou separe por vírgulas. |
--audience FILE | string | não | tela inteira | As telas como regra de público-alvo de campanha em JSON: inline, um arquivo ou - para stdin. Não com as opções de tag. |
--min-severity LEVEL | string | não | nenhum | info, warning ou error: avisos abertos abaixo dele não são enviados. |
--severity CONDITION=LEVEL | string | não | os padrões | Define a severidade de uma condição para esta notificação. Repita a flag. |
--active-hours SPEC | string | não | sempre | Enviar avisos abertos somente dentro desta janela semanal, DAYS HH:MM-HH:MM como "Mon-Fri 08:00-22:00". Repita até 16 vezes. Requer --timezone. |
--timezone ZONE | string | com --active-hours | nenhum | A zona IANA em que o horário é lido, como America/Los_Angeles. |
--outside-hours MODE | string | não | hold | hold espera a próxima janela; drop ignora o aviso. |
--reach-drop-screens N | integer | não | qualquer queda | Somente com reach_dropped: envia um aviso apenas quando a campanha perdeu pelo menos N telas (1 ou mais). |
--reach-drop-percent P | integer | não | qualquer queda | Somente com reach_dropped: exige também uma perda de pelo menos P por cento (1 a 100) das telas que a campanha alcançava quando foi publicada. |
--description TEXT | string | não | nenhum | No máximo 200 caracteres. |
--disabled | boolean | não | desligado | Criar desativada. Nada é enviado até notifications update --enable. |
screenrig notifications create --email owner --conditions screen_offline,display_disconnected --tag Lobbyscreenrig notifications create --webhook https://hooks.example.com/screenrig --conditions screen_offline,crashingscreenrig notifications create --slack - --conditions screen_offline,crashing < slack-url.txtO envelope é a notificação. O de um webhook carrega seu segredo de assinatura em data.secret (whsec_…) com a advertência webhook_secret_shown_once. Armazene o segredo imediatamente na loja de segredos do receptor. Somente notifications rotate-secret o retorna novamente, e o CLI nunca o grava em sua configuração, log de operação ou estado de recuperação de gravação. Após uma criação interrompida ou ambígua, execute novamente o comando idêntico dentro de 24 horas: ele reutiliza a chave de idempotência salva, e o servidor retorna a mesma resposta, segredo incluído. Os avisos começam com o primeiro evento após a criação da notificação.
notifications list#
Listar as notificações deste projeto, nunca seus segredos.
notifications listscreenrig notifications listCada linha é uma notificação de qualquer canal, da mais antiga para a mais recente, com o seu status. Uma notificação do Slack, Teams, PagerDuty ou Telegram mostra destination_hint, a credencial mascarada até o host e os últimos caracteres, na coluna TO de --human. Abaixo do acesso Gerenciar, a url de um webhook fica vazia e url_redacted é verdadeiro, e TO mostra (withheld).
notifications show#
Inspecionar uma notificação e sua saúde de entrega.
notifications show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
screenrig notifications show ntf_01EXAMPLENOTICE00000status é active, failing enquanto nenhuma entrega teve sucesso desde failing_since, ou disabled. Após 72 horas de falha contínua, a notificação é desativada com disabled_reason: delivery_failures, e o registro de eventos grava notification.disabled. snoozed_until está presente enquanto um silenciamento estiver definido. last_success_at e last_failure_at relatam os resultados mais recentes. revision é o valor que --expect-rev protege. min_severity, severity, active_hours com outside, audience e reach_drop aparecem enquanto estiverem definidos, e uma notificação por e-mail lista unsubscribed.
notifications update#
Altera os destinatários, a URL, o destino, as condições, as telas, a espera, a pausa ou o estado de ativação de uma notificação.
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]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--email RECIPIENTS | string | pelo menos uma alteração | inalterado | Notificações por e-mail: substitui os destinatários. |
--url URL | string | pelo menos uma alteração | inalterado | Notificações por webhook: substitui a URL, verificada como em create. |
--destination VALUE | string | pelo menos uma alteração | inalterado | Notificações do Slack, Teams, PagerDuty e Telegram: substitui a credencial, verificada como em create. - a lê de uma linha do stdin. |
--telegram-chat CHAT_ID | string | pelo menos uma alteração | inalterado | Notificações do Telegram: substitui o chat. |
--conditions LIST | string | pelo menos uma alteração | inalterado | Substitui as condições. |
--clear-conditions | boolean | pelo menos uma alteração | desligado | Remover todas as condições. Um webhook então precisa de --events. |
--events TYPES | string | pelo menos uma alteração | inalterado | Notificações por webhook: substitui os eventos brutos do projeto. |
--clear-events | boolean | pelo menos uma alteração | desligado | Notificações por webhook: deixam de enviar por POST os eventos brutos do projeto. Elas então precisam de condições. |
--tag TAG | string | pelo menos uma alteração | inalterado | Substitui as tags de tela e o público-alvo, se a notificação tiver um. |
--all-screens | boolean | pelo menos uma alteração | desligado | Remover as tags de tela e o público-alvo; a notificação cobre todas as telas. |
--hold MINUTES | integer | pelo menos uma alteração | inalterado | 0 a 1440. |
--all-tags TAG | string | pelo menos uma alteração | inalterado | Substitui as telas por aquelas com todas as tags listadas. |
--any-tag TAG | string | pelo menos uma alteração | inalterado | Substitui as telas por aquelas com pelo menos uma das tags listadas, como --tag. |
--audience FILE | string | pelo menos uma alteração | inalterado | Substitui as telas por uma regra de público-alvo de campanha em JSON: inline, um arquivo ou - para stdin. |
--min-severity LEVEL | string | pelo menos uma alteração | inalterado | info, warning ou error. |
--clear-min-severity | boolean | pelo menos uma alteração | desligado | Remover o filtro de severidade. |
--severity CONDITION=LEVEL | string | pelo menos uma alteração | inalterado | Substitui as sobrescritas de severidade por estas. Repita a flag. |
--clear-severity | boolean | pelo menos uma alteração | desligado | Remover toda sobrescrita de severidade. |
--active-hours SPEC | string | pelo menos uma alteração | inalterado | Substitui as janelas por estas. Repita até 16 vezes. --timezone usa por padrão o fuso que a notificação já tem. |
--timezone ZONE | string | pelo menos uma alteração | inalterado | A zona IANA em que o horário é lido. Sozinha, mantém as janelas atuais. |
--outside-hours MODE | string | pelo menos uma alteração | inalterado | hold ou drop. Sozinho, mantém as janelas atuais. |
--clear-active-hours | boolean | pelo menos uma alteração | desligado | Remover o horário ativo. Os avisos que estavam retidos por ele são julgados de novo na hora. |
--reach-drop-screens N | integer | pelo menos uma alteração | inalterado | Substitui o menor número de telas que um aviso reach_dropped exige que a campanha tenha perdido. |
--reach-drop-percent P | integer | pelo menos uma alteração | inalterado | Substitui a menor porcentagem de seu alcance publicado que a campanha deve ter perdido. |
--clear-reach-drop | boolean | pelo menos uma alteração | desligado | Remove o limite, de modo que qualquer queda notifica. Retire reach_dropped de --conditions somente junto com ele. |
--description TEXT | string | pelo menos uma alteração | inalterado | No máximo 200 caracteres. |
--clear-description | boolean | pelo menos uma alteração | desligado | Remover a descrição. |
--enable | boolean | pelo menos uma alteração | desligado | Limpa o estado de falha e começa no evento que registra a mudança; nada do período em que estava desativada é enviado. |
--disable | boolean | pelo menos uma alteração | desligado | Interrompe os avisos; os avisos pendentes falham com webhook_disabled. |
--snooze WHEN | string | pelo menos uma alteração | inalterado | Não enviar nada até lá: uma duração como 30m, 1h ou 2d (menos de 30 dias), um instante RFC 3339 com segundos e um deslocamento, ou off para encerrar o silenciamento. Os avisos que devem ser enviados nesse intervalo são ignorados, não enviados depois. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig notifications update ntf_01EXAMPLENOTICE00000 --snooze 2hupdate altera apenas os campos que você passar. O canal nunca muda: --email vale para uma notificação por e-mail, --url e --events para um webhook, e --destination e --telegram-chat para uma de chat ou pager, e uma opção de outro canal é invalid_request (saída 8). Informe no máximo uma entre --email, --url e --destination. As tags de tela e um público-alvo se excluem: definir um limpa o outro. Uma notificação por e-mail mantém pelo menos uma condição, e um webhook mantém condições ou eventos. O segredo de assinatura permanece inalterado; use notifications rotate-secret.
notifications delete#
Excluir uma notificação. Seus avisos pendentes falham com webhook_deleted.
notifications delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig notifications delete ntf_01EXAMPLENOTICE00000Seu registro de entregas não pode ser lido depois; suas linhas expiram com a retenção de eventos.
notifications rotate-secret#
Substitui o segredo de assinatura de uma notificação de webhook e entrega o novo uma única vez. Qualquer outro canal não tem segredo e responde invalid_request (saída 8).
notifications rotate-secret <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig notifications rotate-secret whk_01EXAMPLEWEBHOOK00000O envelope carrega o novo segredo em data.secret com o aviso webhook_secret_shown_once; armazene-o imediatamente. O segredo anterior para de assinar, mas no máximo uma tentativa já em andamento ainda pode chegar assinada com ele, então aceite ambos por um curto período. Após uma rotação interrompida ou ambígua, execute novamente o comando idêntico dentro de 24 horas para recuperar o mesmo segredo.
notifications test#
Envia um e-mail de teste, um POST de teste assinado ou uma mensagem de chat somente a esta notificação.
notifications test <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
screenrig notifications test ntf_01EXAMPLENOTICE00000O envelope é a entrega enfileirada. Ela é tentada uma vez, sem novas tentativas, funciona em uma notificação desativada ou silenciada e nunca altera o estado de falha da notificação. No máximo 20 entregas de teste por minuto por organização; mais que isso é rate_limited (saída 7). Leia o resultado com notifications deliveries.
Um teste do PagerDuty dispara um evento informativo com a chave screenrig:test:DELIVERY_ID e o resolve na hora, então nenhum incidente fica aberto.
notifications resubscribe#
Volta a enviar e-mails de uma notificação a uma pessoa que cancelou o recebimento.
notifications resubscribe <id> --user USER_ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id ntf_ de uma notificação por e-mail. |
--user USER_ID | string | sim | nenhum | O id de usuário da pessoa, como notifications show o lista em unsubscribed. |
screenrig notifications resubscribe ntf_01EXAMPLENOTICE00000 --user usr_01EXAMPLEPERSON0000O envelope é a notificação. Uma pessoa que não cancelou o recebimento não altera nada. Reinscrever uma pessoa aumenta a revisão e adiciona notification.updated. Uma notificação de outro canal ou projeto é not_found (saída 4).
notifications deliveries#
Ler o log de entrega de uma notificação, mais recente primeiro.
notifications deliveries <id> [--before CURSOR] [--limit N]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--before CURSOR | string | não | o evento mais recente | O next_cursor (whc1_… ou whc2_…) da página anterior. |
--limit N | integer | não | 50 | Linhas por página, de 1 a 200. |
screenrig notifications deliveries ntf_01EXAMPLENOTICE00000 --limit 20Cada linha é um evento, ou um aviso de uma condição em uma tela: event_type, state (pending, succeeded, failed ou skipped), attempts, last_status e uma classe last_error fixa como http_status, timeout, connection_failed, tls_failed, dns_failed, url_rejected, email_failed, email_rejected ou secret_unavailable. Um aviso de tela acrescenta condition, phase (opened ou resolved), screen_id, screen_name (para uma fonte de dados, uma campanha ou um cartão, o id e o nome dele) e since, e um aviso por e-mail acrescenta emailed, o número de pessoas alcançadas. Um aviso que não precisou ser enviado é skipped, com o motivo em last_error: condition_cleared (a tela saiu do estado antes do fim da espera), not_opened (nenhum aviso foi enviado para resolver), snoozed (a notificação está silenciada), acknowledged (alguém reconheceu ou adiou o alerta da tela durante a espera), muted (um silenciamento cobre a tela), outside_hours (o horário ativo da notificação estava fechado e ela descarta avisos fora dele), below_severity (o aviso está abaixo de min_severity, que foi aumentado depois de entrar na fila), planned_reboot (a tela ficou offline, desconectou o monitor ou travou enquanto reiniciava por uma reinicialização enviada pelo screenRIG, até ela terminar ou dez minutos após o envio), no_recipients (nenhum destinatário é membro do projeto com endereço verificado e sem ter cancelado a inscrição), grouped (a tela entrou na condição junto com outras, e um aviso em outra linha diz todas), ou no_longer_judged (uma condição loop_stalled, glass_blank ou glass_frozen terminou porque o screenRIG deixou de avaliar a tela, uma reach_dropped porque a campanha foi publicada de novo ou excluída, uma group_empty porque uma publicação removeu a tag ou a pasta do público dela, ou uma card_data_stale porque os dados do cartão foram excluídos, então nenhuma recuperação foi informada). O aviso que disse um grupo de telas traz group (id, attribute, value e count), e cada outra tela do grupo traz group_id; --human mostra ambos em uma coluna GROUP. As linhas nunca incluem a resposta do receptor. next_cursor é null no fim do registro. Uma tentativa com falha é repetida com espera crescente, de 30 segundos dobrando até uma hora, por 24 horas, e depois a linha fica failed.
Verificar uma entrega
O corpo de um aviso de tela é JSON: type (alert.opened ou alert.resolved), id (o id da entrega), notification_id, project_id, condition, screen (id e name), since (quando a condição começou), at (quando durou o suficiente, ou terminou), event_id e severity (info, warning ou error: o nível da condição em alert.opened, info em alert.resolved). alert.resolved para screen_offline também traz likely_cause (device_restart, app_crash, app_restart, network ou platform), null enquanto a causa é desconhecida. Para uma fonte de dados, uma campanha ou um cartão, screen o nomeia, e um aviso de campanha acrescenta reach (published e current telas) para reach_dropped ou audience_group (kind tag ou folder e value) para group_empty. Um evento bruto de --events é o mesmo objeto JSON que events list retorna. Os cabeçalhos são ScreenRig-Webhook-Id (o id da notificação), ScreenRig-Event-Id (estável entre as tentativas: o id da entrega para um aviso, o cursor do evento para um evento) e ScreenRig-Signature: t=<unix seconds>,v1=<hex>, onde v1 é HMAC-SHA256 sobre "<t>.<raw body>" usando a string secreta como chave. Calcule-o sobre os bytes brutos antes de analisar o JSON, compare em tempo constante, rejeite um t antigo e deduplique por ScreenRig-Event-Id, porque a entrega é pelo menos uma vez e fora de ordem. Responda 2xx em até 10 segundos; redirecionamentos não são seguidos.
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);
}Alertas
Um alerta é um problema em uma tela enquanto ele durar. Ele abre quando uma tela entra em uma das condições de notificação de tela (screen_offline, display_disconnected, running_hot, on_battery, storage_full, content_stuck, not_playing, loop_stalled, glass_blank ou glass_frozen), quer uma notificação a monitore ou não, e é resolvido quando a condição termina. Uma tela tem no máximo um alerta aberto por condição. Um pico de travamentos, uma fonte de dados, um cartão e uma campanha são avisos, nunca alertas. Uma tela que reinicia por uma reinicialização enviada pelo screenRIG (screen reboot ou um agendamento de reinicialização) não abre alerta screen_offline nem display_disconnected até que a reinicialização termine ou dez minutos após o envio; uma condição que ainda persiste então abre o seu alerta. alerts list mostra o que está aberto agora.
Um alerta aberto precisa de atenção até alguém reconhecê-lo ou adiá-lo, ou até um silenciamento cobrir a tela dele. Reconhecer significa que alguém está cuidando: o alerta continua aberto, registra quem o reconheceu e quando, e não precisa de atenção até ser resolvido. Adiar reconhece até um horário no máximo 30 dias à frente, e o alerta volta a precisar de atenção nesse horário se ainda estiver aberto. Um reconhecimento ou adiamento posterior substitui o anterior. Enquanto um alerta está reconhecido ou adiado, o aviso de uma notificação sobre ele que ainda está em tempo de espera é ignorado.
Um silenciamento serve para manutenção: ele nomeia telas, tags ou ambos e termina em um momento no máximo 30 dias à frente. Ele cobre uma tela enquanto o id da tela estiver na lista ou ela tiver uma tag da lista, então uma tela marcada depois fica coberta e uma que perde a tag deixa de ser coberta. Os alertas de uma tela silenciada continuam abrindo e resolvendo, marcados muted, mas nunca precisam de atenção, e toda notificação ignora os avisos deles. Uma organização tem no máximo 50 silenciamentos vigentes em todos os seus projetos.
counts.attention em alerts list é o número que o painel mostra ao lado de Alertas. Abrir, resolver e reconhecer um alerta adiciona screen.alert_opened, screen.alert_resolved e screen.alert_acknowledged ao registro de eventos do projeto, e criar e encerrar um silenciamento adiciona alert_mute.created e alert_mute.deleted. Eles são gratuitos no stream de escuta e nos webhooks, como todo evento screen.*. Os alertas resolvidos continuam listados pelo período de retenção de eventos do plano. Ler alertas e silenciamentos exige o acesso Somente leitura; reconhecer, adiar, silenciar e remover o silenciamento exigem o acesso Gerenciar.
| Código do problema | Sair | Significado |
|---|---|---|
alert_not_open | 5 | O alerta já foi resolvido, então não há nada para reconhecer ou adiar. Execute alerts list e use um aberto. |
alert_mute_limit_reached | 5 | A organização já tem 50 silenciamentos vigentes. Encerre um com alerts unmute, ou cubra mais telas com um único silenciamento por tag. |
invalid_request | 8 | O instante --until está a mais de 30 dias no futuro. Nada foi alterado. |
not_found | 4 | Nenhum alerta nem silenciamento do projeto tem este id. Um alerta resolvido some após a retenção de eventos do plano, e um silenciamento assim que termina. |
alerts list#
Listar os alertas deste projeto, os abertos primeiro.
alerts list [--state open|resolved|all] [--screen-id ID] [--before CURSOR] [--limit N]
[--format json|csv|xlsx|pdf] [--output FILE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--state STATE | string | não | open | open, resolved ou all. |
--screen-id ID | string | não | tela inteira | Somente os alertas desta tela. |
--before CURSOR | string | não | a primeira página | O next_cursor da página anterior. |
--limit N | integer | não | 100 | Linhas por página, de 1 a 200. |
--format FORMAT | string | não | json | json, ou csv, xlsx ou pdf para gravar os alertas em um arquivo em vez de exibi-los. |
--output FILE | caminho | não | ./alerts.FORMAT | O arquivo a gravar com --format csv, xlsx ou pdf. Não com json. |
screenrig alerts listscreenrig alerts list --state all --screen-id scr_01EXAMPLESCREEN00000000screenrig alerts list --state all --format csv --output alerts.csvCada linha é um alerta: id (alr_…), screen_id, screen_name, condition, state (open ou resolved), since (quando a condição começou), resolved_at depois de resolvido, acknowledged_at e acknowledged_by (kind, id e name da pessoa ou do agente) depois de reconhecido, snoozed_until enquanto adiado, muted e attention. Os alertas abertos vêm primeiro, os mais recentes primeiro. counts traz open e attention do projeto inteiro, seja qual for a página e os filtros, e next_cursor é null no final.
Com --format csv, xlsx ou pdf, o arquivo contém todos os alertas que os filtros selecionam, até 50.000 linhas, e o envelope traz o path, os bytes e o sha256 dele. Relatórios e exportações descreve os arquivos.
alerts show#
Mostrar um alerta.
alerts show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do alerta alr_. |
screenrig alerts show alr_01EXAMPLEALERT000000O envelope é o alerta, no formato de uma linha de alerts list.
alerts ack#
Reconhecer um alerta aberto: alguém está cuidando dele.
alerts ack <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do alerta alr_. |
screenrig alerts ack alr_01EXAMPLEALERT000000O alerta continua aberto e não precisa de atenção até ser resolvido; acknowledged_by nomeia a pessoa ou o agente e acknowledged_at o horário. O aviso de uma notificação ainda em tempo de espera é ignorado. Reconhecer de novo substitui o reconhecimento ou adiamento anterior. Um alerta resolvido retorna alert_not_open (saída 5). O envelope é o alerta, e o registro de eventos grava screen.alert_acknowledged.
alerts snooze#
Reconhecer um alerta aberto até um horário, para que ele volte a precisar de atenção nesse momento.
alerts snooze <id> (--for DURATION | --until TIME)| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do alerta alr_. |
--for DURATION | duração | um de --for ou --until | nenhum | Por quanto tempo adiar a partir de agora: uma duração como 30m, 4h ou 2d, no máximo 29d23h59m. |
--until TIME | string | um de --for ou --until | nenhum | Quando o adiamento termina: um instante RFC 3339 com segundos e um deslocamento, como 2026-11-01T09:00:00-07:00, no máximo 30 dias à frente. |
screenrig alerts snooze alr_01EXAMPLEALERT000000 --for 4hsnoozed_until é o horário em que o adiamento termina. Até lá, o alerta não precisa de atenção e o aviso de uma notificação ainda em tempo de espera é ignorado, como em alerts ack; se o alerta ainda estiver aberto nesse horário, ele volta a precisar de atenção. Um alerta resolvido retorna alert_not_open (saída 5).
alerts mute#
Silenciar telas para manutenção.
alerts mute [--screen-id ID]... [--tag TAG]... (--for DURATION | --until TIME) [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--screen-id ID | string | pelo menos um de --screen-id, --tag | nenhum | Um scr_ id de tela. Repita-o, ou liste ids separados por vírgula; no máximo 100. |
--tag TAG | string | pelo menos um de --screen-id, --tag | nenhum | Cada tela com esta tag. Repita, ou liste tags separadas por vírgula; no máximo 16. |
--for DURATION | duração | um de --for ou --until | nenhum | Por quanto tempo o silenciamento dura a partir de agora: uma duração como 30m, 4h ou 2d, no máximo 29d23h59m. |
--until TIME | string | um de --for ou --until | nenhum | Quando o silenciamento termina: um instante RFC 3339 com segundos e um deslocamento, como 2026-11-01T09:00:00-07:00, no máximo 30 dias à frente. |
--note TEXT | string | não | nenhum | Por que as telas estão silenciadas, para as pessoas que veem o silenciamento; no máximo 200 caracteres. |
screenrig alerts mute --tag Lobby --for 2h --note "Rewiring the lobby displays"O envelope é o silenciamento: id (amt_…), screen_ids, tags, until, note, created_by e created_at. Os alertas de cada tela coberta passam a indicar muted imediatamente, inclusive os que já estavam abertos. Uma organização tem no máximo 50 silenciamentos vigentes em todos os seus projetos; mais um é alert_mute_limit_reached (saída 5), e um silenciamento que terminou não conta mais. Depois de um silenciamento interrompido ou ambíguo, leia alerts mutes primeiro: repetir o mesmo comando com --until em até 24 horas retorna o mesmo silenciamento, enquanto repetir com --for conta a partir de um novo momento e cria outro.
alerts mutes#
Listar os silenciamentos que não terminaram, o que termina primeiro vem antes.
alerts mutesscreenrig alerts mutesCada linha é um silenciamento como alerts mute o imprime.
alerts unmute#
Encerrar um silenciamento agora.
alerts unmute <mute-id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<mute-id> | string | sim | nenhum | O id do silenciamento amt_. |
screenrig alerts unmute amt_01EXAMPLEMUTE0000000Os alertas abertos dessas telas voltam a precisar de atenção, e os avisos seguintes não são mais ignorados por silenciamento. Um silenciamento que terminou retorna not_found (saída 4). O registro de eventos grava alert_mute.deleted.
Webhooks
Um webhook envia os próprios eventos deste projeto, como POSTs assinados, para um endpoint HTTPS que você executa, para que um evento correspondente possa acordar um agente, um bot ou seu próprio serviço. Cada evento correspondente chega como o mesmo objeto JSON que events list retorna. Um webhook é uma notificação em sua forma original: conta para o limite de 50 notificações da organização, e notifications list o mostra. Os trabalhos novos usam notifications, que também envia e-mail e avisos de tela.
Cada tentativa de entrega é gratuita e não conta no limite por hora de solicitações de agente da organização.
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 responde webhook_limit_reached (saída 5) quando a organização já tem 50 notificações, enquanto notifications create responde notification_limit_reached. Uma URL recusada é webhook_url_rejected (saída 8) nos dois casos.
--url aceita uma URL https na porta 443 ou 8443 cujo host resolve apenas para endereços públicos da Internet, verificada como em notifications create; uma URL que traga credenciais ou um fragmento # é recusada localmente com saída 2. --event-types aceita de 1 a 32 tipos exatos separados por vírgula, como screen.online, ou prefixos terminados em .*, como screen.*. --description tem no máximo 200 caracteres. --disabled cria o webhook desativado. webhooks update --enable limpa o estado de falha e começa no evento atual, então nada do que aconteceu enquanto ele esteve desativado é enviado, e --disable faz as entregas pendentes falharem com webhook_disabled. --expect-rev protege a revisão (revision_conflict, saída 6).
webhooks create e webhooks rotate-secret imprimem o segredo de assinatura uma só vez em data.secret com o aviso webhook_secret_shown_once; após uma chamada interrompida ou ambígua, execute novamente o mesmo comando em até 24 horas para receber a mesma resposta de volta. A entrega começa com o primeiro evento depois que o webhook é criado. webhooks test enfileira uma entrega webhook.test apenas para este webhook; funciona em um webhook desativado, é tentada uma vez sem novas tentativas, é medida como qualquer entrega e é limitada a 20 por minuto por organização (rate_limited, saída 7). webhooks list mostra as notificações webhook deste projeto, da mais antiga para a mais recente, e uma credencial somente leitura recebe cada url vazio com url_redacted true. webhooks deliveries lê o registro começando pelo evento mais recente, de 1 a 200 linhas por página (padrão 50), com next_cursor (whc1_…) como --before; o state de uma linha é pending, succeeded ou failed, com last_status e uma classe last_error fixa. Verifique uma entrega como descrito em Verificar uma entrega.