Flujos de trabajo de Discourse

¡Gracias, eso lo resolvió!

3 Me gusta

@gilles Ya he implementado la continuación que mencioné arriba:

Agrega una operación genérica Evento → Establecer asistencia, con:

  • asistente
  • estado de asistencia: Asistiré / Interesado / No asistiré / Eliminar asistencia
  • ID del tema
  • actor opcional

Así, tu caso de uso original se puede construir como:

Publicación creada → Si es la primera publicación → Evento / Establecer asistencia

usando al autor del evento como asistente y configurándolo como Asistiré.

Probé ese patrón exacto localmente en la interfaz de Workflows, apilado sobre #42932, y confirmé que el usuario se registra automáticamente como Asistiré en el evento.

La PR es actualmente solo un borrador porque depende de #42932. Una vez que #42932 se fusione, la rebasearé sobre main, lo que dejará solo el diff de asistencia.

2 Me gusta

@Ethsim2 Gracias, eres un crack :+1: :clap:

1 me gusta

¿Existe alguna forma de reintentar un flujo de trabajo (con el mismo evento), de manera similar a cómo, con un webhook, se puede reenviar una carga útil?

No, lo siento, no lo soportamos de momento

2 Me gusta

¿Existe un disparador o evento que se active cuando se crea una NUEVA etiqueta?

Cuando un usuario crea una nueva etiqueta, ¿hay alguna forma de añadirla automáticamente a un grupo de etiquetas específico? Si no, ¿cuál es el enfoque recomendado?

1 me gusta

No, no disponemos de nada de eso. ¿Podrías ampliar tu caso de uso, por favor?

¿Podrías hacer lo siguiente:

  1. Revisar todos los temas nuevos
  2. Comprobar la etiqueta contra las existentes
  3. Si es una etiqueta nueva, <insert action>
1 me gusta

Existe “Topic Tag Changed”. Luego podrías llamar a la API de Discourse y ver cuántas veces se usa la etiqueta. Si es una vez / si está en ese tema específico, sabes que la etiqueta es nueva.

Alternativamente, y quizás más fácil: podrías configurar un webhook para “tag is created” y apuntarlo a un disparador de webhook de flujo de trabajo.

1 me gusta

Caso de uso: tengo un grupo de etiquetas llamado “artista”. Los nuevos artistas debutan constantemente, por lo que aparecen nuevas etiquetas de artistas a medida que los usuarios las crean. Quiero que esas nuevas etiquetas se añadan automáticamente al grupo de etiquetas “artista”, en lugar de tener que añadirlas manualmente. ¿Existe una buena manera de lograr esto con Workflows?

¿Cómo sabes que es una etiqueta de artista y no otra etiqueta al azar?

Eso es exactamente lo que maneja el paso de IA. El agente de IA primero determina si una nueva etiqueta pertenece a alguno de los grupos definidos (artista / miembro / región / tipo de evento / tipo de lanzamiento); si no coincide con ninguno, se omite y nunca se archiva en un grupo. De esta manera, las etiquetas aleatorias se filtran y solo las etiquetas clasificadas correctamente se agregan automáticamente a un grupo de etiquetas.

1 me gusta

de acuerdo, agregaré un disparador para la creación de etiquetas y un nodo para añadir etiquetas a un grupo de etiquetas

4 Me gusta

Hemos añadido lo siguiente a los flujos de trabajo:

7 Me gusta

Quiero etiquetar un tema si se crea con un texto específico. ¿Existe alguna forma de usar minúsculas para {{ $JSON.topic.title }} para que esta condición evalúe como verdadera para “pub run”, “Pub Run”, “pUb rUn”?

(extracto)

{
      "id": "db9e2fa2-0008-4110-9c77-f1060124d7e7",
      "type": "condition:if",
      "typeVersion": "1.0",
      "name": "If",
      "parameters": {
        "combinator": "and",
        "conditions": [
          {
            "id": "29d3ed6c-e984-4d9b-83bf-861bd11b4b0a",
            "operator": {
              "type": "string",
              "operation": "contains",
              "singleValue": false
            },
            "leftValue": "={{ $json.topic.title }}",
            "rightValue": "pub run"
          }
        ]
      },

1 me gusta

¿has probado {{ $JSON.topic.title.toLowerCase() }}?

1 me gusta

gracias, ¡funcionó!

¿Qué lenguaje de plantillas se utiliza?

Parece ser el propio sistema de expresiones de JavaScript de Discourse Workflows, evaluado en el servidor dentro de un entorno aislado (sandbox) y no un lenguaje de plantillas separado como Liquid o Handlebars.

Por lo tanto, por ejemplo:

={{ $json.topic.title.toLowerCase() }}

funciona porque el contenido de {{ ... }} se evalúa como JavaScript, y toLowerCase() es el método de cadena estándar de JavaScript.

La implementación se encuentra en plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb; expone variables globales específicas del flujo de trabajo, como $json, $input, $itemIndex, $trigger, $execution y $().

La sintaxis y los conceptos son bastante similares a los de n8n. De hecho, hay una referencia explícita a n8n en otra parte del código fuente de Workflows:

el commit unificado a continuación añadió el comportamiento de combinación del nodo de fusión e incluye una prueba descrita como:

defaults clash handling to add_suffix (matches n8n position combine)

Por lo tanto, hay evidencia de que partes de Workflows coinciden deliberadamente con el comportamiento de n8n, aunque no pude encontrar nada que afirmara explícitamente que el propio lenguaje de expresiones fue copiado o basado en n8n. Por lo tanto, lo describiría como expresiones de JavaScript en un entorno aislado proporcionadas por Discourse Workflows, con algunas convenciones similares a las de n8n.

3 Me gusta

Sería genial tener acceso basado en grupos para los formularios :face_holding_back_tears:

2 Me gusta

He notado que el paso de Agente de IA requiere que el agente tenga la función Bot activada. ¿Por qué es esto necesario? ¿Se puede documentar en algún lugar? Pasé unos minutos intentando averiguar por qué no podía seleccionar un agente específico en el menú desplegable :sweat_smile:

1 me gusta