皆さん、こんにちは。
クエリがソリューション/解決済みとしてマークされたときに、トピックの作成者がプライベートメッセージ(または、スレッドに事前定義されたメッセージで新しい返信が作成される)を受け取るカスタムオートメーションを作成しようとしています。どちらの場合も投票になります。
これはカスタムオートメーションである必要があります。なぜなら、オートメーションプラグインの現在の「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を送信するように変更する試みを行う予定ですが、以下の点については確信が持てません。
- ソリューションとしてマークされた返信をした人ではなく、トピックを作成した人をどのようにタグ付けしますか?
ポインタやヘルプがあれば、事前に感謝いたします。