Fluxos de trabalho do Discourse

:discourse2: Resumo Discourse Workflows permite que administradores criem automações avançadas por meio de um construtor visual para automatizar quase tudo na sua comunidade.
:open_book: Guia de Instalação Este plugin está incluído no núcleo do Discourse. Não há necessidade de instalar o plugin separadamente.

Workflows é um construtor de automação visual que permite que administradores criem automações avançadas e com várias etapas usando um canvas de arrastar e soltar — conectando gatilhos, condições, ações e nós de controle de fluxo para automatizar quase tudo no seu site Discourse.

:discourse: Discourse Workflows está disponível nos planos Business ou Enterprise.

Conceitos-chave

Se você estiver familiarizado com outras ferramentas de automação, provavelmente reconhecerá a maioria do vocabulário usado nos Workflows:

  • Workflow: Uma automação salva composta por nós conectados.
  • : Uma única etapa em um workflow: gatilhos, condições, ações e controle de fluxo/utilitários.
  • Gatilho: O ponto de início de um workflow. Um gatilho pode ser manual ou iniciado por um evento específico — criação de um tópico, acionamento de um agendamento ou recebimento de um webhook.
  • Condição: Um nó de roteamento que avalia uma regra e divide o fluxo em ramificações. Por exemplo, um nó Se roteia o fluxo com base em uma avaliação verdadeira ou falsa.
  • Ação: Um nó que realiza algo específico — criar uma publicação, conceder um distintivo, chamar uma API externa, etc.
  • Item: Os dados que fluem entre os nós. Os itens são objetos JSON que você pode inspecionar nos logs de execução e referenciar usando expressões.
  • Expressão: Um valor dinâmico escrito como {{ ... }} que é resolvido em tempo de execução e é usado para referenciar dados de nós anteriores, variáveis de workflow ou configurações do site.

Criando um workflow

Para criar um workflow:

  1. Vá para Admin > Plugins > Workflows e clique em Novo workflow.

  1. Nomeie seu workflow.
  2. Clique em Adicionar primeira etapa e escolha seu gatilho.

  1. Use o botão + para adicionar nós adicionais.

  1. Clique duas vezes em um nó para configurá-lo. No painel de configuração, detalhes sobre as entradas do nó serão exibidos no lado esquerdo e detalhes sobre as saídas do nó serão exibidos no lado direito da tela. Você pode precisar executar o workflow uma vez antes de ver todos os vários detalhes.

  1. Quando estiver pronto para colocar em produção, clique em Publicar.

:light_bulb: Dicas:

  • Use post-its, localizados no menu de três pontos no canto superior direito do construtor, para documentar o que seu workflow faz. Os post-its não têm nenhum efeito no workflow, mas facilitam a compreensão de modelos e workflows compartilhados.
  • Use o nó de log durante o desenvolvimento para enviar valores de depuração para o log de execução sem impactar o comportamento do workflow.
  • Você pode exportar e importar workflows como JSON para compartilhá-los com colegas de equipe ou recriar workflows de outros sites.

Expressões e dados dinâmicos

Campos que aceitam expressões mostram um botão {/} no editor. Clique nele para navegar pelos dados disponíveis do gatilho e dos nós anteriores e inserir uma referência.

Expressões comuns

Expressão O que retorna
{{ $json.topic.title }} O título do tópico do item atual
{{ $json.post.url }} A URL da publicação do item atual
{{ $json.user.username }} O nome de usuário do usuário associado ao item atual
{{ $vars.my_variable }} O valor de uma variável de workflow chamada my_variable
{{ $site_settings.title }} O título do seu site
{{ $execution.id }} O ID exclusivo da execução atual
{{ $('Nome do Nó').item.json.property }} Saída de um nó upstream específico, referenciado pelo seu nome no canvas

Valores estáticos e dinâmicos

Campos que começam com = são tratados como expressões. Campos sem um = inicial são tratados como texto simples. O seletor de expressões cuida disso automaticamente para você.

Gerenciando workflows

Existem várias funcionalidades que ajudam você a gerenciar seus workflows existentes.

Execuções

Toda vez que um workflow é executado, o Discourse registra uma execução. Vá para Workflows → Execuções para ver o histórico.

Cada execução mostra a data e a hora em que foi concluída e seu status:

  • Concluído: Executou até o fim sem erro.
  • Erro: Falhou em um nó específico; clique na execução para ver o erro e os dados que o causaram.
  • Em execução: Processando atualmente.
  • Aguardando: Pausado devido a um nó de Espera; aguardando uma resposta em um formulário, modal, aprovação de chat; ou um nó de Chamar Workflow aguardando a conclusão de um sub-workflow.
  • Limitado por taxa: O workflow foi ignorado devido à limitação de taxa.
  • Ignorado: O gatilho foi acionado, mas o workflow não estava publicado.

