カスタムオートメーション:Automation pluginでの統合成功のための変更フロー

皆さん、こんにちは。

クエリがソリューション/解決済みとしてマークされたときに、トピックの作成者がプライベートメッセージ(または、スレッドに事前定義されたメッセージで新しい返信が作成される)を受け取るカスタムオートメーションを作成しようとしています。どちらの場合も投票になります。

これはカスタムオートメーションである必要があります。なぜなら、オートメーションプラグインの現在の「PMを送信」スクリプトは、私のユースケースで意図されているトピックの作成者ではなく、ソリューション/解決済みとしてマークされた返信を送信した人にPMを送信するからです。

以下は、返信がソリューションとしてマークされた後にトピックに新しい返信を投稿しようとして作成したスクリプトです(以下のサンプルでは、投票を返信として送信していません。管理者が返されるものを選択できるようにするか、デフォルトのままにしておくかの自由を与えています)。

# 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")

    # ソリューションがマークされたトピックに返信を投稿する
    PostCreator.create!(
      Discourse.system_user,
      topic_id: topic.id,
      raw: reply_text || "このトピックのソリューションがマークされました!",
    )
  end
end

しかし、PostCreator.create!なのか、PostCreator.replyなのか、あるいは何か他のものなのか確信が持てません。そこで一つの疑問が生じました。

  • カスタムオートメーションスクリプト作成時に使用するキーワードはどこかに文書化されていますか?

上記のオートメーションに基づいて、返信をソリューションとしてマークしてトリガーすると、1秒後に画面に「500内部サーバーエラー」というポップアップメッセージが表示されます。

  • 何か見落としていますか?開発テスト目的でローカルマシンでdevcontainersを使用してデプロイしました。
  • カスタムスクリプトを作成した後、何をする必要がありますか?この段階で何か見落としているかもしれませんか?それともスクリプト自体の問題でしょうか?
  • スクリプトが完了した後、進める手順はどこかに文書化されていますか?例えば、すべてがスムーズに機能するようにするためにどのファイルを変更する必要がありますか?(苦労して見つけましたが、正しい名前と説明がオートメーションリストに表示されるように client.en.yml を変更する必要がありました)

「PMを送信」ビルトインスクリプトに基づいて、スクリプトを返信を作成する代わりにPMを送信するように変更する試みを行う予定ですが、以下の点については確信が持てません。

  • ソリューションとしてマークされた返信をした人ではなく、トピックを作成した人をどのようにタグ付けしますか?

ポインタやヘルプがあれば、事前に感謝いたします。

このガイドに従いましたか?

「いいね!」 1

こんにちは @NateDhaliwal

ご返信ありがとうございます。

はい、そのガイドに従いました。後ほどいくつかの提案とともにガイドにコメントします。

ちなみに、カスタムオートメーションを機能させることができました。

500内部サーバーエラーの問題は、「コンテキスト」を誤ってタグ付けしていたことでした。ログを見て正しいものをタグ付けすることで判明しました。

正しいコンテキストの内容を変数に追加すると、500内部サーバーエラーは解決しました。

さらにコード内のロジックも変更されました。

編集:ローカルにデプロイされたインスタンスでカスタムオートメーションを機能させるために、以下のファイルも変更する必要がありました。

カスタムオートメーションスクリプトを作成する

更新:server.en.yml

ymlファイルのscriptablesセクションに、カスタムオートメーションの名前、タイトル、説明を追加します。

更新:client.en.yml

scriptablesにカスタムオートメーション名を追加します。「field」キーワードを追加します。fieldキーワードの中に「field_name」を、その後に「label」と「description」を追加します。

更新:scripts.rb

スクリプトのリストにカスタムオートメーション名を追加します。例:FILE_NAME = “file_name”

更新:plugin.rb

'after_initialize do’の中に、カスタムオートメーションスクリプトへのパスを追加します。例:‘lib/discourse_automation/scripts/file_name’

「いいね!」 1

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