# Workflows

> Automações por gatilho. Quando algo acontece (alguém entra, compra, conclui um curso, ou passa N dias sem entrar), cada pessoa segue um caminho de esperas, condições, e-mails da biblioteca, mensagens, comentários, reações, tags, grupos, posts no Slack e chamadas a outros sistemas, no tempo dela. Editor em canvas, variáveis entre os blocos, Chamar webhook com as Variáveis e chaves, fim com sucesso ou erro, taxa de sucesso, envio adiado pela cota, simulação, histórico, limites, quem assina, com que papel os passos agem e os 9 modelos. Também os blocos de IA Claude e ChatGPT, com a chave de API da própria comunidade, os Limites de IA e as ações de post, certificado, reconhecimento, chat, 1:1 e PDI.

Um **workflow** é uma automação por gatilho: quando algo acontece com uma pessoa (ela entra na comunidade, compra, conclui um curso, passa 30 dias sem entrar), ela entra num caminho que você desenha, com esperas, condições e ações, e segue esse caminho no tempo dela. É a régua de boas-vindas, o lembrete de quem sumiu, o parabéns do curso, sem ninguém da equipe apertar nada.

A Memberfy ajuda o RH a manter todo mundo engajado: os mesmos workflows lembram de uma avaliação pendente, de uma 1:1 sem registro ou de uma meta sem check-in.

**Onde fica:** **Administração › Workflows**. O proprietário e o administrador criam, editam, ligam e pausam; o moderador e o financeiro veem, simulam e acompanham o histórico; o membro não vê a área.

## Como funciona

### O gatilho

Cada workflow começa num **gatilho só**, um bloco do desenho arrastado da categoria **Gatilhos**. Cada família tem o seu bloco (**Membros**, **Compras**, **Assinaturas**, **Eventos**, **Cursos**, **Certificados**, **Badges**, **Níveis e pontos**, **Formulários**, **Pesquisas**, **Chamadas de trabalhos**, **Publicações e comentários**, **Votações**, **Downloads**, **Espaços**, **Mensagens**, os de RH, **Tempo**, **Manual** e **Webhook**), na ordem dos mais usados, e o evento é escolhido no painel do bloco, em **Dispara quando**; trocar o evento não troca o bloco. Buscar um evento (*"assinatura cancelada"*) acha o bloco dele e já cria o bloco nesse evento. No desenho, o bloco mostra a família em cima e o evento embaixo. Com um gatilho no desenho, a categoria **Gatilhos** some do seletor; para outro tipo de gatilho, troque o bloco.

**Quando algo acontece**, por exemplo:

