新しいユーザー更新自動化の使い方

:bookmark: このガイドでは、Discourse Automation プラグインの新しい「ユーザー更新」トリガーを使用して、ユーザーがプロフィールを更新した際に投稿を作成する方法について説明します。

:person_raising_hand: 必要なユーザーレベル:管理者

Discourse Automation プラグインには、「投稿作成」スクリプト用のトリガーが含まれています。このトリガーを使用すると、特定の条件が満たされた場合に、ユーザーがプロフィールを更新したときに指定されたトピックに自動的に投稿を作成できます。

自動化の設定

  1. Discourse インスタンスの example.discourse.com/admin/plugins/automation に移動します。
  2. 「新しい自動化」をクリックします。
  3. スクリプトとして「投稿を作成」を選択します。
  4. トリガーとして「ユーザー更新後」を選択します。

設定オプション

ユーザーカスタムフィールドとユーザープロフィールフィールド

スクリプトがプロフィール更新後に実行される前に、ユーザーに入力が必要となるフィールドを指定します。カスタムフィールド、プロフィールフィールド、またはその両方を選択できます。

注意: 「ユーザーカスタムフィールド」または「ユーザープロフィールフィールド」の少なくとも一方を指定する必要があります。自動化は、ユーザーが指定されたフィールドをすべて入力した後にのみトリガーされます。

1ユーザーあたり 1 回

このオプションを有効にすると、自動化が 1 ユーザーあたり 1 回のみトリガーされるように制限されます。一度自動化が実行されたユーザーに対しては、その後のプロフィール更新で再度実行されません。

新規ユーザーのみ

このオプションを有効にすると、自動化が有効化後に加入したユーザーに対してのみ実行されるように制限されます。既存のユーザーが自動化をトリガーしたくない、ウェルカムや自己紹介の投稿ワークフローなどで役立ちます。

作成者

投稿の作成者を以下から選択できます:

  • 特定のユーザー
  • システムユーザー(作成者が指定されていない場合のデフォルト)
  • 自動化をトリガーしたユーザー(つまり、プロフィールを更新したユーザー)

プレースホルダーの使用

投稿コンテンツでは、ユーザーのプロフィール情報を含めるためにプレースホルダーを使用できます。以下の組み込みプレースホルダーが利用可能です:

  • %%USERNAME%% — プロフィールを更新したユーザーのユーザー名
  • %%NAME%% — プロフィールを更新したユーザーの本名
  • %%UPDATED_USER_USERNAME%%%%USERNAME%% と同じ
  • %%UPDATED_USER_NAME%%%%NAME%% と同じ
  • %%CREATOR_USERNAME%% — 投稿作成者のユーザー名

さらに、トリガー設定で指定したユーザープロフィールフィールドやユーザーカスタムフィールドもプレースホルダーとして利用可能になります。例えば、ユーザープロフィールフィールドに「所在地」を指定した場合、%%LOCATION%% が利用可能になります。カスタムフィールド名は、大文字に変換され、スペースはアンダースコアに置き換えられます。

以下は例です:

私たちのコミュニティへようこそ、@%%USERNAME%% さん!

%%LOCATION%% から参加してくださることを大変嬉しく思います。
%%CUSTOM_FIELD_1%% に対するあなたの興味についてもっと教えてください!

注意: プレースホルダーはすべて大文字で、%% で囲む必要があります。トリガーの「ユーザーカスタムフィールド」または「ユーザープロフィールフィールド」で必須とされていないプレースホルダーは、ユーザーがその情報を入力していない場合、置換されない可能性があります。

自動化のテスト

ご自身のプロフィールを使用して自動化をテストできます:

  1. 上記の手順に従って自動化を設定します。
  2. トリガーで指定したフィールドを入力して、ユーザープロフィールを更新します。
  3. プロフィールの変更を保存します。
  4. 指定されたトピックを確認し、自動化された投稿が作成されたか確認します。

アクションはユーザーがプロフィールを保存したときにトリガーされますが、設定したトリガー条件に従ってのみ実行される点にご注意ください。

トラブルシューティング

問題が発生した場合は、以下を確認してください:

  1. トリガーで「ユーザーカスタムフィールド」または「ユーザープロフィールフィールド」の少なくとも一方が設定されていることを確認してください(両方を空白のままにすることはできません)。
  2. 設定内のフィールド名が、Discourse インスタンスで定義されているカスタムフィールドやプロフィールフィールドと完全に一致しているか再確認してください。
  3. 投稿コンテンツ内のプレースホルダーが正しく定義され、期待される形式(例:「所在地」プロフィールフィールドの場合は %%LOCATION%%)と一致しているか確認してください。
  4. 「1 ユーザーあたり 1 回」を使用している場合、自動化は既にトリガーしたユーザーを追跡することに注意してください。既にトリガーしたユーザーは、再度トリガーしません。
  5. 「新規ユーザーのみ」を使用している場合、ユーザーアカウントが自動化の有効化後に作成されたことを確認してください。

追加の考慮事項

  • パフォーマンス: プロフィール更新が頻繁に行われる大規模なユーザー数を持つ場合、システムリソースを監視し、自動化がパフォーマンスに影響を与えないようにしてください。
  • ユーザー権限: 自動化が指定されたトピックに投稿を作成するのに十分な権限を持つアカウントを使用していることを確認してください。
  • クローズド/アーカイブされたトピック: 自動化は、クローズドまたはアーカイブされたトピックには投稿を作成しません。
「いいね!」 8

すみません、新米なのですが、文脈を教えていただけますか? ダッシュボードで自動化をオンにしました。しかし、これをどのようにインストールし、どこで見つけられるのでしょうか?

ありがとうございます

「いいね!」 1

/admin/plugins/discourse-automation でオートメーションページを見つけることができます。

二次メニューの一部になるはずです。(スマホのスクリーンショットでごめんなさい :slight_smile:

そこから新しいオートメーションを作成し、この新しいトリガーは「投稿作成」スクリプト用だと思います。

作成して「ユーザー更新後」トリガーを選択すると、OPのスクリーンショットに一致する追加オプションが表示されます。

@JammyDodger 様、ありがとうございます。

新しい自動化の作成場所がどこに埋もれているかのスクリーンショットは非常に参考になりました。ありがとうございます。

ほとんど完了したのですが、解析が難しいエラーが発生しました。

「いいね!」 1

「ユーザープロフィールフィールド」オプションのことだと思います。それも必須のようです。

カスタムフィールドまたはプロフィールフィールドのいずれかが必須であるべきかもしれません。:thinking:

これは @Juan_David_Martínez さんへの質問かもしれませんね :slight_smile:

「いいね!」 5

私からAIの返信が来るとは、あなたが最後に期待することでしょう。しかし、Anthropicが新しいAnthropic Opusモデルをリリースしたので、試してみました。その結果は驚くべきもので、正しいと思います。

Opusとの問題についての会話 AI

sam:

コミットはこちらです:

commit 92814444966892eea7746209e949e6893a89b07c
REDACTED

以下の質問に答えようとしています:

ほとんど完了しましたが、解析が難しいエラーが発生しました:
フィールド user profile は入力する必要があります

また、この機能について、エッジケースや潜在的な落とし穴をまとめたものを、Discourseの自動化におけるコミットとともに教えてください。

claude_3_opus_bot:

「Field user profile must be filled」というエラーメッセージに基づくと、自動化トリガーの「user_profile」フィールドが必要ですが、適切に入力または設定されていなかったようです。

機能とコミットをまとめましょう。

このコミットは、ユーザーがプロファイル情報を更新したときに自動投稿を作成できる、Discourse Automationの新しい機能を紹介します。主な変更点は以下のとおりです。

  1. ユーザーがプロファイルを更新したときにトリガーされる新しいトリガー「user_updated」の追加。

  2. 自動化トリガーに新しいフィールドが導入されました。

    • 「user_profile」:監視するユーザープロファイルフィールドを指定できます。
    • 「custom_fields」:監視するカスタムフィールドを指定できます。
    • 「first_post_only」:自動化がユーザーの最初の投稿に対してのみトリガーされるかどうかを決定します。
    • 「automation_name」:競合を防ぐために自動化に一意の名前を提供します。
  3. ユーザー更新イベントを処理し、自動投稿を作成するために必要なイベントハンドラーとスクリプトの実装。

考えられるエッジケースと落とし穴:

  1. フィールド検証:必要なフィールド(「user_profile」や「custom_fields」など)が自動化設定で適切に入力されていることを確認してください。必要なフィールドが欠落していると、自動化はトリガーされません。

  2. カスタムフィールド名:「custom_fields」フィールドでカスタムフィールド名を指定する際は注意してください。名前がDiscourseで定義されているカスタムフィールドと正確に一致していることを確認してください。一致しない場合、これらのフィールドに対して自動化はトリガーされません。

  3. プレースホルダーの使用:自動投稿コンテンツでプレースホルダーを使用する際は、プレースホルダーが正しく定義されており、期待される形式(例:%%CUSTOM_FIELD_1%%)と一致していることを確認してください。プレースホルダーの使用が間違っていると、予期しない投稿コンテンツにつながる可能性があります。

  4. 最初の投稿のみ:「first_post_only」フィールドがtrueに設定されている場合、自動化はユーザーの最初の投稿に対してのみトリガーされます。ユーザープロファイルへの後続の更新は、自動化をトリガーしません。

  5. 自動化の名前:「automation_name」フィールドに、他の自動化との競合を避けるために、一意で説明的な名前を提供してください。複数の自動化に同じ名前を使用すると、予期しない動作につながる可能性があります。

  6. パフォーマンスに関する考慮事項:ユーザー数が多く、プロファイルの更新が頻繁に行われる場合、自動化がシステムパフォーマンスに影響を与える可能性があります。システムリソースを監視し、必要に応じて自動化設定を最適化してください。

  7. ユーザー権限:自動投稿が適切なユーザー権限で作成されていることを確認してください。自動化は、指定されたトピックに投稿を作成するのに十分な権限を持つユーザーアカウントを使用する必要があります。

「Field user profile must be filled」エラーを解決するには、自動化トリガーの「user_profile」フィールドが、監視するユーザープロファイルフィールドを指定して適切に構成されていることを確認してください。フィールド名を確認し、Discourseの実際のプロファイルフィールド名と一致していることを確認してください。

この機能とコミットに関して、さらに質問がある場合や、お手伝いできることがあればお知らせください。

sam:

カスタムフィールド または プロファイルフィールドのいずれかが必要なのではないでしょうか。
これはバグですか?

claude_3_opus_bot:

もっともなご指摘です。現在の実装に基づくと、「custom_fields」と「user_profile」の両方のフィールドが自動化トリガーで必須としてマークされています。しかし、両方を必須とするよりも、少なくとも一方を必須とする方が、より柔軟でユーザーフレンドリーになる可能性があります。

両方のフィールドを必須とすることは、設計上のバグまたは見落としと見なされる可能性があります。ユーザーがカスタムフィールドまたはプロファイルフィールドのいずれかの変更に基づいて自動化をトリガーしたい場合があるため、両方を必須とすると機能の使いやすさが制限される可能性があります。

これを解決するには、自動化トリガーを変更して、「custom_fields」と「user_profile」をオプションフィールドにし、少なくとも一方を提供することを保証する検証を追加することができます。これにより、ユーザーは特定の要件に応じて、カスタムフィールド、プロファイルフィールド、またはその両方の変更に基づいて自動化をトリガーすることを選択できます。

この変更を実装するためにトリガー定義を変更する方法の例を次に示します。

DiscourseAutomation::Triggerable.add(DiscourseAutomation::Triggerable::USER_UPDATED) do
  field :automation_name, component: :text, required: true
  field :custom_fields, component: :custom_fields
  field :user_profile, component: :user_profile
  field :first_post_only, component: :boolean

  validate do
    if custom_fields.blank? && user_profile.blank?
      errors.add(:base, "At least one of 'custom_fields' or 'user_profile' must be provided.")
    end
  end
end

この変更されたバージョンでは:

  • 「custom_fields」と「user_profile」フィールドから required: true オプションが削除され、オプションになりました。
  • validate メソッドを使用してカスタム検証ブロックが追加されました。
  • 検証ブロック内で、両方の「custom_fields」と「user_profile」が空白かどうかを確認します。
  • 両方のフィールドが空白の場合、少なくとも一方を提供する必要があることを示すエラーをベースエラーに追加します。

この変更により、ユーザーは自動化トリガーを設定する際に、「custom_fields」または「user_profile」のいずれかのフィールドに入力する必要があります。必要に応じて両方のフィールドを提供することを選択できますが、必須ではありません。

これにより、機能の柔軟性と使いやすさが向上し、ユーザーは特定の要件に基づいて自動化をトリガーできるようになりますが、必要な検証は維持されます。

この変更を実装とドキュメントに反映させ、ユーザーが自動化トリガーを正しく構成する方法について明確な指示を提供することを検討してください。

sam:

コードの残りの部分はすでにこれを処理していますか?

claude_3_opus_bot:

混乱させて申し訳ありません。既存のコードを詳しく調べて、どちらかの「custom_fields」または「user_profile」が提供されているケースをすでに処理しているかどうかを確認します。

コードをより注意深くレビューした結果、DiscourseAutomation::EventHandlers.handle_user_updated メソッドが、どちらかの「custom_fields」または「user_profile」が提供されているケースをすでに処理していることがわかりました。以下はコードの関連部分です。

def self.handle_user_updated(user)
  # ...

  required_custom_fields = automation.trigger_field("custom_fields")
  user_data = {}

  # ...

  if required_custom_fields["value"]
    if required_custom_fields["value"].any? { |field| user_custom_fields_data[field].blank? }
      next
    end
    user_data[:custom_fields] = user_custom_fields_data
  end

  required_user_profile_fields = automation.trigger_field("user_profile")
  user_profile_data = UserProfile.find(user.id).attributes
  if required_user_profile_fields["value"]
    if required_user_profile_fields["value"].any? { |field| user_profile_data[field].blank? }
      next
    end
    user_data[:profile_data] = user_profile_data
  end

  # ...
end

このコードでは:

  • 自動化トリガーフィールドから「custom_fields」と「user_profile」の値を取得します。
  • 「custom_fields」が提供され、値がある場合、ユーザーの指定されたカスタムフィールドのいずれかが空白かどうかを確認します。カスタムフィールドが空白の場合、next を使用して自動化トリガーをスキップします。
  • 同様に、「user_profile」が提供され、値がある場合、ユーザーの指定されたプロファイルフィールドのいずれかが空白かどうかを確認します。プロファイルフィールドが空白の場合、自動化トリガーをスキップします。
  • 必要なカスタムフィールドとプロファイルフィールドが存在し、有効な値がある場合、それらを user_data ハッシュに追加します。

これにより、既存のコードは、どちらかの「custom_fields」または「user_profile」が提供されているケースをすでに処理しています。どちらかが提供されていないか、空白の値がある場合、自動化トリガーはスキップされます。

したがって、現在の実装に基づくと、どちらかの「custom_fields」または「user_profile」が提供されているケースを処理するためにコードを変更する必要はないようです。既存のコードはすでにそれを処理しています。

以前の回答についてお詫び申し上げます。コードをより徹底的にレビューするように促していただきありがとうございます。

良いニュースは、自動化プラグインに「どちらか一方」を許可するための簡単な変更を加えることになりそうで、Opusはすでにコードを書いてくれたということです!

これを優先して、今週中に変更を加え、完了したらお知らせします!

「いいね!」 5

Seth_Godinさん、ジェットコースターのような体験でした。私のピカピカの言語モデルがここで役立つととても興奮していましたが、残念ながらたくさんのことを幻覚しました。

良い点としては、幻覚は概念的にひどいものではなかったので、コードに検証の概念を追加しました。

変更はこちらにあります:

しかし、ここで2つの未解決の質問があり、少し役立つでしょう。

  1. 紹介投稿はどのように表示したいですか?
  2. 紹介投稿はいつ作成したいですか?

(1) にはいくつかのオプションがあります:

  • intro投稿は「@intro-bot」などから行われます。例:

    フランスから来た@amazing-userをフォーラムへ歓迎します!

  • intro投稿はユーザーに代わって投稿されます。例:@samがフォーラムに参加し、情報を入力して…

    @sam投稿:こんにちは、私の名前はサムです。オーストラリア出身です!

(2) にもいくつかのオプションがあります:

  • intro投稿を行う前に、すべてのフィールドが保存されるのを待ちます(例:経歴なし、introなし)。
  • いずれかのフィールドが追加されたらすぐに投稿します。

これにより、フィールドが欠落している場合に何をするかという問題も開かれます。


これにより、あなたとあなたのコミュニティにとってこれを素晴らしいものにするために必要な残りの変更を処理するのに十分なデータが得られます。

私の推奨事項:

  1. introは「intro_bot」から行う
  2. すべてが入力された場合にのみintroを投稿する
「いいね!」 2

ローラーコースターの中では、ほとんどローラーコースターらしくない。実際に何ができるのか驚いている。

あなたの推薦は常に聞くようにしているが、個人的な紹介には、返信がボットではなくその人に届くという利点があると思う。それが目標だからね。

そして、はい、満たされたときだけです。

数日前に purple.space にインストールしましたが、まだトリガーされていないようです…

@sam の手に委ねます

ありがとう

「いいね!」 2

セス、承知しました。

これをどのように実行するか数日かけて整理する必要があります。ここで、チームと話し合う必要がある非常に扱いにくいUIの問題があります。

「作成者」は、任意の特定のユーザーを許可するようになりましたが、次の特別なオプションが必要です。

作成者:「[自動化をトリガーしたユーザー]

これをUIにどのように接続すればよいかわからないため、数人と話す必要があります。

さらに、UIを適切にラベル付けし、正しく実装することに注意する必要があります。

「ユーザーがこのプロファイルデータを入力した場合にのみトリガーされます」は、次のように変更する必要があります。
「ユーザーがこれらのすべてのプロファイルフィールドに入力した場合にのみトリガーされます」

こんな未完成のまま引き継いでしまい申し訳ありません。すべてを100%解決し、適切に文書化します。

「いいね!」 3