Benutzerdefinierte Automatisierung - Änderungsablauf für erfolgreiche Integration im Automation-Plugin

Hallo zusammen,

ich versuche, eine benutzerdefinierte Automatisierung zu erstellen, bei der der Ersteller des Themas eine private Nachricht erhält, wenn eine Abfrage als Lösung/gelöst markiert wird (oder alternativ eine neue Antwort im Thread mit einer vordefinierten Nachricht erstellt wird – in beiden Fällen wäre es eine Umfrage).

Es muss eine benutzerdefinierte Automatisierung sein, da das aktuelle verfügbare Skript „PMs senden“ im Automatisierungs-Plugin die PMs an denjenigen sendet, der die als Lösung/gelöst markierte Antwort gesendet hat (und nicht an die Person, die das Thema erstellt hat, wie in meinem Anwendungsfall beabsichtigt).

Unten ist das Skript, das ich erstellt habe, um zu versuchen, eine neue Antwort im Thema zu posten, sobald eine Antwort als Lösung markiert ist (im folgenden Beispiel sende ich die Umfrage nicht als Antwort, sondern gebe dem Administrator die Freiheit, zu wählen, was zurückgegeben wird, oder es als Standard zu belassen):

# frozen_string_literal: true

DiscourseAutomation::Scriptable.add(DiscourseAutomation::Scripts::REPLY_ON_SOLUTION) do
  field :reply_text, component: :text
  # field :answering_user, component: :user
  field :once, component: :boolean

  version 1

  triggerables %i[:first_accepted_solution] if defined?(DiscourseSolved)

  placeholder :sender_username
  placeholder :word

  script do |context, fields, automation|
    topic = context["topic"]
    # user = context["user"]
    reply_text = fields.dig("reply_text", "value")

    # Eine Antwort im Thema posten, in dem eine Lösung markiert wurde
    PostCreator.create!(
      Discourse.system_user,
      topic_id: topic.id,
      raw: reply_text || "Eine Lösung wurde für dieses Thema markiert!",
    )
  end
end

Aber ich bin mir nicht sicher, ob es PostCreator.create! oder PostCreator.reply oder vielleicht etwas anderes sein sollte. Was mich zu einer Frage bringt:

  • Gibt es irgendwo eine Dokumentation über die Schlüsselwörter, die bei der Erstellung eines benutzerdefinierten Automatisierungsskripts verwendet werden?

Basierend auf der obigen Automatisierung erhalte ich, wenn ich sie auslöse, indem ich eine Antwort als Lösung markiere, nach 1 Sekunde eine Popup-Meldung mit einer Fehlermeldung „500 Internal Server Error“ auf dem Bildschirm.

  • Fehlt mir etwas? Meine Bereitstellung erfolgte mit devcontainers, auf meinem lokalen Rechner zu Entwicklungszwecken.
  • Was muss getan werden, nachdem das benutzerdefinierte Skript erstellt wurde? Vielleicht fehlt mir in dieser Phase etwas? Oder vielleicht ist es ein Problem im Skript selbst?
  • Gibt es irgendwo eine Dokumentation über die Schritte, die nach Fertigstellung Ihres Skripts unternommen werden müssen? Zum Beispiel: Welche Dateien müssen geändert werden, damit alles reibungslos funktioniert? (Ich habe auf die harte Tour herausgefunden, dass ich die Datei client.en.yml für den korrekten Namen und die Beschreibung in der Automatisierungsliste ändern musste.)

Ich plane, einen Versuch zu wagen, basierend auf dem integrierten Skript „PMs senden“, mein Skript zu ändern, um stattdessen PMs zu senden, anstatt eine Antwort zu erstellen, aber ich bin mir nicht sicher bezüglich Folgendem:

  • Wie würde ich die Person markieren, die das Thema erstellt hat, und nicht diejenige, die die als Lösung markierte Antwort erhalten hat?

Vielen Dank im Voraus für jeden Hinweis und jede Hilfe.

Hast du dieser Anleitung gefolgt?

1 „Gefällt mir“

Hallo @NateDhaliwal ,

Vielen Dank für Ihre Antwort.

Ja, ich habe diese Anleitung befolgt… Ich werde die Anleitung anschließend mit einigen Vorschlägen kommentieren.

Ich habe die benutzerdefinierte Automatisierung übrigens zum Laufen gebracht.

Das Problem mit dem internen Serverfehler 500 war, dass ich den falschen “Kontext” markiert habe. Das habe ich durch die Überprüfung der Protokolle herausgefunden und den richtigen markiert.

Sobald der Inhalt des richtigen Kontexts in eine Variable eingefügt wurde, wurde der interne Serverfehler 500 behoben.

Weitere Logik im Code wurde ebenfalls geändert.

Bearbeiten: Um die benutzerdefinierte Automatisierung in meiner lokal bereitgestellten Instanz zum Laufen zu bringen, musste ich auch die folgenden Dateien ändern:

Erstellen Sie Ihr benutzerdefiniertes Automatisierungsskript

Aktualisierung: server.en.yml

Fügen Sie den Namen, den Titel und die Beschreibung der benutzerdefinierten Automatisierung im Abschnitt “scriptables” der YML-Datei hinzu.

Aktualisierung: client.en.yml

Fügen Sie den Namen der benutzerdefinierten Automatisierung unter “scriptables” hinzu; fügen Sie das Schlüsselwort “field” hinzu; fügen Sie innerhalb des Schlüsselworts “field” “field_name” gefolgt von “label” und “description” hinzu.

Aktualisierung: scripts.rb

Fügen Sie den Namen der benutzerdefinierten Automatisierung zur Liste der Skripte hinzu. Beispiel: DATEINAME = “dateiname”

Aktualisierung: plugin.rb

Fügen Sie innerhalb von ‘after_initialize do’ den Pfad zum benutzerdefinierten Automatisierungsskript hinzu. Beispiel: ‘lib/discourse_automation/scripts/dateiname’

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.