AutomatizeEtapa 4 de 5

Saiba das falhas: alertas

Os alertas avisam que algo quebrou sem você abrir a página Execuções. Eles ficam na página Alertas do projeto, em três abas: Canais dizem para onde a mensagem vai, Regras dizem o que deve alertar e quando, e Histórico lista cada mensagem enviada. Nesta lição você conecta um canal, cria uma regra para execuções que rodam sozinhas, quebra um script de propósito e vê chegarem as mensagens Falhou e Voltou a funcionar.

9 min de leituraAntes: Rode num agendamentoAbrir no Waiso
O que você vai aprender
  • Conectar um canal de Slack, Teams, Discord, e-mail ou webhook e enviar um teste
  • Criar uma regra: o que alerta, em quais resultados, para quais canais
  • Entender o agrupamento, o Voltou a funcionar e a saúde de entrega de um canal
  • Verificar a assinatura de um webhook no seu próprio servidor

Como os alertas funcionam

O Waiso confere as execuções terminadas a cada poucos segundos. Toda execução de script, flow ou robô do AI Scraper iniciada no nível de cima é comparada com as regras ativas do projeto; um agendamento que estava na hora e não conseguiu iniciar também conta. Uma correspondência vira uma mensagem em cada canal da regra — no máximo uma por canal por evento, quantas regras combinarem.

AlertasSeja avisado quando um script, flow, agendamento ou robô falhar — sem abrir Execuções.
Adicionar canalNova regra
Regras3Canais2Histórico
Qualquer falhaTudo · Falhou, Voltou a funcionarCanais#opsAgrupar15 minAtiva
Flow da campanhacampaign · FalhouCanaisops@shop.devAgruparDesligadoAtiva
Rotinas noturnasSó o que roda sozinho · FalhouCanaisTeamsAgrupar1 hAtiva
A página Alertas: as abas Regras, Canais e Histórico, e o painel Visão geral com as regras ativas e os canais que não estão entregando.

A mensagem traz o item, a primeira linha do erro, o passo que falhou num flow, o que iniciou a execução (um agendamento, um token de API, um gatilho de evento) e um link para ela — nunca as entradas, as saídas ou as variáveis. Os passos de um flow alertam como o flow, não um a um, e uma execução cancelada nunca alerta.

Adicione um canal

  1. Onde

    Em Alertas, abra Canais e clique em Adicionar canal (numa página vazia, Adicionar canal no centro). Para onde vão os alertas? — Slack, Microsoft Teams, Discord, E-mail ou Webhook. O tipo não muda depois de salvo.

  2. Detalhes

    Dê um Nome e o endereço. Slack: a URL de um Incoming Webhook. Teams: a URL de um webhook do Workflows. Discord: configurações do canal → Integrações → Webhooks. E-mail: os endereços em Enviar para, enviados pelo provedor de e-mail do projeto. Webhook: qualquer endereço https:// público. As URLs ficam criptografadas e nunca mais aparecem.

  3. Salve e teste

    Clique em Salvar canal e depois em Enviar teste na linha dele: Teste entregue em #ops-alerts. — ou o motivo de não ter sido. Num webhook, a etapa seguinte mostra o segredo de assinatura uma única vez: copie e clique em Já copiei.

Crie uma regra

Em Regras, clique em Nova regra. O assistente tem quatro etapas — O quê, Quando, Onde, Revisar — e dá para voltar a qualquer uma.

EtapaOpçõesPadrão
O que deve alertar?Tudo · Só o que roda sozinho (execuções iniciadas por agendamento, chamada de API ou evento — não as que uma pessoa inicia no editor) · Itens escolhidos (scripts e flows que você escolhe)Tudo
Quando: quais resultados?Falhou · Voltou a funcionar (a primeira execução boa depois de falhas) · Não iniciou (um agendamento estava na hora mas não conseguiu iniciar)Falhou + Voltou a funcionar
Para onde enviar?Um ou mais canais, e Agrupar repetições: 5, 15 ou 60 min15 min
RevisarUm Nome e o resumo do que a regra vai fazer; Salvar regra—

Cada regra tem um botão Ativa na linha; uma regra pausada não envia nada. Excluir um canal usado por regras pausa toda regra que ficar sem canal, e a página diz quantas.

Agrupamento e Voltou a funcionar

A primeira falha de um item alerta na hora (Falhou: nightly-import). As falhas seguintes do mesmo item são contadas, e no máximo uma vez por janela de agrupamento sai um aviso — Ainda falhando: nightly-import falhou mais 7 vezes desde o último alerta. A primeira execução boa depois das falhas envia Voltou a funcionar, com quanto tempo ficou quebrado. Assim um agendamento que falha a cada minuto a noite toda vira poucas mensagens, não centenas.

Uma execução agendada que falha — o tipo de execução que uma regra Só o que roda sozinho acompanha.

Histórico e saúde de entrega

Histórico lista cada mensagem com o tipo (Falhou, Continua falhando, Voltou a funcionar, Não iniciou, Teste, Resumo), o status (Entregue, Enviando, Falhou, No resumo) e Abrir execução. Uma entrega que falha é tentada de novo após 30, 90 e 180 segundos. Cada canal mostra a saúde de entrega: Ainda não usado, Entregando, Última tentativa falhou ou Não entrega depois de as três últimas entregas falharem — o painel Visão geral conta esses.

O canal webhook

Um canal webhook recebe um POST JSON por mensagem, assinado com X-Waiso-Signature: t=<segundos unix>,v1=<hex>, onde v1 é hmac_sha256(segredo, "<t>.<corpo>") sobre o corpo bruto. Confira antes de confiar na chamada, e recuse carimbos de tempo antigos para que uma requisição capturada não possa ser repetida.

Saída esperadaO corpo de uma mensagem Falhou
{
  "type": "failed",
  "project": {
    "id": "p_7Hq2…",
    "name": "Reports"
  },
  "item": {
    "kind": "script",
    "id": "…",
    "name": "nightly-import"
  },
  "error": "RuntimeError: the upstream file was empty",
  "step": null,
  "startedBy": "schedule 'nightly'",
  "count": 1,
  "brokenForSeconds": null,
  "runId": "…",
  "runUrl": "https://<your-waiso-address>/projects/reports/runs?run=…",
  "at": "2026-10-16T03:00:04Z"
}
verify_alert.py
Isto roda no SEU servidor, o que recebe o webhook — não dentro do Waiso.
import hashlib, hmac, time

def verify(secret: str, header: str, body: bytes, max_age: int = 300) -> bool:
    """header = the X-Waiso-Signature value: "t=1760000000,v1=ab12…"."""
    parts = dict(item.split("=", 1) for item in header.split(","))
    t, v1 = parts.get("t", ""), parts.get("v1", "")
    if not t.isdigit() or abs(time.time() - int(t)) > max_age:
        return False                      # too old: a replayed request
    expected = hmac.new(secret.encode(), f"{t}.".encode() + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, v1)

Limites

  • Os endereços de webhook precisam ser URLs https:// públicas (Esse endereço não é permitido: use uma URL https:// pública.). Cada envio é conferido de novo, redirecionamentos não são seguidos e um envio expira em 10 segundos.
  • Um canal envia no máximo 20 mensagens por minuto; o restante daquele minuto vira um único resumo E mais 12 alertas neste minuto.
  • Um canal de e-mail precisa do provedor de e-mail do projeto (Adicione um em Integrações → E-mail.).
  • Só admins e quem criou o projeto podem mudar os alertas.
4 / 5