AutomatizeEtapa 2 de 5

Inicie com um evento: e-mail, banco, MQTT

Um gatilho de evento inicia o seu script ou flow publicado quando algo acontece fora do Waiso: chega um e-mail, uma linha muda num banco PostgreSQL ou chega uma mensagem MQTT. Cada evento vira uma execução, os campos chegam como entradas do seu main, e antes de salvar o formulário mostra exatamente qual parâmetro vai receber o quê. Nesta lição você adiciona um, testa sem esperar um evento real e lê o histórico.

O que você vai aprender
  • Adicionar um gatilho de e-mail, mudança no banco ou MQTT pela aba Gatilhos
  • Ler O que seu código recebe antes de salvar e corrigir um main que seria recusado
  • Testar um gatilho com um evento de exemplo e ler os últimos 20 eventos
  • Saber o que cada tipo precisa e onde eventos podem se perder ou repetir

Como um evento vira uma execução

Um listener roda dentro dos workers do Waiso — um listener ativo por gatilho. Ele só registra o que chega; mais ou menos a cada segundo a API transforma cada evento registrado numa execução da versão publicada do item, com as mesmas verificações de um agendamento: créditos, entradas e o limite de execuções ao mesmo tempo do item. Todo evento tem uma chave única, então o mesmo e-mail, mudança ou mensagem é registrado uma vez, mesmo que o listener o veja duas vezes.

Adicionar gatilho de evento
E-mail recebidoMudança no bancoMensagem MQTT
O Waiso confere a caixa a cada 20 segundos. Cada e-mail novo que combina inicia uma execução; os que já estavam lá, nunca.Como consigo isso?
Conexão criptografada (TLS)
Guardada criptografada e nunca mais mostrada.
O que seu código recebefromtosubjecttexthtmldateattachmentseventsubjectrecebe o subject do eventoattachmentsrecebe o attachments do evento
CancelarAdicionar gatilho
O diálogo Adicionar gatilho de evento: escolha o tipo, preencha a conexão e leia O que seu código recebe antes de salvar.
TipoInicia uma execução quandoComo o Waiso escuta
E-mail recebidoUm e-mail novo que combina chega na pastaIMAP, conferido a cada 20 segundos
Mudança no bancoUma linha é inserida, atualizada ou excluída nas tabelas escolhidasReplicação lógica do PostgreSQL
Mensagem MQTTChega uma mensagem num tópico que combinaUma assinatura no broker, em segundos

Adicione e teste um gatilho

  1. Abra Eventos

    Publique o item antes — cada evento executa a versão publicada. Na aba Gatilhos, em Eventos, clique em Adicionar gatilho de evento.

  2. Escolha o tipo e preencha

    Escolha E-mail recebido, Mudança no banco ou Mensagem MQTT, dê um Nome e preencha os campos (próximas seções). E-mail e MQTT têm um guia passo a passo ao lado do formulário — Gmail, Outlook / Microsoft 365, outros servidores IMAP e um broker.

  3. Leia O que seu código recebe

    O painel lista cada parâmetro do main publicado e o que ele vai receber. Se todo evento for ser recusado, ele avisa, e Mostrar um main que recebe isso oferece um main para Copiar ou Inserir no editor (uma mudança para revisar no editor — publique depois).

  4. Salve e teste

    Clique em Adicionar gatilho. Clique na nova linha para abrir e depois em Testar: o alvo roda uma vez com um evento de exemplo, marcado como Teste na lista. Um teste não é um evento real, então a linha de saúde continua dizendo Escutando · aguardando o primeiro evento real.

O que seu código recebe

Uma regra, a mesma no formulário e na execução: um parâmetro de script chamado event recebe o evento inteiro e mais nada; fora isso, cada parâmetro com o nome de um campo do evento recebe esse campo. Um flow recebe cada campo como uma entrada de mesmo nome, mais event com tudo junto. Um parâmetro obrigatório que nenhum campo preenche faz todo evento ficar Não executou; um parâmetro com valor padrão que nenhum campo preenche fica com o padrão.

TipoCampos
E-mailfrom, to, cc, subject, text, html, date, messageId, attachments
Mudança no bancotable, schema, operation, new, old, committedAt
MQTTtopic, payload, payloadText, qos, retain, receivedAt

