想使用 Discourse Webhooks 通过 Zapier 触发任务吗?让我们开始吧!
提示: Zapier 现已推出 官方 Discourse 集成,内置触发器和操作(例如“新帖子”、“创建帖子”)。对于常见用例,这比手动配置通用 Webhook 更简单。下面的指南介绍的是手动 Webhook 方法,它能为您提供更多灵活性并访问所有 Discourse 事件类型。
Zapier 需要一个触发器和一个操作。在本教程中,触发器将是 Discourse Webhook,操作将是发送电子邮件。
在任何用户事件上发送电子邮件
我们现在将设置一个 Zap,以便在任何用户事件发生时发送电子邮件(例如,当用户被创建、批准、更新、登录、登出、暂停等时)。若要针对 特定 用户事件进行触发,请参阅下方的 针对 特定 用户事件进行触发。
创建 Discourse Webhook
-
为用户事件创建新的 Discourse Webhook
我们将在后续步骤中生成 Webhook URL 后更新“负载 URL"(Payload URL)。
创建新的 Zap
在 Zapier 仪表板上寻找此按钮: ![]()
设置触发器
-
选择 Webhook 作为触发器。查找:
-
选择触发器
您需要选择“捕获钩子”(Catch Hook)
-
您可以跳过“设置 Zapier Webhook"步骤。
只需点击“继续”。
-
测试触发器
复制生成的自定义 Webhook URL,并将其粘贴到最初创建的 Discourse Webhook 的“负载 URL"部分。

现在尝试在您的 Discourse 实例上创建/更新/批准用户。
如果您成功遵循了所有步骤并创建/更新/批准了用户,您将在 Zapier 上看到成功消息:
点击“查看您的钩子”超链接将显示解析后的数据。
在 Zapier 上设置操作
-
选择电子邮件作为操作。查找:
-
点击“保存 + 继续”
-
设置电子邮件模板
根据您的要求进一步修改电子邮件模板。请注意,您可以使用
+按钮添加更多通过 JSON 响应解析的数据。现在测试操作,您应该收到来自 Zapier 的电子邮件。
启用 Zap
就是这样,现在您将为每个用户事件收到一封电子邮件。可以触发 Webhook 的用户事件完整列表如下:
| 事件名称 | 描述 |
|---|---|
user_created |
创建了新用户账户 |
user_approved |
用户被批准 |
user_updated |
用户资料已更新 |
user_logged_in |
用户已登录 |
user_logged_out |
用户已登出 |
user_confirmed_email |
用户确认了其电子邮件 |
user_destroyed |
用户账户已删除 |
user_suspended |
用户被暂停 |
user_unsuspended |
用户已解除暂停 |
user_anonymized |
用户账户已匿名化 |
![]()
针对 特定 用户事件进行触发
只想在特定用户事件(例如仅在账户创建时,而不是在更新时)发送电子邮件吗?请使用“捕获原始钩子”(Catch Raw Hook)触发器。
- 点击“显示较少见的选项”
- 点击“捕获原始钩子”
- 按照其余步骤正常配置触发器。
配置好触发器后,添加一个过滤器。
- 点击“添加步骤”
- 点击“过滤器”
- 点击“保存并继续”
- 从第一个下拉菜单中选择"Headers Http X Discourse Event"。
- 从第二个下拉菜单中选择"(文本) 完全匹配”。
- 输入您要过滤的完整标头(例如,
user_logged_out)。 - 如果您希望 Zapier 在多个标头上运行,请点击"+OR"并像第一个一样添加它们。
- 点击“测试并继续”
- 查看过滤器测试,然后点击“继续”
配置好过滤器后,配置您首选的操作。
使用完整的 Webhook 标头
要访问标头,请遵循之前的步骤 - 选择“捕获原始钩子”,然后添加一个过滤器。配置过滤器,使其仅在 Headers Http X Discourse Event 与您要查找的事件匹配时才继续。
这里的难点在于“捕获原始钩子”传递的是 Webhook 的原始主体。我最终使用的操作需要从主体中解析数据。对我有效的方法是在过滤器之后添加一个代码操作。在代码操作模态框中,选择“运行 JavaScript":
Zapier 将创建一个 inputData 对象,您可以向其添加命名属性。在左列为您的属性添加名称。在右列中,从下拉菜单中选择“捕获原始钩子”,然后选择“原始主体”(Raw Body):
向下滚动页面以查看代码输入框:
然后,您需要用一些解析原始主体并返回包含最终操作所需值的对象的代码来替换示例代码。这是我使用的代码。它返回的对象正被 Salesforce 集成使用。Salesforce 需要姓氏,因此如果不存在姓氏,将返回错误:
const parsed = JSON.parse(inputData.raw);
if (parsed.user) {
const user = parsed.user,
name = user.name,
userFields = user.user_fields;
let firstName,
lastName,
company;
if (name) {
const splitName = name.split(' ');
firstName = splitName[0];
lastName = splitName[1]
}
if (userFields) {
company = userFields['10'];
}
if (lastName) {
return {id: user.id,
username: user.username,
lastName: lastName,
firstName: firstName,
email: user.email,
company: company
};
} else {
return {error: "Missing last name"}
}
} else {
return {error: "A user object was not returned"};
}
为了避免在最终操作中发出失败的请求,可以添加另一个 Zapier 过滤器。将该过滤器设置为仅在 JavaScript 返回的错误字段不存在时才继续:
然后您可以添加最终操作。对于选择要在最终操作中使用的字段,请使用“运行 JavaScript"操作返回的属性。























