使用 Zapier 自动发送 Discourse 邀请邮件

您可以使用 Discourse API 在外部应用程序上执行操作时,自动发送论坛邀请电子邮件。对于许多应用程序,您可以使用 Zapier 进行设置,而无需编写任何代码。

一个常见的用例是,当用户购买产品或在外部服务上注册时,邀请他们加入您的论坛。在本文的示例中,我将使用 Zapier WordPress 集成来触发在 WordPress 网站上有新用户注册时从 Discourse 发送邀请。

在 Zapier 上设置触发步骤

访问您的 Zapier 仪表板,搜索您想要触发邀请电子邮件的应用程序。在下面的截图中,我选择了 WordPress 作为触发器。

这里唯一需要的配置是连接 WordPress Zap 到一个 WordPress 账户,并选择“New User”事件来触发 Zap。

设置用于发送邀请的操作步骤

点击“Add a Step”按钮,然后从下拉菜单中点击“Action/Search”。

在搜索菜单中输入“webhook”,然后从操作菜单中选择“Webhooks by Zapier”。Webhook 操作步骤将添加到您的 Zap 侧边栏,并且会打开一个表单,让您选择希望 Webhook 执行哪种类型的请求。

从表单中选择 POST,然后点击 Continue。

打开的表单允许您配置发送到 Discourse 的 POST 请求。在 URL 字段中,输入您论坛的基础 URL,后跟 /invites。例如,我的论坛的基础 URL 是 https://demo.scossar.com,因此邀请路由的完整链接是 https://demo.scossar.com/invites

您现在需要配置表单的 Payload Type(负载类型)、Data(数据)和 Headers(标头)部分。所有其他表单部分可以保留默认值。

Payload Type 告诉 Zapier 以何种格式发送负载。它应设置为 Json

Data 部分用于告诉 Discourse 将邀请发送到哪个电子邮件地址,并设置可选的用户组列表和自定义消息。要邀请用户而不将其添加到用户组或包含自定义消息,输入 email 作为数据 Key,然后点击“Insert a Field”图标以打开字段的下拉菜单。向下滚动列表,直到看到包含用户电子邮件的触发应用传递的值。当使用 WordPress 作为触发应用时,完成的 Data 部分应如下所示:

要自动将用户添加到他们接受邀请时所在的组,请点击 Data 部分的 :heavy_plus_sign: 图标以添加一个新字段。将该字段的 Key 设置为 group_names。将该字段的值设置为您希望用户被添加到的组名的逗号分隔列表。要包含在邀请电子邮件中的自定义消息,创建一个新的字段,其 Key 设置为 custom_message,其值设置为您想要发送的消息。

注意:在 Zap 的触发步骤后添加一个 Code 步骤应该可以动态地为特定用户设置组名和自定义消息。

Headers 部分用于验证您的请求。要配置 Headers 字段,您需要在 Discourse 站点上生成一个 API 密钥。要执行此操作,请访问您的 Discourse 站点的 Admin / API 页面,然后点击“New API Key”按钮。创建密钥时,将其分配给一个工作人员用户,并将范围设置为 Global,或者使用 Granular 范围并勾选 Invites > Create 框。

现在,在 Zap 的 Headers 部分中,输入以下键/值对。用适合您站点的适当值替换我用方括号括起来的任何值。键的字母大小写很重要。

Api-Username: <您希望发送邀请的工作人员用户名>
Api-Key: <您生成的 API 密钥>
Content-Type: application/json

表单现在应该与下面的屏幕截图相似,但包含您的 Api-Username 和 Api-Key:

点击 Continue 按钮。

现在,您可以通过点击“Send Test To Webhooks by Zapier”按钮来测试集成。测试将使用您在触发步骤中设置的数据进行。如果一切配置正确,您将看到成功消息,并且您在触发步骤中设置的用户尚不存在于您的 Discourse 论坛上,将发送一封邀请电子邮件,并且您将在 Zapier 上看到一条 Success 消息。一旦测试步骤通过,点击 Finish 按钮并打开您的 Zap。

有关如何使用 Zapier 向 Discourse API 发送其他类型请求的详细信息,请参阅 https://meta.discourse.org/t/how-to-make-requests-to-the-discourse-api-with-zapier/122126。

25 个赞

太棒了,感谢你们提供这个功能以及清晰的说明!

在生成邀请时,是否也可以像应用内那样设置自定义群组?

可以通过在 Headers 字段中添加 group_names 键来实现。其值应设置为用逗号分隔的群组名称列表。我会在主题中补充一个示例。
本主题中使用的基本方法适用于对 Discourse 的任何 API 请求。

3 个赞

太棒了!!我认为对话框也支持自定义消息,猜测可以用同样的方式实现?

1 个赞

我今天早上尝试设置时遇到了 400 错误。经过一些调试,我发现认证相关的步骤需要按照说明放在 headers 部分,但实际的表单值(电子邮件、组名和自定义消息)需要作为键值对放在 data 部分。

不过,一旦我做了这个更改,它就完美运行了!

1 个赞

谢谢,@simon

在元数据中是否有关于创建自动化流程以在读者注册某项服务后发送邀请邮件的替代方法的描述?如果有,能否在此处提供相关链接?

感谢您进行测试!我发现,当请求中未包含 custom_messagegroup_names 时,在 Headers 中传递 email 是可行的。但这并不是传递电子邮件地址的正确方式。我已更新指南,改为在 Data 部分设置电子邮件地址,并添加了将用户添加到群组以及包含自定义消息的示例。

4 个赞