Você pode clicar no botão Mostrar para uma análise mais detalhada da execução do workflow. Isso mostra cada etapa do workflow, que você pode expandir para ver os detalhes exatos, e a duração dessa etapa.

Na parte inferior da página, você pode ver a duração geral do workflow. Você também pode Exportar o log, se necessário, para fins de compartilhamento ou solução de problemas.

Configurações

Na guia Workflows → Configurações, você pode:

  • Configurar um workflow de erro que deve ser acionado se houver falhas quando este workflow for executado. Se o workflow tiver um gatilho de erro, ele lidará com os erros conforme definido por esse gatilho.
  • Definir o fuso horário para gatilhos de agendamento. O workflow usará o fuso horário do site como padrão se isso não estiver definido.
  • Excluir o workflow. :warning: Isso é permanente, portanto, você deve considerar exportar seu workflow (acessível no menu de três pontos no canto superior direito do construtor de workflow) antes de prosseguir.

Versões

Toda vez que você fizer uma atualização no workflow, salvaremos a(s) versão(ões) anterior(es). Isso facilita Reverter mudanças que não funcionaram como você esperava.

Variáveis

Variáveis são pares chave-valor limitados a um único workflow. Defina-as no painel Variáveis do workflow e referencie-as em qualquer lugar com {{ $vars.nome_da_chave }}. Use variáveis para armazenar valores de configuração (como um ID de categoria ou um nome de usuário de destinatário) que você deseja poder alterar sem editar o gráfico do workflow.

Credenciais

Alguns nós — como solicitação HTTP ou Agente de IA — precisam se autenticar em serviços externos. Armazene chaves de API e segredos em Workflows → Credenciais em vez de colá-los diretamente nos campos dos nós. As credenciais são criptografadas em repouso e podem ser reutilizadas em vários workflows.

Tipos de credenciais suportados:

  • Autenticação Básica (nome de usuário + senha)
  • Token Bearer
  • Autenticação por Cabeçalho (nome e valor de cabeçalho personalizados)

Tabelas de dados

Tabelas de dados são tabelas estruturadas e persistentes internas ao plugin Workflows. Use o nó Tabela de dados para ler ou gravar nelas. Elas suportam tipos de coluna string, number, boolean e date.

Tabelas de dados são úteis para:

  • Deduplicação — registre quais usuários ou tópicos um workflow já processou
  • Estado — rastreie se um tópico está em uma etapa específica de um processo
  • Consultas — armazene mapeamentos (como ID do tópico → membro da equipe designado) que seus workflows podem consultar

Execuções

Você pode ver todas as execuções de todos os workflows na guia Execuções. O formato e a função são muito semelhantes às execuções específicas de workflow, mas mostram em todos os workflows para facilitar o monitoramento.

Modelos

Quando você cria um novo workflow, pode começar com um modelo em vez de um canvas em branco. Os modelos são workflows pré-construídos para casos de uso comuns — eles são anotados com post-its explicando como funcionam e são uma boa maneira de aprender o sistema.

:megaphone: Interessado em ver mais modelos? Trabalharemos para expandir a biblioteca de modelos disponíveis ao longo do tempo, mas por favor nos avise se houver um modelo que você gostaria de ver aqui para facilitar o uso dos Workflows.

Você também pode exportar qualquer workflow como um arquivo JSON para compartilhá-lo com outras pessoas ou usá-lo como seu próprio ponto de partida.

19 Curtiram

Olá, ao tentar ativar este plugin, recebi a seguinte mensagem de erro: Você não tem permissão para alterar as configurações ocultas: discourse_workflows_enabled

2 Curtiram

No momento, deve ser ativado em /admin/config/upcoming-changes, não em admin/plugins

3 Curtiram

Oi, se eu entendi bem o propósito desses Workflows, um exemplo de modelo que eu gostaria é adicionar um botão de administrador aos tópicos que faria o tópico subir imediatamente. É viável? :grinning_face:

1 Curtiu

Olá!

Como garantimos que o “Build with AI” utilize um LLM específico?
Ao usar o Google Gemini como LLM padrão em nosso sistema, estou recebendo o seguinte erro: Carga útil JSON inválida recebida. Nome desconhecido “additionalProperties” em ‘tools[0].function_declarations[5].parameters’: Não é possível encontrar o campo

Obrigado!

1 Curtiu

Qual modelo do Gemini você está usando? Para alterá-lo, selecione o agente de fluxo de trabalho e substitua o LLM padrão por outro.

1 Curtiu

E aí, Sam! Gemini 3 Flash.