Em Python o remetente de um e-mail é from, uma palavra reservada, então leia e-mails por event; em TypeScript e JavaScript vale o mesmo para uma mudança de linha, porque new é reservada. Cada anexo é {name, size, contentType, s3Key, storage, s3}, guardado no armazenamento do projeto — passe direto para waiso.s3.download.

invoice-mail.py
import waiso

def main(event: dict):
    # event: from, to, cc, subject, text, html, date, messageId, attachments
    pdfs = [a for a in event["attachments"] if a["contentType"] == "application/pdf"]
    sizes = [len(waiso.s3.download(a)) for a in pdfs]
    return {"from": event["from"], "subject": event["subject"], "pdfs": len(pdfs), "bytes": sum(sizes)}

Teste com o evento de verdade

Depois que um gatilho recebe um evento, o cartão de Entradas do editor oferece Usar o último evento — Mensagem MQTT, há 2 min (ou Usar o evento de teste): um clique preenche todas as entradas a partir dele, pela mesma regra. Para um parâmetro de objeto ou lista, Usar exemplo preenche um valor no formato que o seu código lê.

As opções de cada tipo

E-mail recebido (IMAP)

Servidor IMAP, Porta, Conexão criptografada (TLS), Usuário, Senha (guardada criptografada e nunca mais exibida; Gmail e Outlook pedem uma senha de app), Pasta e, se quiser, Remetente contém e Assunto contém. Depois que a execução começar: Deixar, Marcar como lido ou Mover para pasta. Os e-mails que já estão na pasta nunca disparam, e mudar o servidor, a conta ou a pasta recomeça a leitura daquele momento. Mensagens acima de 25 MB rodam sem os anexos.

Mudança no banco (PostgreSQL)

Escolha uma Conexão PostgreSQL das integrações do projeto, as Tabelas e as Mudanças (Inserção, Atualização, Exclusão). O Waiso lê o registro de mudanças do banco por replicação lógica: ao salvar ele cria uma publicação e um slot de replicação (Preparando o banco…), nunca mexe nas suas tabelas e recupera as mudanças feitas enquanto ficou fora do ar por pouco tempo. Excluir o gatilho remove os dois.

  • wal_level = logical — senão o salvamento é recusado: Este banco não registra mudanças para replicação. Defina wal_level = logical … e reinicie.
  • Um usuário de conexão com REPLICATION (ALTER ROLE … WITH REPLICATION) que seja dono das tabelas — senão O usuário da conexão não pode ler o registro de mudanças.
  • Um slot de replicação livre (max_replication_slots). Os valores old de uma atualização só chegam depois de ALTER TABLE … REPLICA IDENTITY FULL.

Mensagem MQTT

URL do broker, Tópicos (+ e # permitidos) e Entrega: No máximo uma vez (QoS 0) ou Ao menos uma vez (QoS 1). payload é a mensagem lida como JSON, ou o próprio texto quando não é JSON. Payloads acima de 256 KB vão para o armazenamento do projeto.

Saúde, histórico, pausa

Clique num gatilho para abri-lo. A linha de saúde diz Escutando · último evento há 3 min, ou o problema em palavras: Não foi possível entrar, Não foi possível conectar, Pasta não encontrada, O slot de replicação sumiu — exclua este gatilho e adicione de novo. Abaixo, Últimos 20 eventos (guardados por 7 dias), cada um marcado como Executou, Não executou (com o motivo: não publicado, uma entrada obrigatória faltando…) ou Aguardando. Editar altera no lugar (um gatilho de mudança no banco mantém conexão, tabelas e mudanças — exclua e adicione outro para mudar isso); o botão da linha é Pausar gatilho / Retomar gatilho. Na página Execuções, uma execução iniciada por evento mostra um selo E-mail, Mudança no banco ou MQTT.

Limites e lacunas

  • Eventos e anexos ficam guardados por 7 dias e depois são apagados.
  • Mensagens MQTT enviadas com o gatilho pausado se perdem, a menos que você ative Guardar mensagens enquanto pausado ou reconectando (sessão persistente), que faz o broker guardar as mensagens QoS 1 para ele.
  • Um gatilho de mudança no banco pausado mantém o slot, e o banco guarda cada mudança para ele — depois de alguns dias a linha avisa. Exclua os gatilhos de que não precisa mais.
  • Servidores em endereços privados são recusados (Endereço não permitido) a menos que o administrador libere.
2 / 5