我并不知道有其他与 Zapier 类似的服务,但我相信肯定有一些存在。你可以直接向 Discourse API 发送请求,而无需使用第三方服务。这样做的主要要求是你有一个应用程序来发起请求。这可以非常简单,比如一个 WordPress 站点。

在 Meta 上关于入门 API 的一个良好资源是 https://meta.discourse.org/t/how-to-reverse-engineer-the-discourse-api/20576。你可以使用 CURL 从计算机终端测试 API 请求,或使用像 Postman 这样的服务。

2 个赞

谢谢!你写的很多内容我完全看不懂……不过我会去查看你的链接,看看能不能理解些什么 :smiley:

2 个赞

@simon

快速提问:

当我通过 Zapier 发送自动邀请时,这会是一个已经个性化的链接,还是指向我的论坛通用登录页面的链接(用户可以在那里登录并注册账户)?

我希望避免任何知道登录页面的人都能随意创建账户。如何最好地避免这种情况?

当您通过 Zapier 发送邀请链接时,触发的操作与您在账户的“邀请”页面点击“发送邀请”链接完全相同。

创建邀请后,系统会向被邀请用户的邮箱地址发送一封电子邮件。该邮件包含一个链接,被邀请用户可通过该链接访问页面,设置其姓名和密码,并登录到新账户。新账户的邮箱地址即为您发送邀请时所使用的邮箱地址。

只有收到邀请的用户才能通过此页面创建账户。如果您希望仅允许被邀请的用户注册您的网站,请前往“站点设置”中的“登录”部分,并选择 仅限邀请 站点设置。

了解邀请功能的最佳方式是邀请自己加入您的网站。为此,您可以使用一个临时的 Gmail 邮箱地址。在能够接受邀请之前,您需要先退出当前网站登录。

3 个赞

啊,太棒了的信息。谢谢!!

1 个赞

感谢这篇精彩的教程!有没有办法在用户注册后将其重定向到指定的主题 ID,就像在批量邀请功能中那样?

可以使用与上述类似的方法邀请新用户加入某个主题,但您在“操作”步骤中设置的 URL 需要指向该主题。例如,若要邀请用户加入 ID 为 123 的主题,您需要在“操作”步骤中添加 URL https://forum.example.com/t/123/invite。然后,您可以按照指南中所述的方式添加 email 参数,以及可选的 custom_messagegroup_names 参数。

3 个赞

你好,Simon,

感谢你的帖子!

我有两个问题,如果你能帮我,那就太棒了: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 中找到组名,或者在组的“名称”字段中查看:

如果这未能解决问题,请确保你在 Zapier 中添加的 Discourse API 密钥是全局的“所有用户”API 密钥。同时,请确保在 Zapier 中设置的 API 用户名具有将用户添加到组的权限。你网站上的任何管理员用户名都可以用于此目的。

如果问题仍未解决,请告诉我。

你可以通过在 Zapier 的 group_names 字段中添加以逗号分隔的组名列表,将用户邀请到多个组。Discourse 没有“子组”的概念,因此你需要添加每个你希望邀请用户加入的组的名称。

根据你提供的截图,看起来你试图让用户访问某个分类及其所有子分类。与其为每个子分类创建一个组,你只需允许一个组访问该分类及其所有子分类即可。这可以在分类编辑页面的“安全”部分进行配置。

2 个赞

谢谢你的回复,Simon!

关于 API 的问题:

我之前只授予了一个用户(管理员)访问权限,以为这样就可以了。所以我创建了一个新的 API,打算让所有用户都能访问。

但问题依然存在。不过,我可能已经理解出问题了:slight_smile

我试图在"group_names"字段中添加一个“类别”名称,所以我想这样是行不通的:)。

我误解了“组(group)”、“类别(category)”和“主题(topic)”这些名称的含义。

从截图中你可以看到大约 15 个子类别的列表:TB、MT、RD、MA 等。

例如,第一个子类别的 URL 是:https://forum.MYWEBSITE.com/c/question-formactions/TBD/14

所以我猜,我想自动邀请新成员加入某些私有子类别,而不是某个组。

在我提供的 URL 中,我希望只授予用户访问子类别"TBD"的权限,例如。

而另一位用户则只拥有访问另一个子类别的权限。

你知道这可以实现吗?

也许我只需要在 Zapier 中将"group_names"字段替换为对应的“类别”字段?

1 个赞

在 Discourse 中,群组和分类常常让人混淆!

  1. 群组是人员的集合。
  2. 分类是话题的集合。你无法直接邀请人员加入分类,但可以通过群组来控制对这些分类的访问权限。

要实现你的需求,请先创建一个群组。然后在相关分类的安全设置中,为该群组添加访问权限。最后,在邀请 API 中使用该群组即可。搞定。

3 个赞

谢谢你的回复,Nathan!

我会试试那个方法,然后把结果发在这里 :wink:

2 个赞

您的解决方案运行良好,谢谢!:smiley:

我还有另一个问题,也许您(或 @simon)能帮我解答:

在使用 Zapier 时,有没有办法为已经是 Discourse 成员的现有用户开放新组的访问权限?

基本上,我的工作流程如下:

1/ 一名成员加入我的某个课程

2/ Zapier 从我的学习平台获取他的邮箱,向他发送 Discourse 的邀请,并自动将他添加到与他刚加入的课程相关的正确群组中。

3/ 有时,几个月后,该成员会加入另一个课程:因此,按照我当前的流程,Zapier 会再次向他发送 Discourse 邀请,但他已经是成员了,所以该邀请无法生效。

我需要 Zapier 在他已经是 Discourse 成员的情况下,为他开放新组的访问权限。

您知道如何实现这一点吗?

1 个赞