Flussi di lavoro di Discourse

Grazie, ha risolto il problema!

3 Mi Piace

@gilles Ho implementato il follow-up di cui parlavo sopra:

Aggiunge un’operazione generica Evento → Imposta presenza, con:

  • partecipante
  • stato di presenza: In programma / Interessato / Non in programma / Rimuovi presenza
  • ID del topic
  • attore opzionale

Quindi il tuo caso d’uso originale può essere costruito come:

Post creato → Se primo post → Evento / Imposta presenza

utilizzando l’autore dell’evento come partecipante e impostandolo su In programma.

Ho testato esattamente questo pattern localmente nell’interfaccia grafica di Workflows, impilato su #42932, e ho confermato che l’utente viene automaticamente registrato come In programma all’evento.

La PR è attualmente solo una bozza perché dipende da #42932. Non appena #42932 verrà unito, la riporterò su main, il che lascerà solo la differenza relativa alla presenza.

2 Mi Piace

@Ethsim2 Grazie, sei un campione :+1: :clap:

1 Mi Piace

Esiste un modo per ripetere un workflow (con lo stesso evento), simile a come, con un webhook, è possibile rispedire un payload?

No, mi dispiace, ma al momento non supportiamo questa funzione.

2 Mi Piace

Esiste un trigger/evento che viene attivato quando viene creata una NUOVA tag?

Quando un utente crea una nuova tag, esiste un modo per aggiungerla automaticamente a un gruppo di tag specifico? In caso contrario, qual è l’approccio consigliato?

1 Mi Piace

No, non disponiamo di nessuna di queste funzionalità. Potresti espandere il tuo caso d’uso, per favore?

Potresti farlo in questo modo:

  1. Controlla tutti i nuovi argomenti
  2. Verifica l’etichetta rispetto a quelle esistenti
  3. Se l’etichetta è nuova, <insert action>
1 Mi Piace

C’è “Topic Tag Changed”. Potresti quindi chiamare l’API di Discourse per vedere quante volte il tag viene utilizzato. Se ne viene fatto uso una sola volta / se è presente in quel topic specifico, sai che il tag è nuovo.

In alternativa, e forse più semplicemente: potresti configurare un webhook per “tag is created” e indirizzarlo a un trigger di webhook del workflow.

1 Mi Piace

Caso d’uso: ho un gruppo di tag denominato “artista”. Poiché nuovi artisti esordiscono costantemente, continuano a comparire nuovi tag quando gli utenti li creano. Desidero che questi nuovi vengano aggiunti automaticamente al gruppo di tag “artista”, anziché doverli aggiungere manualmente. Esiste un buon modo per ottenere questo risultato con Workflows?

Come fai a sapere che si tratta di un tag per artisti e non di un tag casuale?

È esattamente ciò che gestisce il passaggio AI. L’agente AI determina innanzitutto se un nuovo tag appartiene a uno dei gruppi definiti (artista / membro / regione / tipo di evento / tipo di release); se non corrisponde a nessuno, viene ignorato e non viene mai inserito in un gruppo. In questo modo i tag casuali vengono filtrati e solo i tag correttamente classificati vengono aggiunti automaticamente a un gruppo di tag.

1 Mi Piace

ok, aggiungerò un trigger per la creazione di un tag e un nodo per aggiungere un tag a un gruppo di tag

4 Mi Piace

Abbiamo aggiunto quanto segue ai workflow:

7 Mi Piace

Voglio assegnare un tag a un argomento se viene creato con un testo specifico. Esiste un modo per usare le minuscole per {{ $JSON.topic.title }} in modo che questa condizione risulti vera per “pub run”, “Pub Run” e “pUb rUn”?

(estratto)

{
      "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 Mi Piace

hai provato {{ $JSON.topic.title.toLowerCase() }}?

1 Mi Piace

grazie – ha funzionato!

quale linguaggio di template viene utilizzato?

Sembra che si tratti del sistema di espressioni JavaScript di Discourse Workflows, valutato lato server in un ambiente sandbox, anziché di un linguaggio di template separato come Liquid o Handlebars.

Quindi, ad esempio:

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

funziona perché il contenuto di {{ ... }} viene valutato come JavaScript e toLowerCase() è il normale metodo stringa di JavaScript.

L’implementazione si trova in plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb; espone globali specifiche per i workflow come $json, $input, $itemIndex, $trigger, $execution e $().

La sintassi e i concetti sono piuttosto simili a quelli di n8n. In realtà, esiste un riferimento esplicito a n8n altrove nel sorgente di Workflows:

il commit oneboxed di seguito ha aggiunto il comportamento di combinazione del nodo merge e include un test descritto come:

defaults clash handling to add_suffix (matches n8n position combine)

Quindi ci sono prove che alcune parti di Workflows corrispondano deliberatamente al comportamento di n8n, sebbene non sia riuscito a trovare nulla che affermi esplicitamente che il linguaggio di espressione stesso sia copiato o basato su n8n. Lo descriverei quindi come espressioni JavaScript sandbox fornite da Discourse Workflows, con alcune convenzioni simili a quelle di n8n.

3 Mi Piace

Sarebbe davvero fantastico avere un accesso basato sui gruppi per i moduli :face_holding_back_tears:

2 Mi Piace

Ho notato che il passaggio “AI Agent” richiede che l’agente abbia la funzione “Bot” abilitata. Perché è necessario? Potrebbe essere documentato da qualche parte? Ho speso alcuni minuti a cercare di capire perché non riuscivo a selezionare un particolare agente nel menu a tendina :sweat_smile:

1 Mi Piace