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

This is awesome thank you for the feature and clear instructions!

Is it possible to also set the custom group when generating an invite, like you can from within the app?

That can be done by adding a group_names key to the Headers field. Its value should be set to a comma separated list of group names. I’ll add an example of this to the topic.

The basic approach that’s used in this topic will work for any API request to Discourse.

「いいね!」 3

Awesome!! I think the dialog accepts a custom message too, guessing that can be done the same way?

「いいね!」 1

I tried setting this up this AM and was running into a 400 error. With a little bit of debugging, I found that the auth-related steps need to go in the headers section as instructed, but the actual form values (email, group name, and custom message) need to go in the data section as key/value sets.

Once I made that change, though, it worked perfectly!

「いいね!」 1

Thanks for that, @simon!

Are there any descriptions on meta about alternative ways to create an automated process for sending an invite email after the reader signed up to an offering and to which you could link here?

Thanks for testing that! What I’m finding is that when no custom_message or group_names are included in the request, passing the email in the Headers works. It’s not the correct way to pass the email address though. I’ve updated the guide to use the Data section for setting the email address, and have included examples for adding users to groups and including a custom message.

「いいね!」 4

I’m not aware of other services that are similar to Zapier, but I’m sure there are some out there. You can make requests directly to the Discourse API without using a third party service. The main requirement for doing this is that you have an application to make the requests from. This can be something a simple as a WordPress site.

A good resource on Meta for getting started with the API is Reverse engineer the Discourse API. You can test API requests with CURL from your computer’s terminal, or with a service like Postman.

「いいね!」 2

Thank you! Most of what you write I have no idea about… but I’ll check I’ll out your links and see if so can understand anything :smiley:

「いいね!」 2

@simon

Quick question:

When I send an automated invite through Zapier, would this then be an already personalized link, or a link to the general login page to my forum (where someone can log in and also create an account)?

I would like to avoid that everybody and their dog who knows the login page creates an account. How can that best be avoided?

When you send an invite link through Zapier you are triggering exactly the same action as if you had clicked the ‘Send an Invite’ link from your account’s Invite page.

Creating an invite will send an email to invited user’s email address. That email contains a link to a page where the invited user can set their name and password, and login to their new account. The email address for the new account is set by the email address that you used for the invite.

Only users who have been sent an invite can create an account through this page. If you would like to only allow invited users to register for your site, go to the Login section of your Site Settings and select the invite only site setting.

The best way to get a sense of how invites work is to invite yourself to your site. You can use a throw-away gmail address for this. You will need to log out of the site before you will be able to accept your invite.

「いいね!」 3

Ah, awesome info. Thanks!!

「いいね!」 1

Thanks for the great tutorial! Is there a way to add a topic id that the user gets redirected to after signing up like in the bulk invite feature?

It is possible to invite a new user to a topic with a similar approach to what is outlined above, but the URL that you setup in the Action step needs to point to the topic. For example, to invite a user to a topic with the id 123 you would add the URL https://forum.example.com/t/123/invite to the Action step. You would then add the email and the optional custom_message and group_names parameters in the same way as they are outlined in the guide.

「いいね!」 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