@gilles Agora implementei o follow-up que mencionei acima:
Ele adiciona uma operação genérica Evento → Definir presença, com:
participante
estado de presença: Vai / Interessado / Não vai / Remover presença
ID do tópico
ator opcional
Assim, seu caso de uso original pode ser construído como:
Post criado → Se for o primeiro post → Evento / Definir presença
usando o autor do evento como participante e definindo-o como Vai.
Testei exatamente esse padrão localmente na interface de Workflows, empilhado sobre o #42932, e confirmei que o usuário é registrado automaticamente como “Vai” no evento.
O PR está atualmente apenas como rascunho porque depende do #42932. Assim que o #42932 for mesclado, farei o rebase dele para o main, o que deixará apenas a diferença relacionada à presença.
Existe um gatilho/evento que é disparado quando uma NOVA tag é criada?
Quando um usuário cria uma nova tag, existe uma forma de adicioná-la automaticamente a um grupo de tags específico? Caso contrário, qual é a abordagem recomendada?
Existe o “Topic Tag Changed” (Tag do tópico alterada). Você pode, então, chamar a API do Discourse e verificar quantas vezes a tag é usada. Se for uma vez / se estiver naquele tópico específico, você sabe que a tag é nova.
Alternativamente, e talvez de forma mais fácil: você pode configurar um webhook para “tag is created” (tag criada) e apontá-lo para um gatilho de webhook de workflow.
Caso de uso: tenho um grupo de tags chamado “artist”. Novos artistas estreiam o tempo todo, portanto, novas tags de artistas continuam surgindo conforme os usuários as criam. Quero que essas novas tags sejam adicionadas automaticamente ao grupo de tags “artist”, em vez de eu ter que adicioná-las manualmente. Existe uma boa maneira de obter esse resultado com Workflows?
É exatamente isso que a etapa de IA faz. O agente de IA primeiro determina se uma nova tag pertence a algum dos grupos definidos (artista / membro / região / tipo de evento / tipo de lançamento); caso não corresponda a nenhum, ela é ignorada e nunca é arquivada em um grupo. Assim, tags aleatórias são filtradas e apenas as tags corretamente classificadas são adicionadas automaticamente a um grupo de tags.
Quero marcar um tópico se ele for criado com um determinado texto. Existe alguma forma de usar minúsculas para {{ $JSON.topic.title }} para que isso avalie como verdadeiro para “pub run”, “Pub Run”, “pUb rUn”?
Parece ser o próprio sistema de expressões JavaScript do Discourse Workflows, avaliado no lado do servidor em um ambiente isolado (sandbox), em vez de uma linguagem de templates separada, como Liquid ou Handlebars.
Portanto, por exemplo:
={{ $json.topic.title.toLowerCase() }}
funciona porque o conteúdo de {{ ... }} é avaliado como JavaScript, e toLowerCase() é o método normal de string do JavaScript.
A implementação está em plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb; ela expõe globais específicos de fluxo de trabalho, como $json, $input, $itemIndex, $trigger, $execution e $().
A sintaxe e os conceitos são bastante semelhantes aos do n8n. Há, na verdade, uma referência explícita ao n8n em outro lugar no código-fonte dos Workflows:
o commit oneboxed abaixo adicionou o comportamento de combinação do nó de mesclagem (merge-node) e inclui um teste descrito como:
defaults clash handling to add_suffix (matches n8n position combine)
Portanto, há evidências de que partes dos Workflows correspondem deliberadamente ao comportamento do n8n, embora eu não tenha encontrado nada que diga explicitamente que a própria linguagem de expressões é copiada ou baseada no n8n. Portanto, eu a descreveria como expressões JavaScript em sandbox fornecidas pelo Discourse Workflows, com algumas convenções semelhantes às do n8n.