Pular para o conteúdo

Gatilhos, tipos de nó e regras disponíveis

GET/api/workflows/triggers

Auth
Exige token
Chave de API:
workflows:read
X-CommunityId
X-CommunityId Envie o X-CommunityId da comunidade em que a operação acontece.

Owner, admin, moderador e financeiro. Os eventos do catálogo que levam um membro (inclusive `member.joined` com origem `import`), com os filtros de cada um. `internal: true` marca os fatos de RH (avaliação, 1:1, metas, PDI, pesquisa): iniciam workflows, mas não vão para webhooks públicos. `time: true` marca os gatilhos por tempo (`time.no_access`, `time.daily`, `time.review_pending`, `time.review_due`, `time.one_on_one_upcoming`, `time.one_on_one_not_logged`, `time.agreement_overdue`, `time.key_result_stale`, `time.goal_cycle_ending`, `time.pdi_action_overdue`, `time.survey_unanswered`): uma passada por dia, a partir das 9h no fuso da comunidade, com "exatamente N dias" em cada regra de data (o mesmo fato entra uma vez); `params` traz o intervalo de `days`. `manual: true` marca o gatilho `manual` (2026-10-26), que nenhum evento dispara: a equipe inicia por `POST /api/workflows/{id}/run`. `schedule: true` marca o gatilho `schedule` (agendado): `filter: { frequency: daily|weekly|monthly, weekdays? (semanal, 0 = domingo a 6), monthDay? (mensal, 1 a 28), timeOfDay: "HH:mm", audience }`, no fuso da comunidade, com o público das campanhas (descadastro, bounce e denúncia fora; `itemAccess`, só de campanha, volta 422). Dispara uma vez por dia do agendamento, a partir do horário, nunca para um horário anterior a entrar no ar; com o envio suspenso, o dia é pulado. As pessoas entram em lotes, como no início manual. Ligar pede `consent: true`. `webhook: true` marca `webhook.received` (webhook de entrada): `filter: { match: { by: email|memberId, path }, variables: [{ key, path }] }`, com o endereço em `POST /api/workflows/{id}/triggers/{nodeId}/webhook` (ver `POST /api/workflow-hooks`). `called: true` marca `workflow.called` (chamado por outro workflow): `filter: { variables: [{ key }] }`, as entradas. A resposta traz também `platformActions` (o que o nó "Ação da plataforma" oferece) e `subWorkflow` (`maxDepth` 3, `inputs`, `outputs`, `value`). Cada gatilho vem como um bloco da paleta (`block: { type: trigger, trigger }`, o nó `trigger` do desenho) com `filterSpecs`, como pedir cada filtro: `{ key, input: id, ref }` (o tipo do item: event, course, form, product, space, group, reviewCycle, survey), `{ key, input: text, maxLength }`, `{ key, input: multiSelect, options }` ou `{ key, input: integer, min, max }`."

Fase 5a: cada gatilho traz `occurs`, quantas vezes pode acontecer para a mesma pessoa: `oncePerJoin` (uma vez por entrada na comunidade: `member.joined`; quem sai e volta entra de novo), `oncePerItem` (uma vez por pessoa e item; `itemFilter` diz o filtro que escolhe o item, e com ele escolhido vale como `oncePerJoin`), `repeats` e `time` (tempo, agendado, manual, webhook). Com `oncePerJoin` (ou item escolhido, ou `purchase.completed` com o filtro `firstPurchase: true`, a primeira compra concluída de qualquer produto, gratuitas incluídas) o campo "Quantas vezes a pessoa entra" não se aplica: no máximo uma execução desde a entrada na comunidade. Gatilho novo `member.returned` (alguém volta depois de 7 dias ou mais sem acessar), com o filtro `minDaysAway` (inteiro de 7 a 365). Também: `endTypes` (`endSuccess`, `endError`), `actionTypes` (as ações com saída de erro), `logLevels` e `limits.triggers` = 1.