| Assunto | Gatilhos |
|---|---|
| Membros | **Novo membro na comunidade** (cadastro, convite aceito, compra, equipe, empresa ou importação, com a **Origem**; não é login), alguém sai, muda de papel, ganha ou perde uma tag, entra ou sai de um grupo, muda um campo do perfil; **Alguém volta depois de N dias sem acessar** (com **Ficou pelo menos** 7 dias ou mais; vale o acesso pelo app ou pelo assistente) |
| Compras e assinaturas | Uma compra é concluída (com o filtro **Só a primeira compra**: a primeira compra da pessoa, de qualquer produto, gratuitas incluídas) ou reembolsada; alguém começa uma compra, abandona o carrinho, ou um carrinho é recuperado; assinatura começa, é renovada, muda de plano, fica em atraso, tem o teste grátis acabando, é cancelada ou termina |
| Conteúdo e espaços | Alguém publica, comenta ou reage; visita um espaço pela primeira vez; ganha acesso a um espaço; o ciclo de vida de publicações, espaços e downloads (ver [Eventos do ciclo de vida](#eventos-do-ciclo-de-vida)) |
| Cursos e eventos | Matrícula, aula ou curso concluído, quiz aprovado ou não, certificado emitido; inscrição, ingresso recebido, inscrição cancelada, vaga da lista de espera, check-in feito ou desfeito |
| Badges | **Recebeu badge** e **Perdeu badge**, com o filtro **Badge** (vazio: qualquer badge) e a origem (**À mão**, **Curso ou evento**, **Workflow**, **Importação**). Ver [Badges](/membros/engajamento#badges) |
| Níveis e pontos | **Subiu de nível**, **Desceu de nível** (com o **Motivo**) e **Atingiu N pontos**. Ver [Níveis e pontos](#niveis-e-pontos) |
| Outros módulos | Formulário, pesquisa e proposta respondidos ou decididos, tópico de votação, arquivo baixado, entrada e saída no ponto, reservas, reconhecimento e feedback recebidos, e a [DM recebida](#dm-recebida). O evento de reconhecimento recebido traz o tipo do reconhecimento (`type`: `APPRECIATION`, `WELCOME`…). |
| Pessoas (RH) | Um ciclo de avaliação abre, alguém envia uma avaliação, um resultado é liberado; uma 1:1 é registrada; um resultado-chave recebe check-in ou fica em risco; um PDI é aprovado; uma rodada de pesquisa abre |

A **Origem** de **Novo membro na comunidade** inclui **Veio de aprovação**, para quem entrou pelo [cadastro com aprovação](/membros/cadastro-e-entrada#cadastro-com-aprovacao) (`member.joined` com `source: approval`). É o "cadastro aprovado": um workflow de boas-vindas com esse filtro dispara quando a equipe aprova o pedido, não quando a pessoa pede. O pedido em si, e a recusa, não disparam workflow nem webhook.

Cada gatilho aceita o seu filtro: o produto, o curso, o evento, o espaço, o grupo, a tag, o campo, o ciclo ou a pesquisa (vazio: qualquer um). O painel do gatilho (**Entrada no workflow**) junta o filtro, [quantas vezes a pessoa entra](#quantas-vezes-a-pessoa-entra), o **Limite de frequência** e a descrição.

**Tempo (todo dia, por data)**: uma passada por dia, a partir das 9h no fuso da comunidade, para quem cumpre a regra naquele dia: *Alguém está há N dias sem acessar*, *Todo dia, para todos*, *Avaliação pendente há N dias*, *Avaliação vence em N dias*, *1:1 daqui a N dias*, *1:1 sem registro há N dias*, *Combinado de 1:1 atrasado há N dias*, *Resultado-chave sem check-in há N dias*, *Ciclo de metas termina em N dias*, *Ação do PDI atrasada há N dias* e *Pesquisa sem resposta há N dias*. Cada pessoa entra uma vez pelo mesmo fato. No gatilho *Alguém está há N dias sem acessar*, ao ligar o workflow pela primeira vez, **Incluir quem já está há mais de N dias sem entrar** coloca também quem já passou desse ponto: a janela mostra quantas pessoas são e pede a confirmação, e elas entram uma vez cada, no ritmo do limite diário.

**Manual (pessoas escolhidas):** a equipe inicia o workflow para quem escolher. Com o workflow ligado, **Executar agora** pede as **Pessoas** ou um **Público** (como o das campanhas), mostra antes quantas entram, quem fica de fora (descadastradas, com e-mail inválido ou que denunciaram) e em quantos dias os e-mails saem pelo limite diário, e pede a confirmação (*"Entendo que N pessoas vão receber os passos deste workflow agora"*). Confirmar duas vezes não inicia duas vezes. Até 20 mil pessoas por vez, em lotes.

**Agendado:** todo dia, toda semana (nos **Dias da semana**) ou todo mês (no **Dia do mês**, de 1 a 28), no **Horário** escolhido no fuso da comunidade, **Para quem** você definir. Ligar pede a mesma confirmação dos gatilhos por data, e um dia com o envio da comunidade [suspenso](/notificacoes/reputacao-de-envio) é pulado.

**Webhook recebido:** outro sistema chama o endereço do gatilho e inicia o workflow para a pessoa do corpo da chamada. Ver [Webhook de entrada](/integracoes/webhook-de-entrada).

**Chamado por outro workflow:** o workflow começa quando outro o chama pelo passo **Chamar workflow**, para a mesma pessoa. Ver [Ações da plataforma e outros workflows](#acoes-da-plataforma-e-outros-workflows).

### Os passos

| Passo | O que faz |
|---|---|
| **Esperar** | De 5 minutos a 365 dias |
| **Condição (se / senão)** | Divide o caminho em **Sim** e **Não** por regras, lidas na hora do passo: tags (várias de uma vez, com *tem qualquer uma das tags*, *tem todas as tags* ou *não tem nenhuma das tags*), grupo, campo do perfil, último acesso, curso concluído ou em andamento, produto comprado, carrinho abandonado, acesso e visita a um espaço, inscrição e presença num evento, nível e pontos (grupo **Engajamento**) e a regra [Variável](#condicao-variavel). **Todas as regras valem** ou **Pelo menos uma regra vale**. As regras aparecem em frases, como *"Se a pessoa tem a tag VIP e não entra há mais de 30 dias"* |
| **Enviar e-mail** | Um e-mail da [biblioteca](/notificacoes/campanhas-de-email#e-mails-e-disparos); cada pessoa recebe a versão no idioma dela, sem ela, a principal |
| **Mandar mensagem (DM)** | Uma mensagem no [chat](/membros/mensagens) em nome de alguém da equipe (ver [Em nome de quem](#em-nome-de-quem)) |
| **Comentar no item** e **Reagir ao item** | Em nome de alguém da equipe, sobre o item do gatilho: o post, o comentário, a reação ou a inscrição da pessoa |
| **Adicionar ou remover tag** e **Adicionar a um grupo** | Organiza a pessoa |
| **Postar no Slack** | Uma mensagem no canal da instalação do [Slack](/integracoes/slack) da comunidade |
| **Enviar SMS** e **Enviar WhatsApp** | Um aviso no celular da pessoa, na categoria **Mensagens**: no SMS, um texto de até 300 caracteres; no WhatsApp, um modelo aprovado com os campos preenchidos (ver [Enviar SMS e Enviar WhatsApp](#enviar-sms-e-enviar-whatsapp)) |
| **Chamar webhook** | Uma chamada HTTPS para outro sistema (um CRM, uma planilha, o n8n), com as chaves guardadas em **Variáveis e chaves** (ver [Chamar webhook](#chamar-webhook)) |
| **Claude** e **ChatGPT** | Pedem um texto ou um JSON à IA, com a chave de API da própria comunidade, na categoria **IA** (ver [Blocos de IA](#blocos-de-ia-claude-e-chatgpt)) |
| **Ações da plataforma** | Mudar papel, ajustar pontos, conceder ou remover badge, publicar post, emitir certificado, reconhecer, bloquear no chat, agendar 1:1, adicionar ação ao PDI, inscrever num evento, matricular num curso, dar acesso por cortesia, mandar um aviso no app; cada ação é um bloco, em **Pessoas**, **Conteúdo** ou **Mensagens** (ver [Ações da plataforma e outros workflows](#acoes-da-plataforma-e-outros-workflows)) |
| **Chamar workflow** | Roda outro workflow para a mesma pessoa e espera ele terminar, na categoria **Fluxo** |
| **Enquanto (repetir)** | Repete um trecho enquanto as regras valem, até um máximo de 1 a 10 vezes (padrão 3). Todo caminho do trecho precisa de uma espera de pelo menos 1 dia |
| **Registrar log** | Anota uma linha na execução (ver [Registrar log](#registrar-log)) |
| **Fim: sucesso** e **Fim: erro** | Onde cada caminho termina (ver [Como um workflow termina](#como-um-workflow-termina)) |

Todo bloco tem um **Nome do bloco**, para reconhecê-lo no desenho e achar as variáveis dele no **Inserir variável**. Os textos aceitam as [variáveis](#variaveis) do gatilho e dos passos anteriores. O que um workflow faz nunca dispara outro workflow; a única forma de um workflow iniciar outro é o passo **Chamar workflow**.

### O editor

O **Desenho** ocupa a altura inteira da tela:

- **A barra de ícones** à esquerda abre os blocos por categoria (**Gatilhos**, **Fluxo**, **Mensagens**, **Pessoas**, **Conteúdo**, **Integrações**, **IA** e **Fim**), com busca (**Buscar bloco…**, atalho `/`); cada categoria tem a sua cor. As categorias abrem e fecham como um acordeão (clique, `Enter` ou espaço), mostram quantos blocos têm quando fechadas, e o navegador lembra quais você deixou fechadas; uma busca abre as que têm resultado. Arraste um bloco para o desenho ou clique para adicioná-lo depois do bloco selecionado.
- **Barras laterais arrastáveis:** arraste a borda da barra dos blocos ou do painel do bloco para mudar a largura, e um duplo clique volta ao padrão. A largura fica guardada no navegador.
- **O "+" dos dois lados de cada bloco** é o ponto de ligação. **Clicar** abre o seletor de blocos (depois da saída, ou antes da entrada); **arrastar** puxa um fio; **soltar** um bloco do desenho, um bloco da barra ou a ponta de um fio sobre um **+** conecta. O **+** no meio de uma ligação coloca um passo no meio.
- **Conexão recusada diz o porquê**, num aviso no desenho: *"O gatilho não recebe conexões: ele é sempre o começo."*, *"Um bloco não pode levar a ele mesmo."* e *"Isso criaria um laço. Para repetir passos, use o bloco "Enquanto (repetir)"."*
- **Um clique num bloco** abre o painel dele, com o **Nome do bloco**, os campos e as escolhas reais da comunidade (e-mails, tags, grupos, cursos, produtos, espaços e eventos, com busca). Um passo fora de qualquer caminho fica marcado como **Solto**, e um passo com erro, marcado em vermelho.
- **Menu de contexto** (botão direito): **Abrir**, **Duplicar**, **Excluir**, **Adicionar bloco depois**, **Desconectar**, **Colar**.
- **Barra de ferramentas e minimapa:** **Aproximar**, **Afastar**, **Ver tudo**, **Organizar**, **Desfazer**, **Refazer** e um minimapa do desenho inteiro.
- **Atalhos do teclado:** apagar o que está selecionado, desfazer e refazer, copiar, colar e duplicar blocos, selecionar tudo, `Esc` para fechar o painel, salvar, `Shift` + clique para selecionar vários, arrastar no fundo para selecionar por área e `Ctrl/⌘` + rolar para o zoom. **Atalhos do teclado** mostra a lista.

Salvar um workflow ligado cria uma versão nova: ela vale para quem entrar daqui em diante, e quem já está no meio termina na versão em que começou.

### Simular, testar e estimar

- **Simular com uma pessoa** percorre o desenho com os dados de agora daquela pessoa (inclusive o que ainda não foi salvo) e destaca o caminho: *Seguiria pelo "sim"*, *Esperaria 3 dias*, *Enviaria "…"*. Nada é enviado.
- **Enviar teste para mim**, num passo de e-mail, manda o e-mail só para quem está logado.
- **Simular e me enviar os e-mails** faz a mesma simulação e manda os e-mails que a pessoa receberia, com o mesmo texto e as mesmas variáveis, **só para você**, com *[Teste]* no assunto. Eles não contam como envio (nem nos limites, nem na reputação de envio, nem no histórico) e não levam os links de descadastro da pessoa. Até 10 e-mails por simulação (num caminho com mais, saem os 10 primeiros) e 10 simulações com envio por hora. O botão aparece quando o desenho tem um passo **Enviar e-mail**, para quem pode simular, inclusive o moderador e o financeiro.
- **Ao ligar**, a janela mostra quantas pessoas dispararam o gatilho no último dia, em 7 e em 30 dias, para dar uma ideia do volume; num gatilho por data, quantas entrariam hoje. Só os próximos gatilhos entram: quem passou pelo gatilho antes não entra.

A simulação mostra o texto final de cada passo, com as variáveis preenchidas pela última vez em que o gatilho aconteceu para aquela pessoa nos últimos 30 dias (*"Textos preenchidos com a ocorrência de 20/10 desta pessoa."*), ou com os dados de exemplo, e diz como o caminho termina: *Terminaria em sucesso* ou *Terminaria em erro*.

Num bloco de IA, a simulação mostra o prompt preenchido e *"Perguntaria ao modelo … (a simulação não chama a IA)"*: ela não gasta tokens.

### Histórico

A aba **Histórico** tem a lista das execuções à esquerda e o detalhe da escolhida à direita (*"Escolha uma execução à esquerda para ver os passos."*). Em cima da lista, a barra de filtros: a busca por pessoa (pelo nome ou e-mail), o botão **Período** (**7 dias**, **30 dias** ou **Tudo**) e o resultado em pílulas (**Todas**, **Sucesso**, **Erro**…), numa linha só. Os filtros ficam no endereço da página.

O detalhe mostra o **Início**, o **Fim** e a **Duração**, os **Dados do gatilho** e, em cada passo, as **Entradas** e as **Saídas** de quando ele rodou: o texto enviado na DM, no comentário ou no Slack; o assunto e a entrega do e-mail (**Na fila**, **Enviado**, **Voltou (bounce)**…); numa condição, o que a pessoa tinha (*"Tem: VIP"*, *"Último acesso: …"*, *"Check-in em …"*); numa chamada de webhook, o status, a duração, o tamanho, as tentativas, as chaves usadas (só o nome) e de onde a chamada saiu (**IP fixo** ou **IP variável**). Cada execução mostra o desenho da versão em que rodou, e um passo que saiu do desenho aparece como *"Passo que não está mais no desenho"*. **Copiar ID** copia o código da execução, **Ver no desenho** mostra onde a pessoa está, e **Parar execução** (ou **Encerrar execução**) tira a pessoa do workflow. No perfil de cada membro, **Automações** lista os workflows por onde ela passou.

Num passo de IA, o detalhe mostra o **Modelo**, os **Tokens** (de entrada e de saída) e a duração; nunca a chave, o prompt nem a resposta.

**Excluir execução e Limpar histórico.** O proprietário e o administrador tiram execuções terminadas do histórico: **Excluir execução**, no menu **Mais ações** da execução (desativado enquanto ela roda: *"Pare a execução antes."*), ou **Limpar histórico**, com **Todas as execuções terminadas** ou **As que começaram antes de uma data**. A janela mostra antes quantas saem (*"12 execuções saem do histórico."*) e pede a confirmação (**Remover 12 execuções**); as que estão em andamento ficam. Elas saem da lista, dos números e da taxa de sucesso, mas continuam contando para [quantas vezes a pessoa entra](#quantas-vezes-a-pessoa-entra) (quem já passou por um workflow de **Uma vez só** não entra de novo) e para os limites. Fica o registro em [Logs](/membros/registros-de-atividades).

Pelo assistente: `delete_workflow_run` e `clear_workflow_runs`.

Cada execução aparece como **Sucesso**, **Erro**, **Cancelada**, **Pulada** ou **Em andamento**, com o bloco de fim e o motivo, e o filtro **Resultado** separa cada uma. Os passos podem ficar como **Erro** e **Aguardando cota** (*"Aguardando cota: adiado até 27/10, 9:00 por limite diário de envios da comunidade"*). O cartão **Como as execuções terminam** fica no alto: ver [Taxa de sucesso e aviso de erros](#taxa-de-sucesso-e-aviso-de-erros).

## A lista de workflows

Em cima da lista, o botão **Período** (**7 dias**, **30 dias** ou **Tudo**) e o estado em pílulas: **Todos**, **Ligado**, **Pausado** e **Rascunho**. Cada linha mostra o estado e o gatilho do workflow e os números do período escolhido:

![Administração › Workflows](/screens/workflows.png "O botão Período, o estado em pílulas e cada workflow com os números do período.")

| Número | O que conta |
|---|---|
| **Entraram** | Execuções que começaram no período |
| **Em execução** | Pessoas que estão no caminho agora (sempre contam, qualquer que seja o período) |
| **Terminaram** | Execuções que chegaram ao fim |
| **Erros** | Execuções que terminaram em erro |
| **Sucesso** | Sucesso ÷ (sucesso + erro), em porcentagem, com a cor da faixa; ao lado, a data da última execução |

As ações ficam na própria linha (ícones no computador, uma folha de opções no celular):

- **Ligar** (ou **Retomar**, num workflow pausado): pede a confirmação de consentimento quando o gatilho é por data ou agendado; se faltar algo no desenho, a lista diz o que é e abre o workflow para resolver.
- **Pausar**: ninguém novo entra e cada pessoa **congela** no passo em que está, inclusive numa espera; **Retomar** continua de onde parou.
- **Parar**: ninguém novo entra e as execuções em andamento são **canceladas** (*"Ninguém novo entra e 12 execuções em andamento serão canceladas."*). O workflow fica pausado e pode ser ligado de novo; quem foi cancelado não volta.
- **Execuções**: abre o histórico do workflow, com cada pessoa, o estado e onde está ou parou.

**Pausar ou Parar?** Pause para corrigir algo e continuar com as mesmas pessoas; pare quando o que está no caminho não deve mais sair.

**Workflows ligados por plano.** Acima da lista, *"3 de 10 workflows ligados"* (ou *"3 workflows ligados"*, quando o plano não tem limite). O plano define quantos workflows ficam ligados ao mesmo tempo: **3** no Starter, **10** no Growth, **30** no Business e **sem limite** no Scale (ver [Plano e extensões](/configuracoes/plano#workflows-ligados)). Com o limite cheio, ligar ou retomar outro mostra *"Seu plano permite 10 workflows ligados ao mesmo tempo, e 10 já estão ligados. Pause ou pare outro, ou mude de plano."*, com **Ver planos**. Pausar ou parar um libera a vaga. O SuperAdmin pode dar uma exceção a uma comunidade, e o novo limite vale na hora.

## Quantas vezes a pessoa entra

O campo **Quantas vezes a pessoa entra** tem **Uma vez só**, **De novo depois de alguns dias** e **Toda vez que o gatilho acontecer**, e só aparece quando o gatilho pode acontecer de novo para a mesma pessoa. Cada gatilho tem a sua natureza:

| O gatilho acontece… | Exemplos | O campo |
|---|---|---|
| **Uma vez por entrada na comunidade** | *Novo membro na comunidade*; *Uma compra é concluída* com **Só a primeira compra** | Some. A tela diz *"Este gatilho acontece uma vez por entrada na comunidade. Quem sai e volta entra de novo."* (ou *"Só a primeira compra: este gatilho acontece uma vez por pessoa."*) |
| **Uma vez por pessoa e item** | Matrícula e conclusão de curso, aula concluída, quiz aprovado, certificado emitido, primeira visita e acesso a um espaço, pesquisa respondida, resultado de avaliação, PDI aprovado, item publicado ou apagado | Some quando o filtro escolhe **um** item (um curso, um espaço, uma pesquisa, um ciclo): *"Este gatilho acontece uma vez por pessoa para o item escolhido."* Com **qualquer** item, aparece |
| **Pode se repetir** | Compra, assinatura, inscrição e check-in em evento, comentário, reação, publicação, tag, grupo, campo do perfil, carrinho, DM recebida, *Alguém volta depois de N dias sem acessar* | Aparece |
| **Por tempo ou execução** | Os gatilhos por data, **Agendado**, **Manual** e **Webhook recebido** | Aparece |

Quando o campo some, vale **Uma vez só** dentro da mesma entrada na comunidade: quem sai e volta à comunidade entra de novo.

**Nunca duas execuções ao mesmo tempo** continua valendo para todo gatilho: um evento que chega com a pessoa no meio de uma execução não abre outra e aparece no histórico como **Pulada**, com o motivo *"já estava em andamento"*.

## Como um workflow termina

Todo workflow tem **uma entrada e um fim explícito**, para você saber se cada execução deu certo e o que fazer quando não deu.

- **Um gatilho só.** O desenho aceita um gatilho; a API recusa um segundo.
- **Fim: sucesso** e **Fim: erro**, na categoria **Fim** dos blocos. Todo caminho termina num deles: um caminho sem fim fica marcado (*"Este caminho precisa terminar num Fim: sucesso ou Fim: erro"*) e o workflow não é salvo. Um fim só entra onde não há nada depois. Um workflow antigo abre com **Fim: sucesso** desenhado nas pontas soltas e continua rodando igual.
- **Saídas "ok" e "erro" em cada ação** (enviar e-mail, mandar mensagem, comentar, reagir, tag, grupo e Slack). A saída "ok" segue o caminho; **Ligar a saída de erro** leva a falha para outro bloco, como uma DM para a equipe ou o **Fim: erro**. Sem a saída de erro ligada, uma falha termina a execução em erro, com o motivo. **Esperar**, **Condição**, **Enquanto** e **Registrar log** não têm saída de erro.
- **Resumo e aviso:** ver [Taxa de sucesso e aviso de erros](#taxa-de-sucesso-e-aviso-de-erros).

**O que é erro.** Só o que falha de verdade na hora do passo: o e-mail que foi apagado da biblioteca ou que não entrou na fila de envio, o item do gatilho ou o grupo que não existe mais, a mensagem que não pôde ser criada, o Slack não instalado, sem o canal ou fora do ar, e a espera pela cota que passou do limite (ver [Quando o envio é adiado](#quando-o-envio-e-adiado)). No e-mail, conta só a falha ao colocar na fila: uma devolução ou falha do provedor depois disso não muda o caminho.

**O que não é erro.** Um passo **pulado** por uma regra que não muda com o tempo (descadastro, devolução, mensagens desligadas, bloqueio) e um passo **adiado** pela cota seguem pela saída "ok". Os dois aparecem no histórico, mas nunca contam como erro.

Cada passo deixa o resultado para os seguintes: `{{steps.<bloco>.result}}` (`done`, `skipped` ou `failed`), `{{steps.<bloco>.reason}}` e, só no caminho de erro daquele passo, `{{steps.<bloco>.error}}`, o motivo da falha. Ver [Variáveis](#variaveis).

### Taxa de sucesso e aviso de erros

No **Histórico**, o cartão **Como as execuções terminam** mostra:

- **Sucesso em 7 dias** e **Sucesso em 30 dias**, em porcentagem (*"18 de 20 execuções"*); sucesso e erro contam pelo bloco de fim;
- **Passos pulados (7 dias)**, **Logs de erro (7 dias)**, **Aguardando cota** (agora) e **Já em andamento** (eventos em 30 dias);
- **Últimos erros**: as 10 últimas execuções que terminaram em erro, com o bloco e o motivo.

Passos pulados, adiados e logs não contam como erro. O moderador e o financeiro veem o cartão só para leitura.

**Aviso de taxa de erro.** Quando mais de 20% das execuções das últimas 24 horas terminam em erro (com pelo menos 20 execuções no período), o proprietário e os administradores recebem um aviso no sino e por e-mail (*"O workflow "Boas-vindas" está com 35% de erros nas últimas 24 h (7 de 20 execuções). Veja o que falhou."*), no máximo um por dia para cada workflow.

## Variáveis

Cada gatilho entrega os dados do que aconteceu aos blocos seguintes: o nome do curso no parabéns, o produto e o valor no obrigado pela compra, a data no lembrete do evento. As variáveis têm nomes em inglês, com ponto, como `{{course.name}}` e `{{purchase.product}}`, e valem nos textos da **mensagem (DM)**, do **comentário**, do **Slack**, do **Registrar log** e no **e-mail** (assunto e corpo).

**Inserir variável.** O botão fica em cada campo de texto. O menu agrupa as variáveis pelo bloco que as gerou, com o nome que você deu ao bloco e o ícone dele (*"Gatilho · Cursos"*, *"Pessoa"*, *"Comunidade"*), na ordem do fluxo, e só mostra os blocos que vêm **antes** do bloco em edição. Cada variável traz o nome legível, o código e um exemplo: *"Curso · `{{course.name}}` · ex.: Curso de Liderança"*. A busca (*"Buscar variável ou bloco"*) acha pelo nome da variável ou do bloco. Por isso vale dar um **Nome do bloco** a cada passo.

**No e-mail.** **Editar e-mail**, no passo **Enviar e-mail**, abre o e-mail da biblioteca com o **Inserir variável** daquele ponto do fluxo.

**Como a pessoa vê.** Embaixo de cada texto com variável, a prévia mostra o texto preenchido com dados de exemplo (Maria Souza, maria@memberfy.net). A simulação mostra os textos com os dados reais da pessoa (ver [Simular, testar e estimar](#simular-testar-e-estimar)).

**Valor de reserva.** Para quem não tem o dado, escreva um texto depois da barra: `{{purchase.discount|sem desconto}}`. Uma variável sem valor sai vazia, ou com o valor de reserva, e o envio não falha.

**As variáveis:**

| De onde | Variáveis |
| Blocos de IA | `steps.<bloco>.output` (o texto ou o JSON), `steps.<bloco>.output.<campo>` (cada campo do JSON), `steps.<bloco>.tokens` e `steps.<bloco>.model` |
|---|---|
| **Pessoa** (todo workflow) | `member.first_name`, `member.name`, `member.email`, `member.phone`, `member.role`, `member.language`, `member.member_since`, `member.last_seen_at`, `member.tags`, `member.groups` e `member.field.<chave>` (os campos do perfil) |
| **Comunidade** (todo workflow) | `community.name`, `community.language` |
| Compras | `purchase.product`, `purchase.product_type`, `purchase.amount`, `purchase.discount`, `purchase.payment_method`, `purchase.installments`, `purchase.free`, `purchase.first`, `purchase.tickets`, `purchase.ticket_type`, `purchase.batch`; no reembolso, `refund.product`, `refund.amount`, `refund.partial`; no carrinho, `cart.product` |
| Assinaturas | `subscription.product`, `subscription.plan`, `subscription.interval`, `subscription.amount`, `subscription.period_end`, `subscription.ends_at`, `subscription.canceled_by`, `subscription.previous_plan`, `subscription.trial_ends_at` (conforme o gatilho) |
| Eventos | `event.title`, `event.date`, `event.time`, `event.type`, `event.ticket_type`, `event.check_in_method`, `event.previous_date` (no evento remarcado) |
| Cursos | `course.name`, `course.completed_at`, `lesson.title`; `certificate.title`, `certificate.source` |
| Espaços, publicações e comentários | `space.name`, `target.type` (onde foi o comentário ou a reação), `target.reaction` |
| Tags, grupos e campos | `tag.name`, `group.name`, `field.name` |
| Downloads | `download.title`, `download.folder` (a categoria), `download.previous_folder`, `download.file_name`, `download.file_type`, `download.size`, `download.version` |
| Formulários, pesquisas e chamadas | `form.name`, `survey.title`, `call.name`, `proposal.status` |
| Níveis e pontos | `level.name` (o nome do nível), `level.previous_name`, `level.number`, `level.direction` (**Subiu** ou **Desceu**), `level.cause` (**Pontos** ou **Atividade da semana**), `points.total`, `points.previous` |
| Reservas | `booking.resource`, `booking.starts_at`, `booking.ends_at` |
| Avaliações (RH) | `cycle.name`, `cycle.due_at` |
| Acesso | `absence.days` (dias sem acessar), em *Alguém volta depois de N dias sem acessar* e *Alguém está há N dias sem acessar* |
| Quem fez a ação | `actor.name`, nos [eventos do ciclo de vida](#eventos-do-ciclo-de-vida) |
| DM recebida | `dm.from.name`, `dm.from.email`, `dm.to.name`, `dm.conversation_url` e, com regra própria, `dm.text` (ver [DM recebida](#dm-recebida)) |
| Webhook recebido | `trigger.<nome>`, os valores que você definiu no gatilho |
| Passos anteriores | `steps.<bloco>.result`, `steps.<bloco>.skipped`, `steps.<bloco>.reason` e, no caminho de erro, `steps.<bloco>.error` |

**Os formatos.** Valores em dinheiro saem na moeda e no idioma da pessoa (*R$ 197,00*); datas, no fuso da comunidade e no idioma da pessoa. `member.language` e `community.language` saem como o código do idioma (`pt-BR`).

**Regras:**

- Os dados do gatilho são guardados quando a pessoa entra: uma espera de 3 dias não muda o produto nem o valor, mesmo que o produto seja renomeado no meio.
- Uma variável que não chega ao bloco (de um passo que vem depois, ou de outro gatilho) impede salvar, e o bloco fica marcado com o nome dela.
- Os valores entram como texto: HTML sai escapado no e-mail e no comentário, sem `<>` na DM e sem menção nem link no Slack; no assunto, sem quebra de linha. Nenhuma variável entra no endereço de um link, e `trigger.*` não entra no assunto.
- A resposta de um bloco de IA e a de um **Chamar webhook** vêm de fora: saem escapadas onde entram e nunca vão no assunto de um e-mail.
- Nenhuma variável traz o que um membro escreveu (post, comentário, resposta, título de votação ou de anúncio), taxas, documentos ou conteúdo de avaliação de RH além do nome e do prazo do ciclo. O e-mail e o telefone da pessoa podem ir no post do Slack.
- Os nomes antigos continuam funcionando (`{{nome}}`, `{{comunidade}}`, `{{campo_<chave>}}`, `{{gatilho_<chave>}}`), mas não aparecem no **Inserir variável**.

**Nas campanhas.** Um e-mail da biblioteca que usa variáveis de workflow mostra *"Usa variáveis de workflow"*. Numa [campanha](/notificacoes/campanhas-de-email), essas variáveis saem vazias, e **Novo disparo** avisa: *"Este e-mail usa variáveis de workflow (…). Numa campanha elas saem vazias: troque por variáveis da pessoa ou da comunidade, ou use valores de reserva."*

## Condição "Variável"

A regra **Variável**, no grupo **Variáveis do fluxo** da **Condição**, compara um dado do fluxo: escolha a variável (no mesmo menu do **Inserir variável**) e o operador, que depende do tipo:

| Tipo | Operadores |
|---|---|
| Texto | é igual a, não é igual a, contém, não contém, começa com, termina com, está vazio, não está vazio. Não diferencia maiúsculas nem acentos (*"avancado"* casa com *"Avançado"*) |
| Número e dinheiro | é igual a (=), é diferente de (≠), é maior que (>), é maior ou igual a (≥), é menor que (<), é menor ou igual a (≤), está vazio. Dinheiro na moeda da comunidade, no formato dela |
| Data | é antes de, é depois de, está entre, foi há mais de N dias, foi há menos de N dias, é nos próximos N dias |
| Lista (tags, grupos, campo de múltipla escolha) | contém, não contém, contém qualquer de, contém todos de |
| Sim/não | é verdadeiro, é falso |

Exemplos: *"Valor é maior ou igual a 100,00"*, *"Formato é igual a Presencial"*, *"Curso contém Avançado"*, *"Data é nos próximos 7 dias"*.

As outras regras usam os mesmos operadores: **Tem a tag** e **Está no grupo** com contém, não contém, qualquer de e todos de (e vários grupos de uma vez); **Campo do perfil** com os operadores do tipo do campo (num campo de [múltipla escolha](/membros/campos-customizados#multipla-escolha), *contém qualquer de*, *contém todos de* e *não contém*, com as opções; a variável `{{member.field.<chave>}}` traz as opções marcadas). A regra é lida na hora do passo, sempre com o valor atual do campo.

## Registrar log

O bloco **Registrar log** anota uma linha na execução: escolha o **Nível** (**Info**, **Aviso** ou **Erro**) e escreva a mensagem, que aceita variáveis (*"{{member.first_name}} chegou ao fim das boas-vindas"*).

- Só texto: HTML sai como texto, e a mensagem é cortada em 1.000 caracteres depois de preenchida.
- Até **20 logs por execução**; o 21º é descartado (*"limite de logs da execução"*).
- A saída é sempre "ok". Um log de nível **Erro** não muda o resultado da execução nem conta no aviso de taxa de erro; o resumo mostra quantos houve.
- O log aparece no histórico da execução e em **Administração › Logs**, tipo **Workflows**, com filtro por workflow e por nível. Ver [Logs](/membros/registros-de-atividades#workflows).
- **A mensagem só é visível para o proprietário e o administrador**, porque pode conter qualquer variável. O moderador e o financeiro veem que houve um log no histórico, com *"Mensagem visível só para owner e admin."* no lugar do texto.

## Chamar webhook

O bloco **Chamar webhook**, na categoria **Integrações**, manda uma chamada HTTPS para outro sistema no meio do caminho: avisar o CRM de uma compra, gravar uma linha numa planilha, chamar um fluxo do n8n.

- **Método** e **Endereço (URL)**: só `https://`, porta 443 e um host fixo. Variáveis podem ir no caminho, nunca no host, e as chaves do cofre não entram no endereço.
- **Cabeçalhos** e **Corpo (JSON)**: aceitam variáveis e as chaves do cofre (`{{env.CRM_TOKEN}}`), só para os endereços da chave, quando ela tem algum. O corpo vai com `memberfy.memberLanguage` e `memberfy.communityLanguage` acrescentados.
- **Tempo máximo de resposta**: de 2 a 15 segundos (padrão 10).
- **O que os próximos blocos podem usar:** `{{steps.<bloco>.status}}`, `{{steps.<bloco>.duration}}` (ms), `{{steps.<bloco>.size}}` (bytes) e os campos da resposta JSON, até 16 KB (`{{steps.<bloco>.body.<campo>}}`), pelo **Inserir variável**. Valores que vêm de fora nunca entram no assunto de um e-mail.

**Como a chamada se comporta:**

| Resposta | O que acontece |
|---|---|
| 2xx | Segue pelo caminho "ok" |
| 3xx (o redirecionamento não é seguido), 4xx, endereço bloqueado, resposta acima de 64 KB, corpo inválido, chave fora dos endereços dela | Vai pelo caminho de erro, na hora |
| 5xx, demora além do tempo máximo ou falha de rede | Tenta de novo depois de 1, 5 e 15 minutos; sem sucesso, vai pelo caminho de erro (*"O destino não respondeu depois de 3 tentativas."*) |

**Limites:** 60 chamadas por minuto e 2.000 por dia em cada workflow; 300 por minuto e 20.000 por dia na comunidade. O que passa espera a vez, em vez de falhar. Um destino que falha várias vezes seguidas fica alguns minutos em espera.

### IPs fixos

Nos planos **Business** e **Scale**, as chamadas saem de **IPs fixos**, os mesmos das entregas de webhook (ver [IPs fixos](/api/ips-fixos)), para liberar no firewall do destino. O painel do bloco mostra os IPs, com **Copiar IPs**, e quantas chamadas do mês já saíram por eles (*"1.200 de 10.000 chamadas por IP fixo neste mês"*).

- O limite é de **10.000 chamadas por IP fixo por mês**. Passando dele, as demais saem de IPs que mudam até o mês virar, e o proprietário recebe um aviso no sino, que abre as automações. O mês é o do calendário no fuso da comunidade: a contagem recomeça à meia-noite do dia 1º e não se acumula no plano anual.
- Nos outros planos, as chamadas saem de IPs que mudam (*"Para IPs fixos, use o plano Business ou superior."*).
- O histórico mostra, em cada chamada, de onde ela saiu: **IP fixo**, **IP variável** ou *"IP variável (limite mensal de IP fixo atingido)"*.

## Variáveis e chaves

**Variáveis e chaves**, no alto de **Administração › Workflows**, é o cofre da comunidade: os tokens e as chaves que o **Chamar webhook** usa nos cabeçalhos e no corpo. Só o proprietário e o administrador veem e mexem.

1. Antes da primeira chave, leia o aviso **Antes de começar: um aviso sobre dados pessoais** e clique em **Li e aceito**: os dados das pessoas enviados por webhook saem da Memberfy para o sistema que você indicar, e a comunidade é a controladora desses dados. O aceite vale uma vez só, para a comunidade inteira; depois, a tela mostra quando ele foi dado.
2. **Nova chave** abre uma janela com três campos:
   - **Nome**: como você chama a chave dentro do workflow. Ele se ajusta enquanto você digita (letras maiúsculas, números e `_`; espaços e acentos viram `_`), e logo abaixo aparece o jeito exato de escrever no bloco: *"No bloco "Chamar webhook", escreva"* `{{env.CRM_TOKEN}}`.
   - **Valor**: cole o token ou a senha. O ícone de olho mostra ou oculta o que você colou (**Mostrar o valor** / **Ocultar o valor**), só enquanto a janela está aberta.
   - **Pode ser enviada só para** (opcional): os endereços para onde a chave pode ir, como `api.seucrm.com.br` (Enter ou **Adicionar**; se você colar uma URL inteira, fica só o domínio). **Vazio, a chave pode ser usada com qualquer endereço**; com endereços, ela só sai para eles. Para uma chave de um sistema só, como o token do CRM, preencha: é mais seguro.
3. No bloco, use `{{env.CRM_TOKEN}}`.

- **O valor nunca volta para a tela.** Ele fica guardado cifrado, e a lista mostra só o final (*"…a1b2"*), para onde ela pode ir (ou *"Qualquer endereço"*) e quando foi usada (*"Ainda não usada"*). Para trocar, **Substituir** (em branco, mantém o valor atual).
- **Excluir** apaga o valor na hora; os workflows que usam a chave passam a ir pelo caminho de erro (*"A chave usada não existe mais no cofre."*).
- O histórico mostra o nome das chaves usadas numa chamada, nunca o valor.

### Limites de IA

O cartão **Limites de IA**, em **Variáveis e chaves**, segura o gasto dos [blocos Claude e ChatGPT](#blocos-de-ia-claude-e-chatgpt), que é da comunidade. Só o proprietário e o administrador veem e mudam, e cada mudança fica registrada.

**O que é um token.** A IA lê e escreve o texto em tokens, pedaços de palavra: 1.000 tokens dão umas 750 palavras. Conta a entrada (as instruções e o prompt) e a saída (a resposta). Nada disso usa a cota de IA da Memberfy.

| Teto | Padrão | Quando passa |
|---|---|---|
| **Por chamada** | 4.000 tokens | É o máximo que o modelo escreve numa resposta: um bloco que pede mais fica com este número |
| **Por execução** | 20.000 tokens | O total de uma pessoa passando pelo workflow. Passou, o bloco segue pela saída de erro (*"Teto de tokens de IA por execução atingido."*) |
| **Por dia** | 200.000 tokens | O total da comunidade no dia, no fuso da comunidade. Passou, os blocos esperam o dia seguinte e saem quando ele começa |

Por chamada precisa ser menor ou igual a por execução, e por execução menor ou igual a por dia. O cartão mostra quanto já foi usado hoje (*"Hoje: 12.400 de 200.000 tokens usados."*); **Salvar limites** grava e **Voltar ao padrão** volta aos números da tabela.

## Blocos de IA (Claude e ChatGPT)

Os blocos **Claude** e **ChatGPT**, na categoria **IA**, pedem à IA um texto ou um JSON no meio do caminho: escrever uma boas-vindas pessoal, classificar um chamado de suporte, resumir a resposta de um formulário. A chamada usa **a chave de API da própria comunidade**, criada na Anthropic (Claude) ou na OpenAI (ChatGPT): quem paga o uso é a comunidade, direto ao provedor.

**Antes do primeiro bloco:**

1. Em [Variáveis e chaves](#variaveis-e-chaves), aceite o aviso de dados pessoais e crie uma chave com a chave de API do provedor. Em **Pode ser enviada só para**, coloque `api.anthropic.com` (Claude) ou `api.openai.com` (ChatGPT). Uma chave sem endereço também aparece no bloco, mas restringir é mais seguro; uma chave com outros endereços, não.
2. Confira os [Limites de IA](#limites-de-ia).

**O painel do bloco:**

| Campo | O que é |
|---|---|
| **Modelo** | A família do modelo, descrita pelo uso: *o mais capaz, para tarefas difíceis* (mais lento e mais caro), *equilíbrio entre qualidade, velocidade e custo*, ou *o mais rápido e econômico, para tarefas simples*. A lista acompanha os modelos atuais de cada provedor |
| **Chave de API** | Só as chaves de Variáveis e chaves que podem ir para o provedor; **Criar chave em Variáveis e chaves** leva ao cofre. A chave nunca entra no prompt nem no histórico |
| **Instruções do sistema** (opcional) | Como o modelo se comporta em toda chamada: papel, tom, regras |
| **Prompt** | O pedido, com [variáveis](#variaveis) (*"Escreva uma mensagem de boas-vindas para {{member.first_name}}, que acabou de entrar na comunidade."*). As chaves do cofre (`{{env.*}}`) não entram |
| **Formato da resposta** | **Texto** ou **JSON**. Com JSON, um **Esquema JSON** opcional, e cada campo da resposta vira uma variável |
| **Máximo de tokens** | O tamanho máximo da resposta, de 16 a 8.000 tokens (padrão 1.024); o teto por chamada da comunidade pode baixar esse número |
| **Tempo de espera** | Quanto esperar a resposta, de 5 a 60 segundos (padrão 30) |

As variáveis entram no prompt como dados, nunca como ordem ao modelo, junto com o idioma da pessoa e o da comunidade. Ponha no prompt só o que a tarefa precisa.

**O que os próximos blocos podem usar:** `{{steps.<bloco>.output}}` (o texto ou o JSON), `{{steps.<bloco>.output.<campo>}}` (cada campo do JSON, também numa [Condição "Variável"](#condicao-variavel)), `{{steps.<bloco>.tokens}}` e `{{steps.<bloco>.model}}`, pelo **Inserir variável**. A resposta fica guardada até 16 KB. Ela é um valor de fora, como a de um webhook: sai escapada onde entra e **nunca vai no assunto de um e-mail**.

**Como o bloco se comporta:**

| Resposta | O que acontece |
|---|---|
| Resposta recebida | Segue pelo caminho "ok", com a resposta nas variáveis |
| Chave ou pedido recusado, recusa do modelo, resposta vazia ou cortada pelo máximo de tokens, JSON inválido no esquema | Vai pelo caminho de erro, na hora |
| Tempo esgotado, provedor fora do ar ou limite do provedor | Tenta de novo depois de 1, 5 e 15 minutos; sem sucesso, vai pelo caminho de erro (*"O provedor de IA não respondeu (3 novas tentativas)."*) |
| Teto por execução dos Limites de IA | Vai pelo caminho de erro |
| Teto diário dos Limites de IA | O passo espera o dia seguinte, no fuso da comunidade |

A simulação mostra o prompt preenchido sem chamar a IA, e o histórico mostra o modelo, os tokens e a duração de cada chamada, nunca a chave, o prompt nem a resposta (ver [Histórico](#historico)).

## Enviar SMS e Enviar WhatsApp

Os blocos **Enviar SMS** e **Enviar WhatsApp**, na categoria **Mensagens**, mandam um aviso para o celular da pessoa da execução, com as regras de [Avisos por SMS e WhatsApp](/notificacoes/avisos-por-sms-e-whatsapp): o canal ligado em **E-mails e notificações**, celular confirmado (ou informado pela equipe ao declarar o consentimento), consentimento de serviço daquele canal e a categoria **Automações** ligada em **Minha Conta › Avisos**.

- **Texto (SMS):** até 300 caracteres, com [variáveis](#variaveis) (*"Oi {{member.first_name}}, seu evento começa em 1 hora."*). As variáveis entram como texto simples. Ao enviar, a Memberfy põe o nome da comunidade na frente (*"[Clube de Corrida] …"*) e o link para sair no fim.
- **Partes (SMS):** o painel conta as partes do texto sozinho e **como sai** (com *[Comunidade]* na frente e o link para sair). Uma parte tem 160 caracteres, ou 153 quando a mensagem se divide; um acento como ã, õ ou ç, ou um emoji, faz cada parte caber 70 (67 quando divide). As variáveis contam como digitadas.
- **Modelo (WhatsApp):** o WhatsApp não aceita texto livre. Escolha o **Modelo** (*Ingresso confirmado*, *Pagamento recusado*, *Aviso da comunidade*…), preencha os **Campos do modelo** (até 300 caracteres cada, com variáveis; o primeiro nome da pessoa e o nome da comunidade a Memberfy preenche) e, se quiser, a **Página que o botão abre** (um caminho da comunidade, como `/eventos`; vazio, a página inicial). Para um recado que não tem modelo próprio, use **Aviso da comunidade**, cujo campo é o seu texto. **Como chega** mostra a mensagem montada. Um modelo de marketing só chega a quem aceitou novidades pelo WhatsApp (*"Modelo de marketing: só chega a quem aceitou novidades pelo WhatsApp."*). Não repita num workflow uma [mensagem que a plataforma já manda](/notificacoes/avisos-por-sms-e-whatsapp#mensagens-da-plataforma-no-whatsapp), como o pagamento confirmado ou o lembrete do evento.
- **Modelos que um workflow pode usar (WhatsApp):** *Aviso da comunidade* (também na versão *serviço*), *Ingresso confirmado*, *Pagamento confirmado*, *Pagamento recusado*, *Compra não concluída*, *Evento amanhã* e *Evento começando* (com as versões presenciais, que trazem o mapa), *Evento ao vivo*, *Resposta no post*, *Menção*, *Mensagem direta*, *Conteúdo novo*, *Proposta decidida*, *1:1*, *Feedback recebido* (também na versão *serviço*), *Pendência de RH*, *Lembrete de reserva*, *Assinatura renovando*, *Reembolso*, *Vaga na lista de espera* e *Certificado emitido*. Ficam de fora os que nenhum gatilho consegue preencher (*Visitante na recepção*, *Encomenda recebida*, *Cartão vencendo*, *Resposta no chamado* e *Cadastro aprovado*): esses saem só como [mensagem da plataforma](/notificacoes/avisos-por-sms-e-whatsapp#mensagens-da-plataforma-no-whatsapp).
- **Modelos de marketing (WhatsApp):** o WhatsApp classifica como marketing o *Aviso da comunidade* e o *Feedback recebido* (as duas versões de cada), a *Compra não concluída*, a *Menção* e o *Conteúdo novo*. Quem não aceitou novidades pelo WhatsApp não recebe: o passo é **pulado** (*"sem consentimento para WhatsApp"*) e segue pelo caminho "ok". Para que todo mundo receba o recado, ponha depois do bloco uma [condição "Variável"](#condicao-variavel) com `{{steps.<bloco>.result}}` igual a `skipped` levando a um **Enviar e-mail**. Ver [Modelos de marketing](/notificacoes/avisos-por-sms-e-whatsapp#modelos-de-marketing).

**Como o bloco se comporta:**

| Situação | O que acontece |
|---|---|
| Enviado | Segue pelo caminho "ok". O histórico mostra o texto e, no SMS, as **Partes de SMS** |
| A pessoa não pode receber: canal desligado na comunidade ou fora do plano, saiu da comunidade, sem celular, celular não confirmado (nem informado pela equipe ao declarar o consentimento), país não atendido, sem consentimento, parou os avisos desta comunidade ou respondeu SAIR, desligou a categoria **Automações**, texto vazio. No WhatsApp, também o modelo ainda não aprovado e o modelo de marketing para quem não aceitou novidades | **Pulado**, com o motivo (*"celular não confirmado"*), e segue pelo caminho "ok" |
| Horário de silêncio (21h às 8h, no fuso de quem recebe), teto diário da comunidade ou cota do mês | **Aguarda a cota** e sai quando ela libera, como em [Quando o envio é adiado](#quando-o-envio-e-adiado) |
| A pessoa já recebeu o **limite por pessoa** do dia (5 por padrão, no cartão do SMS) | Fica para o dia seguinte, às 8h (*"limite diário de WhatsApp por pessoa"*) |
| O envio foi recusado | Vai pelo caminho de erro (*"o envio do SMS foi recusado"*), com o **Código da recusa** no histórico |
| Falha passageira | Tenta de novo depois de 1, 5 e 15 minutos |

Com o envio da comunidade suspenso, os dois blocos esperam, como as outras mensagens. Nem o pulado nem o adiado contam como erro.

### Lembretes que também vão por SMS

Com o SMS ligado na comunidade, três lembretes da plataforma também saem por SMS, sem workflow, para quem pode receber: o **lembrete do evento**, 1 hora antes; os **lembretes do ciclo de PDI** (enviar e aprovar o PDI); e o **lembrete da 1:1**. A tela de cada um avisa (*"O lembrete de 1 hora antes também sai por SMS para quem consentiu."*). Um lembrete que o horário de silêncio ou o teto diário atrasaria é pulado no SMS; o e-mail sai como sempre. Com o SMS desligado, nada muda.

## Ações da plataforma e outros workflows

Cada **ação da plataforma** é um bloco da barra, com o nome da ação, na categoria do que ela toca (**Pessoas**, **Conteúdo** ou **Mensagens**). Ela faz pela pessoa da execução o mesmo que a equipe faz na tela; o painel do bloco pede os campos da ação (o curso, o evento, o plano ou produto e o grupo pela busca, o **Campo do cadastro**, o **Novo papel**, os **Pontos** e o **Motivo**, as datas e os textos, com variáveis) e diz o papel que ela exige (*"Quem salva e liga o workflow precisa ser administrador ou acima."*):

| Ação | O que faz | Papel mínimo de quem liga |
|---|---|---|
| **Mudar papel** | Muda o papel da pessoa, inclusive para administrador (nunca para owner, nem o papel de um owner ou o próprio) | Administrador |
| **Remover do grupo** e **Alterar cadastro** | Remove a pessoa de um grupo; grava um valor num campo do cadastro | Administrador |
| **Ajustar pontos** | Soma ou tira pontos do [ranking](/membros/gamificacao), com o motivo no histórico | Administrador |
| **Conceder badge** e **Remover badge** | Concede um [badge](/membros/engajamento#badges) do catálogo, com o **Motivo** opcional (quem já tem é pulado: *"a pessoa já tem o badge"*), com o aviso no sino e o e-mail de **Conquistas**; ou retira, sem avisar (quem não tem é pulado) | Administrador |
| **Dar acesso por cortesia** e **Encerrar cortesia** | Dá um plano por cortesia até uma data de fim, ou encerra a cortesia (uma assinatura paga nunca é tocada) | Administrador |
| **Dar ingresso de cortesia** | Um ingresso de cortesia no evento | Administrador |
| **Agendar 1:1** | Cria um [1:1](/espacos/1-1) recorrente entre a pessoa e o líder direto dela, com a **Frequência** (semanal, quinzenal ou mensal), o **Dia da semana**, o **Horário** e a **Duração (minutos)**. Sem líder direto, ou com um 1:1 recorrente já marcado, o passo é pulado | Administrador |
| **Adicionar ação ao PDI** | Inclui uma ação, com **Prazo (dias)**, no [PDI](/espacos/pdi) ativo da pessoa; sem PDI ativo, cria um rascunho com ela. No PDI, a ação mostra *"Criado pelo workflow …"* | Administrador |
| **Publicar post** | Publica um post (em Markdown, com variáveis) num espaço de feed ou de conteúdo, em nome de quem ligou o workflow, com a regra de quem pode criar do espaço e sem aviso por e-mail | Moderador |
| **Emitir certificado** | Emite um [certificado](/espacos/certificados) de um modelo ativo para a pessoa, com o e-mail de aviso se **Enviar o certificado por e-mail** estiver marcado; quem já tem o certificado é pulado | Moderador |
| **Reconhecer** | Quem ligou o workflow publica um [reconhecimento](/espacos/reconhecimento) para a pessoa, com a mensagem e, se quiser, um valor da comunidade | Moderador |
| **Bloquear no chat** | Quem ligou o workflow bloqueia a pessoa no [chat](/membros/mensagens), sem aviso a ninguém; a ação não tem campos | Moderador |
| **Inscrever no evento** e **Matricular no curso** | Só eventos e cursos gratuitos | Moderador |
| **Mandar aviso no app** | Um aviso no sino da pessoa, com título e texto. O aviso chega também por [notificação no navegador e no celular](/conceitos/notificacoes-no-navegador), na categoria **Avisos da equipe**; tocar abre o sino | Moderador |

O que mexe com dinheiro ou apaga em definitivo nunca roda num workflow.

**Chamar workflow** roda, para a mesma pessoa, um workflow que começa com **Chamado por outro workflow**. No gatilho desse workflow, **Valores que este workflow recebe** declara o que ele espera (nomes com letras minúsculas, números e `_`), usados nos blocos como `{{trigger.<nome>}}`; no **Fim: sucesso**, **Valores devolvidos** diz o que volta para quem chamou. No bloco **Chamar workflow**, escolha o **Workflow chamado**, preencha os **Valores enviados** e veja **O que ele devolve**, que os blocos seguintes usam como `{{steps.<bloco>.output.<nome>}}`. O workflow que chama espera o outro terminar e segue pelo "ok" ou pelo erro (*"o workflow chamado terminou com erro"*). Um workflow não chama a si mesmo nem quem o chama, e a cadeia vai até 3 workflows. Assim, uma boas-vindas comum fica num workflow só, chamado por vários.

### Com que papel os passos agem

Um workflow nunca faz mais do que a pessoa que o pôs para rodar:

- Os passos agem com o papel de **quem salvou, ligou, retomou ou executou** o workflow. Uma ação acima do papel de quem edita fica marcada no painel (*"Esta ação exige proprietário: você não consegue salvar o workflow com ela."*) e o workflow não é salvo.
- O papel é lido de novo a cada passo: se a pessoa perdeu o papel, a ação é pulada (*"a ação foi recusada para o papel de quem ligou"*); se saiu da comunidade, o passo falha (*"quem ligou o workflow saiu da comunidade"*).
- **O administrador age como o proprietário.** Ele salva, liga e executa workflows com qualquer ação da plataforma, inclusive tornar alguém administrador. Só uma ação marcada como exclusiva do proprietário ficaria acima dele (o workflow abriria só para leitura: *"Este workflow tem ações que só um proprietário pode alterar. Você pode ver e simular."*), e hoje nenhuma é: a titularidade da comunidade e o plano não são ações de workflow.
- **O moderador e o financeiro têm limites:** veem, simulam e acompanham o histórico, mas não salvam, ligam nem executam workflows, e um workflow nunca dá a eles um poder que não têm.
- Um workflow chamado por outro age com o menor papel da cadeia.

## Eventos do ciclo de vida

29 gatilhos com o ciclo de vida de cada módulo, cada um no bloco da sua família e também nos [webhooks](/api/eventos-de-webhook).

| Família | Gatilhos |
|---|---|
| Downloads | Um arquivo é publicado, editado, muda de categoria ou é apagado; um anexo é adicionado, substituído por uma versão nova ou removido; uma categoria de downloads é criada |
| Publicações e comentários | Uma publicação é editada, muda de espaço ou é apagada; um comentário é apagado; alguém remove uma reação |
| Eventos | Um evento é criado, editado, remarcado ou apagado; a transmissão começa; a gravação é publicada |
| Cursos | Um curso é publicado ou editado; uma aula é publicada; alguém sai de um curso |
| Espaços | Um espaço é criado, editado ou apagado |
| Formulários | Um formulário é publicado, encerrado ou reaberto |

- **Só itens no ar disparam:** um rascunho editado ou apagado não inicia nada.
- **Apagar um evento é como se cancela um evento** hoje, e o gatilho diz isso: *"Um evento é apagado (é assim que se cancela)"*.
- A pessoa da execução é **quem fez a ação** (`{{actor.name}}`). Quando é a equipe que publica (um evento, uma aula), o gatilho serve para avisar no Slack ou reconhecer o autor; para avisar todos os membros de um conteúdo novo, use os [avisos por e-mail](/notificacoes/emails-desta-comunidade) ou um workflow **Agendado** ou **Manual** com público.

## Níveis e pontos

O bloco de gatilho **Níveis e pontos** (*"Uma pessoa sobe ou desce de nível, ou atinge um total de pontos"*) acompanha os [níveis](/membros/gamificacao#niveis) da comunidade:

| Gatilho | Quando dispara | Filtros |
|---|---|---|
| **Subiu de nível** | Na hora em que a pessoa chega a um nível mais alto, por pontos (ação, ajuste da equipe ou de workflow) ou por cumprir o requisito da semana que faltava. Pular dois níveis dispara uma vez | **Nível**: o nível alcançado (**Qualquer nível**, vazio) |
| **Desceu de nível** | Na segunda às 00:00, no fuso da comunidade, para quem não cumpriu os requisitos da semana anterior, e na hora em que um ajuste negativo deixa a pessoa abaixo do mínimo do nível | **Nível** (o nível em que a pessoa ficou) e **Motivo**: *"Não cumpriu a atividade da semana (na segunda)"* e *"Perdeu pontos (ajuste da equipe ou de workflow)"*, as duas marcadas por padrão (*"Pelo menos um motivo fica marcado."*) |
| **Atingiu N pontos** | *"Dispara quando o total passa desse número para cima. Quem desce e volta a passar dispara de novo."* | **Pontos** (obrigatório) |

Nenhum dos três dispara num recálculo de pontos, numa importação, quando a comunidade muda os níveis ou com a gamificação desligada.

**Condições.** Na **Condição**, o grupo **Engajamento** tem as regras **Nível** (*"está no nível Kernel ou acima"*, ou *"está abaixo do nível Kernel"*) e **Pontos** (*"tem pelo menos 500 pontos"*, ou *"tem menos de 500 pontos"*), lidas na hora do passo.

**Exemplos:** *"Subiu para Kernel → conceder o badge Kernel"*; *"Desceu de Kernel, motivo atividade da semana → tirar do grupo Kernel"*; *"Atingiu 1.000 pontos → mandar uma DM de parabéns"*.

## DM recebida

O bloco de gatilho **Mensagens** tem o gatilho **Um membro manda uma DM para a equipe**: ele dispara quando um membro manda uma [mensagem](/membros/mensagens) a alguém da equipe. A pessoa da execução é quem mandou a DM. DM entre membros, ou de alguém da equipe, não dispara.

**Filtros:**

- **Quem recebe**: uma ou várias pessoas da equipe (obrigatório).
- **Quem manda tem a tag** e **Quem manda está no grupo** (vazio: qualquer membro).
- **Só a primeira mensagem de uma conversa nova**. Desmarcado, toda mensagem dispara, com a regra de [Quantas vezes a pessoa entra](#quantas-vezes-a-pessoa-entra).

**Variáveis:** `{{dm.from.name}}` e `{{dm.from.email}}` (quem mandou), `{{dm.to.name}}` (quem recebeu) e `{{dm.conversation_url}}` (o link da conversa).

**O texto da DM (`{{dm.text}}`)** segue a regra das mensagens: a equipe não lê a conversa dos outros. Por isso ele só fica disponível quando o workflow é **de quem recebeu a mensagem**:

- o filtro **Quem recebe** tem exatamente essa pessoa, e só ela salva e liga o workflow;
- o texto só pode ir numa DM assinada por essa pessoa, no corpo de um e-mail ou numa condição. Em qualquer outro lugar (assunto, Slack, comentário, log, DM em nome de outra pessoa), ou num workflow salvo ou ligado por outra pessoa, o bloco fica marcado com erro no desenho e o workflow não é salvo.

O evento também chega aos [webhooks](/api/eventos-de-webhook) como `message.received`, **sem o texto** da mensagem.

## Limites

- **Limite de frequência**, opcional, em cada workflow: no máximo N e-mails a cada tantas horas ou dias para a mesma pessoa; o que passar fica [aguardando a cota](#quando-o-envio-e-adiado).
- **Limite diário da comunidade**: os e-mails de workflows por dia do plano (40 no Starter, 80 no Growth, 200 no Business e 350 no Scale; ver [Plano e extensões](/configuracoes/plano#as-cotas-do-plano)); o que passar espera o dia seguinte. Os e-mails transacionais nunca entram nesse limite.
- **SMS e WhatsApp por pessoa**: no máximo 5 mensagens de workflow por pessoa por dia em cada canal, por padrão (de 1 a 20, no cartão do SMS); o que passar sai no dia seguinte, às 8h.
- **Mensagens:** no máximo 1 mensagem de workflow por pessoa por dia; quem desligou as mensagens ou bloqueou quem assina não recebe.
- **Webhook recebido:** no máximo 5 execuções por pessoa por dia em cada workflow.
- Quem se descadastrou de **Automações**, os endereços com devolução ou denúncia e a [reputação de envio](/notificacoes/reputacao-de-envio) da comunidade também seguram os e-mails.
- **Chamar webhook:** ver os [limites das chamadas](#chamar-webhook).
- Com o envio da comunidade suspenso, **Executar agora** e o **Agendado** não iniciam ninguém, e as mensagens, os comentários, as reações e os posts no Slack de quem já está no caminho esperam a suspensão acabar (as tags e os grupos continuam).

### Quando o envio é adiado

Quando um limite que libera com o tempo segura o passo, ele **fica aguardando a cota** e sai assim que ela libera, em vez de ser pulado:

| Limite | Até quando espera |
|---|---|
| **Limite de frequência** do workflow | Até o fim da janela do limite (a janela vai até 90 dias) |
| **Limite diário da comunidade** | Até 7 dias |
| **Reputação de envio** em alerta ou pausada | Até 7 dias |
| **Envio da comunidade suspenso** | Até 48 horas |
| **1 mensagem de workflow por pessoa por dia** | Até 7 dias |

- O histórico mostra *"Aguardando cota: adiado até 28/10, 9:00 por limite de frequência do workflow"*.
- Quando a cota libera, os passos saem espalhados ao longo de uma hora; depois de uma suspensão, num ritmo controlado, e não todos de uma vez.
- Depois de sair, o passo segue pela saída "ok". Passou do tempo máximo, a execução segue pela saída "erro" com o motivo *"esperou a cota além do limite"*.
- **Pausar** o workflow congela a espera; **Retomar** recomeça a contagem; **Encerrar execução** ou **Parar** cancela, e nada é enviado.
- Um evento novo da mesma pessoa durante a espera não abre outra execução (*"já estava em andamento"*).

**Impedimento permanente conta como pulado.** Descadastro de **Automações**, e-mail com devolução ou denúncia, pessoa sem e-mail, mensagens desligadas, bloqueio de quem assina e quem assina fora das pessoas permitidas não liberam com o tempo: o passo é **pulado**, com o motivo, e o caminho segue pela saída "ok" (`{{steps.<bloco>.result}}` é `skipped`).

**Nem o adiado nem o pulado contam como erro**: não mudam o resultado da execução nem o aviso de taxa de erro.

## Consentimento e quem assina

**Gatilho por data e Agendado:** ao ligar, a janela pede uma vez a confirmação de que essas pessoas, que já estão na comunidade, podem receber estes e-mails.

### Em nome de quem

Quem pode assinar as mensagens dos workflows é uma escolha da comunidade:

- Em **Administração › Configurações › E-mails e notificações**, o cartão **Mensagens dos workflows em nome de** (o mesmo aparece no alto de **Administração › Workflows**) diz em nome de quem os workflows podem mandar DM, comentar e reagir: **Toda a equipe** (o padrão: proprietário, administradores, moderadores e financeiro) ou **Só o owner**. Só o proprietário e o administrador veem e mudam.
- O campo **Em nome de quem** de cada bloco de DM, comentário e reação lista as pessoas que a configuração permite. Ninguém precisa aceitar nem aprovar textos.
- Com **Só o owner**, os passos desenhados em nome de outra pessoa são **pulados**, com o motivo *"quem assina não está entre as pessoas permitidas"*, e o editor marca esses blocos (*"Esta pessoa não pode mais assinar: com "Só o owner", este passo é pulado até você trocar quem assina."*).
- **Fica o registro:** cada versão guarda quem a ligou ou publicou e os textos que saem em nome de cada pessoa. Quando outra pessoa da equipe liga um workflow que fala em seu nome, você recebe um aviso no sino, que abre o workflow (*"Ana ligou o workflow "Boas-vindas", que fala em seu nome. Veja os textos."*).

## Modelos

**Modelos** cria um rascunho a partir de um dos 9 modelos, com os e-mails já na biblioteca, no idioma da comunidade. Nada é enviado até você ligar.

| Família | Modelo | O que faz |
|---|---|---|
| Engajamento | **Régua de boas-vindas** | Três e-mails na primeira semana de quem entra |
| Engajamento | **Incentivo de uso** | Entrou e não começou um curso em 3 dias: um empurrãozinho |
| Engajamento | **Reconquista** | Sem acesso há 30 dias: um convite para voltar |
| Engajamento | **Parabéns pelo curso** | Um e-mail quando a pessoa conclui um curso |
| Engajamento | **Primeira inscrição em evento** | Boas-vindas na primeira inscrição em evento |
| Engajamento | **Obrigado pela presença** | Um dia depois do check-in, um obrigado |
| Pessoas (RH) | **Lembrete de avaliação pendente** | Avaliação não enviada há 3 dias no ciclo aberto |
| Pessoas (RH) | **1:1 sem registro** | A 1:1 passou e ainda não foi registrada |
| Pessoas (RH) | **Metas sem check-in** | Resultado-chave sem check-in há 14 dias |

Abrir um modelo mostra os passos e os assuntos dos e-mails antes de usar (*"Cria N e-mails na biblioteca"*).

## E-mails e descadastro

Os e-mails dos workflows saem na categoria **Automações** de [E-mails desta comunidade](/notificacoes/emails-desta-comunidade), ligada por padrão, com o link para desligá-la no rodapé.

## Passo a passo

Um exemplo: um parabéns com o nome do curso.

1. Em **Administração › Workflows**, clique em **Novo workflow** (ou em **Modelos**, para começar de um modelo).
2. Arraste o bloco **Cursos** da categoria **Gatilhos** e, em **Dispara quando**, escolha *Alguém conclui um curso*. Escolha o curso: o campo **Quantas vezes a pessoa entra** some, porque cada pessoa conclui aquele curso uma vez.
3. Clique no **+** depois do gatilho e escolha **Enviar e-mail**. Dê o **Nome do bloco** *Parabéns* e escolha o e-mail. Em **Editar e-mail**, use **Inserir variável** › **Gatilho · Cursos** › **Curso** para colocar `{{course.name}}` no assunto.
4. Ligue a saída "ok" a **Fim: sucesso**. Se quiser, ligue a saída "erro" a uma **Mandar mensagem (DM)** para você, com `{{steps.<bloco>.error}}` no texto, e depois a **Fim: erro**.
5. **Salvar** e **Simular com uma pessoa**, com uma aluna que concluiu o curso: a simulação mostra o assunto com o nome do curso e *Terminaria em sucesso*. Num passo de e-mail, **Enviar teste para mim** manda o e-mail só para você. **Simular e me enviar os e-mails** manda para você o e-mail como a aluna o receberia.
6. **Ligar** e confirme. Na lista, acompanhe **Entraram**, **Terminaram** e **Sucesso**.

## Pelo assistente (MCP)

O proprietário e o administrador criam, editam, ligam, pausam e retomam workflows pelo assistente, inclusive a partir dos modelos; ligar e retomar mostram antes o gatilho, os e-mails e a estimativa. A equipe consulta, simula e acompanha o histórico. Também pelo assistente: `run_workflow` (executar agora), `stop_workflow` (parar, com a contagem das execuções canceladas antes da confirmação), `get_workflow_summary` (a taxa de sucesso e os últimos erros), `list_workflow_variables` e `preview_workflow_text` (as variáveis de um bloco e o texto preenchido), `get_workflow_settings` e `update_workflow_settings` (em nome de quem) e o endereço do [webhook de entrada](/integracoes/webhook-de-entrada).

O assistente também aprende a automatizar: o **guia de workflows** (`get_workflow_guide` e a receita **Automatizar uma regra com um workflow**) explica gatilhos, blocos, regras e variáveis e traz receitas prontas; `suggest_workflow` transforma uma regra em palavras (*"quem compra o curso ganha 7 dias de acesso à mentoria"*) num rascunho, sem salvar nada; e, depois de enviar uma campanha, emitir certificados ou convidar pessoas, o assistente sugere o workflow que automatiza isso. Pelo assistente ainda: as chaves do cofre (`list_env`, `set_env`, `delete_env`, sem nunca mostrar o valor), os blocos de ações da plataforma e **Chamar workflow**, e tirar execuções do histórico (`delete_workflow_run`, `clear_workflow_runs`, com confirmação). Ver as [receitas](/mcp/receitas#93-pare-um-workflow-ou-so-pause) e [Ferramentas · Comunidade](/mcp/ferramentas-comunidade#workflows).

Para a IA e as ações novas: o guia traz o bloco `ai` (com os modelos e os limites do bloco) e 48 receitas, entre elas *DM de boas-vindas escrita por IA*, *Triagem de chamados de suporte com IA*, *Resumo de resposta de formulário com IA*, *Certificado no check-in* e *1:1 recorrente para quem entra num time*. `get_ai_limits` e `update_ai_limits` leem e mudam os [Limites de IA](#limites-de-ia), `adjust_member_points` ajusta os pontos de alguém sem workflow, e `simulate_workflow` com `send_emails_to_me` manda os e-mails da simulação só para você. Nenhuma das quatro pede confirmação.

Para o SMS e o WhatsApp: o guia descreve os blocos `sendSms` e `sendWhatsapp` (o limite, a regra das 24 horas e os motivos de pulo e de espera, lidos de `list_workflow_triggers`), e as receitas passam a 56, com *Boas-vindas por SMS*, *Inscrição no evento confirmada por SMS*, *Evento remarcado por SMS*, *Pagamento em atraso por SMS*, *1:1 amanhã por SMS*, *Inscrição no evento confirmada por WhatsApp*, *Pagamento em atraso por WhatsApp* e *Vaga da lista de espera por WhatsApp*. Ver [Avisos por SMS e WhatsApp](/notificacoes/avisos-por-sms-e-whatsapp#pelo-assistente-mcp). No WhatsApp, o guia monta o bloco com o modelo, os campos e a página do botão, nunca com texto livre, e as receitas usam *Ingresso confirmado*, *Pagamento recusado* e *Aviso da comunidade*.

Para os campos de múltipla escolha e os badges, as receitas passam a 61: *Boas-vindas pelo interesse* e *Tag pelo interesse* (com *contém qualquer de* na condição **Campo do perfil**), *Badge ao concluir um curso*, *Grupo para quem recebe um badge* e *Badge no check-in do evento*.

Para os níveis: o guia descreve os gatilhos **Subiu de nível**, **Desceu de nível** e **Atingiu N pontos** e as regras `levelAtLeast` e `pointsAtLeast`, com três receitas novas: *Subiu de nível, ganha um badge*, *Desceu de nível, sai de um grupo* e *Atingiu N pontos, ganha um badge*. Os níveis em si ficam em `get_ranking_levels` e `update_ranking_levels`.

## Na API

As rotas ficam em `/api/workflows`: gatilhos, lista, criar, editar, excluir, ligar, pausar, retomar, parar, estimativa, simulação, teste, execuções, histórico por membro, modelos e executar agora (`POST /api/workflows/{id}/run`). Ver a [Referência da API](/api/referencia). Também `POST /api/workflows/{id}/stop`, `GET /api/workflows/{id}/summary`, `GET /api/workflows/{id}/variables` e `POST /api/workflows/variables` (as variáveis de um desenho ainda não salvo), `GET` e `PUT /api/workflows/settings` (em nome de quem), `occurs` e `variables` em cada gatilho de `GET /api/workflows/triggers`, `activeCount` e `maxActive` na lista, e o tipo `workflows` em `GET /api/logs`. Um desenho recusado volta com 422 e o bloco: `singleTriggerOnly`, `pathWithoutEnd`, `variableUnavailable`, `httpTimeoutInvalid`, `externalInSubject`, `actionAboveRole` e `subWorkflowAboveRole` (ação acima do papel de quem salva), `subWorkflowCycle`. Executar agora ou o endereço de webhook de um workflow com ações acima do seu papel: 403 `workflows.actionsAboveRole`. Também `DELETE /api/workflows/runs/{runId}` e `POST /api/workflows/{id}/runs/clear` (apagar do histórico), os blocos `http`, `platformAction` e `runWorkflow`, o gatilho `workflow.called`, `platformActions` e `subWorkflow` em `GET /api/workflows/triggers`, e o cofre em `/api/vault` (o valor de uma chave nunca volta).

Os blocos de IA são o bloco `ai` (`provider` `anthropic` ou `openai`, `model`, `keyEnv`, `system`, `prompt`, `outputFormat` `text` ou `json`, `jsonSchema`, `maxOutputTokens`, `timeoutSeconds`, `next` e `error`), com os modelos e os limites do bloco em `aiProviders` e `aiNode` de `GET /api/workflows/triggers`; os tetos ficam em `GET` e `PUT /api/vault/ai-limits` (proprietário e administrador). As ações novas estão em `platformActions` (`content.post.create`, `certificate.issue`, `recognition.give`, `chat.block`, `oneOnOne.schedule`, `developmentPlan.action.add`), com o campo opcional `ownerOnly`, e `POST /api/gamification/points` ajusta pontos fora de um workflow. `POST /api/workflows/{id}/simulate` aceita `sendEmailsToMe: true` e devolve `emailsToMe`; passar de 10 simulações com envio por hora: `429`; conta sem e-mail: `422`.

Os blocos de SMS e WhatsApp são `sendSms` (`text`, até 300 caracteres, `next` e `error`) e `sendWhatsapp` (`template`, `variables`, até 300 caracteres cada, `link`, `next` e `error`; os modelos e os campos de cada um vêm em `whatsappNode.templates`), descritos em `smsNode` e `whatsappNode` de `GET /api/workflows/triggers`. Os motivos ficam no passo: pulado (`smsNoPhone`, `smsPhoneUnverified`, `smsNoConsent`, `smsOptedOut`, `smsOptedOutAll`, `smsCategoryOff`, `smsCountryUnsupported`, `smsChannelDisabled`, `smsMemberGone`, `smsTextEmpty` e os `whatsapp*` equivalentes, mais `whatsappNotOnPlan`, `whatsappTemplateNotApproved` e `whatsappNoConsent`), adiado (`smsQuietHours`, `smsDailyCapReached`, `smsMonthlyQuotaReached`, `smsPersonDailyCapReached` e os do WhatsApp) e erro (`smsSendFailed`, `whatsappSendFailed`). O contador de partes é `POST /api/sms/segments`.

As ações de badge são `badge.award` (com `badgeId` e `reason`, que aceita variáveis) e `badge.revoke`, em `platformActions`; os gatilhos são `badge.awarded` (filtros `badgeId` e `sources`) e `badge.revoked`, com a variável `{{badge.name}}`. Os gatilhos de nível e pontos são `member.level_changed` (filtros `direction`, `up` por padrão ou `down`, `levelId` e, na descida, `causes`: `points` e `activity`) e `member.points_changed` (filtro `points`, obrigatório: dispara quando `from < N <= to`); as regras são `levelAtLeast` (`levelId`) e `pointsAtLeast` (`points`), com `not`. Num campo de múltipla escolha, a regra `fieldEquals` aceita `op` `containsAny`, `containsAll`, `notContains` e `contains`, com `values`.

## Relacionados

- [Campanhas de e-mail](/notificacoes/campanhas-de-email)
- [Reputação de envio](/notificacoes/reputacao-de-envio)
- [Mensagens](/membros/mensagens)
- [Logs](/membros/registros-de-atividades)
- [Slack](/integracoes/slack)
- [IPs fixos](/api/ips-fixos)