Encontrei a configuração de fluxo de trabalho e realmente estava como Gemini Flash 3. Mudei para o GPT Nano 5, mas continuo recebendo o mesmo erro.

Mudei até o padrão para todos para GPT Nano 5 e verifiquei a configuração individual do fluxo de trabalho. Configurei para substituir pelo GPT Nano 5 também.

Mas nada disso funcionou. :frowning:

1 Curtiu

Há alguma chance de você ter acesso ao Luna, Terra, 3.5 Flash ou Sonnet?

O agente de IA do fluxo de trabalho tem bastante ferramentas, então geralmente requer um LLM mais recente.

1 Curtiu

Jurei que o Flash Lite funcionava, mas não funcionou. O GPT Nano 5 definitivamente funcionou. Parece que este é um problema conhecido, mesmo no WordPress. Aqui está um link para referência. O que precisamos fazer é, sempre que estivermos usando um provedor Gemini, remover o item additionalProperties do JSON Response Schema: Remove `additionalProperties` from the JSON response schema - Pull Request #18 - WordPress/ai-provider-for-google - GitHub

caramba, estou desenvolvendo uma migração para a API de interações, então acho que isso deve nos proporcionar uma integração muito mais estável com os modelos Gemini, espero que na próxima semana.

1 Curtiu

Incrível e obrigado pela resposta rápida! Encontrei mais alguns conteúdos, mas acho que você já entendeu a ideia. :wink:

Esta é a própria explicação do Gemini, da Google. Espero que faça sentido? Eu não entendo tudo, mas sei que ele engasga com essa propriedade. LOL.

TL;DR: O erro persiste porque a Google usa dois motores completamente diferentes para processamento de esquemas. Embora o Gemini suporte o JSON Schema padrão para Saídas Estruturadas (response_json_schema), seu motor de Chamada de Função / Execução de Ferramenta ainda usa o parser Protobuf OpenAPI 3.0 rigoroso da Google, que rejeita ou engasga com additionalProperties.

1. Chamada de Ferramenta vs. Saída Estruturada (A Divisão dos Motores)

A API Gemini da Google valida esquemas em dois lugares separados:

  • Saídas Estruturadas (response_json_schema): Projetada para formatar a resposta final do modelo. Usa a análise padrão do JSON Schema e lida com additionalProperties de forma limpa.

  • Chamada de Ferramenta / Função (tools[0].function_declarations): Projetada para passar ferramentas de site (como pesquisa de IA do Discourse, ações de persona ou navegação na web) para o modelo. Este endpoint analisa esquemas para o objeto Protobuf interno google.ai.generativelanguage.v1beta.Schema da Google.

Como o endpoint de ferramenta mapeia parâmetros para um subconjunto legado do OpenAPI 3.0, enviar additionalProperties em uma declaração de função faz com que o parser da API retorne um 400 Bad Request ou MALFORMED_FUNCTION_CALL.

GitHub

2. Por Que Frameworks Como o Discourse o Injetam

Frameworks de orquestração (Discourse AI, Model Context Protocol/MCP, LangChain, Pydantic, Zod) geram automaticamente esquemas JSON para ferramentas personalizadas:

  1. Padrões de Execução Rigorosa: Os geradores adicionam automaticamente "additionalProperties": false para forçar a tipagem rigorosa de parâmetros.

  2. Mapas/Dicionários Dinâmicos: Se um parâmetro de ferramenta usar um hash/dicionário de chave-valor (por exemplo, dict[str, Any] ou um Hash do Ruby), os geradores de esquema produzem "additionalProperties": { "type": "string" }.

  3. Carga Não Sanitizada: Quando o Discourse envia esses esquemas de ferramenta gerados automaticamente para o endpoint de declarações de função da Google, o parser Protobuf do Gemini sinaliza additionalProperties como um campo inválido ou desconhecido.

3. Como Resolver Isso no Discourse

Se você estiver vendo esse erro nas chamadas de ferramentas do Discourse AI:

  • Evite Parâmetros de Hash/Dict Dinâmicos: Certifique-se de que os parâmetros de ferramentas personalizadas definam explicitamente cada chave esperada sob properties, em vez de usar objetos de abertura livre.

  • Serialize Dados Dinâmicos como Strings: Se uma ferramenta precisar aceitar pares chave-valor arbitrários, defina o parâmetro como STRING e instrua a ferramenta a aceitar uma string JSON serializada.

  • Filtre additionalProperties em Ferramentas Personalizadas: Se você tiver ferramentas de IA personalizadas definidas em /admin/plugins/discourse-ai/ai-tools, edite o esquema JSON do parâmetro para remover quaisquer blocos "additionalProperties".