Fase 5c: os gatilhos do ciclo de vida de cada família (Downloads, posts, comentários e reações, eventos, cursos, espaços e formulários; lista em `GET /api/integrations/events`), com `occurs` (`oncePerItem` para publicado, criado e apagado; `repeats` para editado, movido, arquivo e reação) e as variáveis `actor.name` (quem fez a ação), `download.title`, `download.folder`, `download.previous_folder`, `download.file_name`, `download.file_type`, `download.size`, `download.version` e `event.previous_date`.

Fase 5b (variáveis entre blocos): cada gatilho traz `variables`, as variáveis que ele entrega, `[{ token, label, group, type, format?, options?, example }]` (`token` sem chaves, como `purchase.product`; `type` é `text`, `number`, `date`, `list` ou `boolean`; `format: money` é em centavos, `bytes` em bytes, `time` só a hora; `options` são os valores fechados com o rótulo traduzido). `commonVariables` são as que todo gatilho tem (`member.*`, sempre com `member.language`, e `community.name`/`community.language`); `stepVariables`, o que cada passo deixa (`steps.<nó>.result|skipped|reason|error`, `error` só no ramo de erro); `operators`, os operadores da condição "Variável" por tipo; `listOperators`, os de "tem a tag" e "está no grupo". Os nomes antigos (`{{nome}}`, `{{comunidade}}`, `{{campo_x}}`, `{{gatilho_x}}`) continuam valendo, mas não aparecem aqui.

Fase 5g: gatilho `message.received` ("DM recebida", família `message`): um membro manda uma DM a uma pessoa da equipe (owner, admin, moderador, financeiro); DM entre membros, ou de alguém da equipe, não dispara. A pessoa da execução é quem mandou. Filtros: `recipientIds` (as pessoas da equipe que recebem, 1 a 20; `filterSpecs` traz `input: ids, ref: teamMember`), `senderTag` e `senderGroupId` (quem manda tem a tag / está no grupo, lidos na hora) e `newConversation: true` (só a primeira mensagem de uma conversa nova; sem ele, toda mensagem, com o campo de reentrada). `occurs: repeats`. Variáveis: `dm.from.name`, `dm.from.email`, `dm.to.name` e `dm.conversation_url` (o link da conversa, o único valor que continua link). `dm.text` vem com `restricted: dmText`: só pode ser usada (senão 422 `variableUnavailable`) e só é preenchida quando o workflow pertence a quem recebeu a DM: o filtro tem exatamente uma pessoa em `recipientIds`, é ela quem salva e liga o desenho (outra pessoa que salve ou ligue um desenho com `dm.text` recebe 422) e foi ela quem escreveu a versão em execução e quem ligou o workflow (senão o valor fica vazio). Destinos: só numa DM assinada por essa pessoa (`fromMemberId` = o destinatário), no corpo de um e-mail (nunca no assunto) e em condições; em "Registrar log", Slack, comentário ou DM assinada por outra pessoa, 422 `variableUnavailable`. O texto nunca fica guardado na execução (nem o HTML do e-mail) e nunca vai para o webhook público.

Headers

NomeTipoDescrição
X-CommunityIdopcionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Respostas

CódigoDescrição
200`{ triggers: [{ type, family, filters, sources?, internal?, time?, params?, occurs, itemFilter? }], nodeTypes, endTypes, actionTypes, platformActions: [{ name, label, description, scope, minRole, ownerOnly, identity, confirmation, cost, templated, inputSchema }], subWorkflow, logLevels, ruleKinds, limits }`.
401Token ausente, inválido ou expirado; token de outra comunidade (o `X-CommunityId` ou o `communityId` do corpo não é o do token); token antigo ou de uma sessão encerrada (troca de senha, convite aceito). Nesses casos a mensagem pede para entrar de novo (`auth.signInAgain`).
403Autenticado, mas sem permissão para esta operação.
500Erro interno do servidor.

Exemplo com curl

curl -X GET "https://api.memberfy.net/api/workflows/triggers" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID"