Zapierを使用してDiscourse招待メールの送信を自動化する

Discourse API を使用すると、外部アプリケーションでアクションが実行されたときに、フォーラムから招待メールを自動的に送信できます。多くのアプリケーションでは、コードを書かずにセットアップするために Zapier を使用できます。

一般的なユースケースは、製品の購入時、または外部サービスでのサインアップ時にユーザーをフォーラムに招待することです。このトピックの例では、Zapier WordPress インテグレーションを使用して、WordPress サイトで新しいユーザーがサインアップしたときに Discourse から招待を送信するようにトリガーします。

Zapier でトリガー ステップを設定する

Zapier ダッシュボードにアクセスし、招待メールのトリガーにしたいアプリケーションを検索します。以下のスクリーンショットでは、トリガーとして WordPress を選択しました。

これに必要な設定は、WordPress Zap を WordPress アカウントに接続し、Zap をトリガーするために新しいユーザー イベントを選択することだけです。

招待を送信するためのアクション ステップを設定する

「ステップの追加」ボタンをクリックし、ドロップダウン メニューから「アクション/検索」をクリックします。

検索メニューに「webhook」と入力し、アクション メニューから Webhooks by Zapier を選択します。Webhook アクション ステップが Zap のサイドバーに追加され、Webhook に実行させたいリクエストの種類を選択できるフォームが開きます。

フォームで POST を選択し、「続行」をクリックします。

開いたフォームでは、Discourse に対して行われる POST リクエストを設定できます。URL フィールドには、フォーラムの基本 URL の後に /invites を入力します。たとえば、私のフォーラムの基本 URL が https://demo.scossar.com の場合、招待ルートへの完全なリンクは https://demo.scossar.com/invites になります。

次に、フォームの ペイロードの種類データ、および ヘッダー セクションを設定する必要があります。フォームの他のセクションは、デフォルト値のままにしておきます。

ペイロードの種類は、Zapier がペイロードをどの形式で送信するかを決定します。これは Json に設定する必要があります。

「データ」セクションは、招待を送信するメール アドレスを Discourse に伝え、オプションでグループ名のリストとカスタム メッセージを設定するために使用されます。グループに追加したりカスタム メッセージを含めたりせずにユーザーを招待するには、「Key」に email と入力し、次に「フィールドの挿入」アイコンをクリックしてフィールドのドロップダウン メニューを開きます。リストを下にスクロールして、トリガー アプリから渡されたユーザーのメールを含む値を見つけます。WordPress をトリガー アプリとして使用する場合、完成した「データ」セクションは次のように表示されます。

ユーザーが招待を承諾したときに自動的にグループに追加するには、「データ」セクションの :heavy_plus_sign: アイコンをクリックして新しいフィールドを追加します。フィールドの Key を group_names に設定します。フィールドの Value には、ユーザーを追加したいグループ名をコンマ区切りリストとして設定します。招待メールにカスタム メッセージを含めるには、Key を custom_message に設定し、Value に送信したいメッセージを設定する別のフィールドを作成します。

注: Zap のトリガー ステップの後にコード ステップを追加することで、特定のユーザーに対してグループ名とカスタム メッセージを動的に設定できるはずです。

ヘッダー セクションは、リクエストを認証するために使用されます。ヘッダー フィールドを設定するには、Discourse サイトで API キーを生成する必要があります。これを行うには、Discourse サイトの管理者 / API ページに移動し、「新しい API キー」ボタンをクリックします。キーを作成するときは、スタッフ ユーザーに割り当て、スコープを Global に設定するか、Invites > Create ボックスにチェックを入れた Granular スコープを使用します。

次に、Zap のヘッダー セクションで、次のキー/値のペアを入力します。角括弧で囲まれた値は、サイトに適した値に置き換えてください。キー名の大小文字は重要です。

Api-Username: <inviteを送信したいスタッフユーザー名>
Api-Key: <生成したAPIキー>
Content-Type: application/json

フォームは、Api-Username と Api-Key を使用した場合、下のスクリーンショットと似ているはずです。

「続行」ボタンをクリックします。

次に、「Test trigger(トリガーをテスト)」ボタンをクリックしてインテグレーションをテストできるようになります。テストは、トリガー ステップで設定したデータを使用して実行されます。すべてが正しく設定されていれば成功メッセージが表示され、トリガー ステップで設定したユーザーがまだ Discourse フォーラムに存在しない場合は、招待メールが送信され、Zapier に成功メッセージが表示されます。テスト ステップがパスしたら、「完了」ボタンをクリックして Zap をオンにします。

Zapier を使用して Discourse API に他の種類のリクエストを行う方法の詳細については、Make requests to the Discourse API with Zapier を参照してください。

「いいね!」 25

これは素晴らしいですね!機能と明確な指示をありがとうございます!

アプリ内からできるのと同じように、招待を生成する際にカスタムグループも設定することは可能でしょうか?

これは、Headers フィールドに group_names キーを追加することで実現できます。その値には、グループ名をカンマ区切りで指定します。このトピックに例を追加しておきますね。

このトピックで紹介されている基本的なアプローチは、Discourse へのあらゆる API リクエストに適用可能です。

「いいね!」 3

すばらしい!! ダイアログにはカスタムメッセージも受け付けられると思うのですが、同じ方法でできるでしょうか?

「いいね!」 1

今朝、これを設定しようとしたところ、400 エラーが発生しました。少しデバッグした結果、認証関連の手順は指示通りヘッダーセクションに含める必要がありますが、実際のフォーム値(メールアドレス、グループ名、カスタムメッセージ)はキー/値のセットとしてデータセクションに含める必要があることがわかりました。

その変更を加えたところ、完璧に動作しました!

「いいね!」 1

ありがとうございます、@simon さん!

メタに、読者がオファーに登録した後に招待メールを自動送信するための代替手段に関する説明はありますか?もしあれば、ここにリンクを貼っていただけますか?

そのテスト、ありがとうございます!確認したところ、リクエストにcustom_messagegroup_namesが含まれていない場合、emailをヘッダーに含めることで動作することがわかりました。ただし、メールアドレスを渡す正しい方法ではありません。そこで、ガイドを更新し、メールアドレスの設定に「Data」セクションを使用する方法を記載するとともに、ユーザーをグループに追加する方法やカスタムメッセージを含める方法の例も追加しました。

「いいね!」 4

Zapier に似た他のサービスは存じ上げていませんが、おそらくいくつか存在するはずです。サードパーティのサービスを使わずに、Discourse API に直接リクエストを送ることも可能です。これを行う主な要件は、リクエストを送信するためのアプリケーションを持っていることです。これは、WordPress サイトのような非常にシンプルなもので構いません。

API の使い方を始めるための Meta 上の良いリソースは Reverse engineer the Discourse API です。API リクエストは、お使いのコンピュータのターミナルから CURL でテストすることも、Postman のようなサービスを使ってテストすることもできます。

「いいね!」 2

ありがとう!あなたが書くことのほとんどは僕にはさっぱりわからないけど…でもリンクをチェックして、何か理解できるか見てみるね :smiley:

「いいね!」 2

@simon

簡単な質問です:

Zapier を介して自動化された招待を送信した場合、これはすでに個別化されたリンクになるのでしょうか、それとも私のフォーラムの一般的なログインページへのリンク(そこでユーザーはログインしたりアカウントを作成したりできる場所)になるのでしょうか?

ログインページを知っている誰でも、犬を含めて(誰でも)アカウントを作成してしまうのを避けたいです。これを最も効果的に防ぐにはどうすればよいでしょうか?

Zapier を介して招待リンクを送信すると、アカウントの招待ページから「招待を送信」リンクをクリックした場合と全く同じアクションがトリガーされます。

招待を作成すると、招待されたユーザーのメールアドレスにメールが送信されます。そのメールには、招待されたユーザーが名前とパスワードを設定し、新しいアカウントにログインできるページへのリンクが含まれています。新しいアカウントのメールアドレスは、招待に使用したメールアドレスによって設定されます。

このページを通じてアカウントを作成できるのは、招待が送信されたユーザーのみです。サイトの登録を招待されたユーザーのみに制限したい場合は、サイトの設定の「ログイン」セクションに移動し、招待のみ サイト設定を選択してください。

招待の仕組みを理解する最良の方法は、ご自身をサイトに招待してみることです。これには使い捨ての Gmail アドレスを使用できます。招待を受け入れるには、サイトからログアウトする必要があります。

「いいね!」 3

ああ、素晴らしい情報ですね。ありがとうございます!!

「いいね!」 1

素晴らしいチュートリアルをありがとうございます!一括招待機能のように、ユーザーがサインアップ後にリダイレクトされるトピック ID を追加する方法はありますか?

上記と似たアプローチで、新しいユーザーをトピックに招待することは可能です。ただし、「アクション」ステップで設定する URL は、そのトピックを指す必要があります。例えば、ID が 123 のトピックにユーザーを招待する場合、「アクション」ステップに https://forum.example.com/t/123/invite という URL を追加します。その後、ガイドで説明されているのと同じ方法で email と、オプションの custom_message および group_names パラメータを追加します。

「いいね!」 3

こんにちは、Simon さん、

投稿ありがとうございます!

2 つ質問があるのですが、お手伝いいただければとても助かります :slight_smile:

質問 1
私の環境では、招待リンクとメッセージは正常に機能しているのですが、group_names にどのような値を追加しても、フォーラムに参加するとデフォルトの公開グループへのアクセスしか得られません。

特定のプライベートグループへの招待を「ブロック」する要因は何かご存知でしょうか?

グループ名の URL は以下の形式です:
https://forum.[mywebsite].com/c/cercle/33

そのため、group_names には /// PUBLIC,cercle と設定しています。

また、このグループに対してグループ名ではなく「番号」(33)を使用してみましたが、それでも機能しませんでした。

もしかすると、フォーラムの管理者設定に、プライベートグループへの招待を制限する何らかの「制限」があるのでしょうか?

質問 2

「プライベートグループ」だけでなく、「プライベートサブグループ」(正しい名称がわかりません)へも人を招待できるようにしたいと考えています。

こちらをご覧いただくと、「RÉSERVÉ…」というグループと、その下にある小さなサブグループが表示されています。

ユーザーを特定のサブグループに招待したいのですが、その方法はご存知でしょうか?

お手すきの際にご協力いただければ大変嬉しいです! :slight_smile:

「いいね!」 1

グループがアクセスを許可されているカテゴリ名ではなく、グループ名を使用していることを確認してください。グループ名は、グループの URL またはグループの「Name」フィールドから確認できます。

これで問題が解決しない場合は、Zapier に追加した Discourse API キーが「All Users」のグローバル API キーであることを確認してください。また、Zapier で設定されている API ユーザー名に、ユーザーをグループに追加する権限があることも確認してください。サイトの任意の管理者ユーザー名がこれに使用できます。

これで問題が解決しない場合は、その旨をお知らせください。

Zapier の group_names フィールドに、カンマ区切りで複数のグループ名を追加することで、ユーザーを複数のグループに招待できます。Discourse には「サブグループ」という概念がないため、招待したい各グループの名前を追加する必要があります。

提供されたスクリーンショットから、ユーザーにカテゴリとそのすべてのサブカテゴリへのアクセス権を与えようとしているように見えます。各サブカテゴリ用にグループを作成する代わりに、単一のグループにカテゴリおよびそのすべてのサブカテゴリへのアクセスを許可するだけで済みます。これは、カテゴリの編集ページの「Security」セクションで設定します。

「いいね!」 2

返信ありがとうございます、Simon さん!

API についてですが、最初は管理者 1 人のみにアクセス権を付与していましたが、それで大丈夫だと思っていました。そのため、現在は全ユーザーにアクセスを付与できるよう新しい API を作成しました。

しかし、それでも動作しませんでした。ただ、問題の原因がわかったかもしれません🙂

「group_names」フィールドに「カテゴリ」名を追加しようとしていたため、うまくいかないのだと思います。グループ、カテゴリ、トピックなどの名称を誤解していました。

スクリーンショットをご覧いただくと、TB、MT、RD、MA など、おそらく 15 ほどのサブカテゴリのリストが表示されています。

例えば、最初のサブカテゴリの URL は以下の通りです:
https://forum.MYWEBSITE.com/c/question-formactions/TBD/14

つまり、私は新しいメンバーを自動的に特定のプライベートなサブカテゴリに招待したいと考えており、グループではなくサブカテゴリにアクセスさせたいのです。

私が以前お伝えした URL では、例えば「TBD」というサブカテゴリへのアクセスのみを許可したいと考えています。

また、別のユーザーには別のサブカテゴリへのアクセスのみを許可したいと考えています。

これを実現できるかご存知でしょうか?

もしかすると、Zapier 上で「group_names」フィールドを、カテゴリ用のフィールドに置き換えるだけで済むのでしょうか?

「いいね!」 1

Discourse では、グループとカテゴリが混乱の源になることが多いです!

  1. グループは人の集まりです。
  2. カテゴリはトピックの集まりです。それら自体に人を招待することはできません。ただし、これらのアクセスはグループによって制御されます。

ご希望の機能を実現するには、グループを作成してください。該当するカテゴリのセキュリティ設定で、そのグループへのアクセス権を追加します。招待 API ではそのグループを使用してください。これで完了です。

「いいね!」 3

返信ありがとうございます、ネイサン!

試してみて、結果をここに投稿しますね :wink:

「いいね!」 2

ご回答ありがとうございます! :smiley:

もう一つ質問があるのですが、もしかしたらあなたか @simon にお手伝いいただけるかもしれません:

Zapier を使って、すでに Discourse のメンバーである人に対して、新しいグループへのアクセス権を与えることは可能でしょうか?

私のワークフローは基本的に以下の通りです:

  1. メンバーが私のコースのいずれかに参加する

  2. Zapier が学習プラットフォームからその人のメールアドレスを取得し、Discourse への招待を送信すると同時に、直ちに参加したコースに関連する適切なグループに自動的に追加する

  3. 数ヶ月後、同じメンバーが別のコースに参加する場合、現在のプロセスでは Zapier が再び Discourse への招待を送信してしまいます。しかし、すでにメンバーであるため、その招待は機能しません。

すでに Discourse のメンバーである場合に、Zapier が新しいグループへのアクセス権を与える方法が必要です。

そのような方法はありますでしょうか?

「いいね!」 1