Automatisch Disqus 集成:New Comments 与 New Flagged Comments 触发器的配置与实现原理
【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch
本篇指南围绕 Automatisch 仓库中 Disqus 应用的两个轮询触发器展开,讲解如何通过 触发事件文档 中定义的New comments(新评论)与New flagged comments(新被标记评论)触发器,将 Disqus 论坛的评论动态接入自动化工作流。读完本文,你将掌握这两个触发器的完整配置项、其底层轮询与分页实现、论坛下拉选项的数据来源,以及把 Disqus 连接(Connection)正确配置好的前置步骤。
触发器总览
在 Automatisch 的 Disqus 应用中,触发事件文档定义了以下两个触发器,二者均基于定时轮询(polling)实现,而非 webhook 实时推送:
| 触发器 | 事件描述(文档原文) | 对应源码实现 |
|---|---|---|
| New comments | Triggers when a new comment is posted in a forum using Disqus.(当 Disqus 论坛发布新评论时触发) | new-comments/index.js |
| New flagged comments | Triggers when a Disqus comment is marked with a flag.(当 Disqus 评论被标记 flag 时触发) | new-flagged-comments/index.js |
两个触发器的注册入口位于 triggers/index.js,最终由 Disqus 应用定义 index.js 统一挂载到triggers字段中。也就是说,只要完成了 Disqus 连接,这两个触发器就会出现在工作流编辑器的应用步骤选择面板里。
触发器的轮询机制
这两个触发器都定义了pollInterval: 15,即每 15 分钟轮询一次 Disqus API。Automatisch 的触发器注册辅助函数 define-trigger.js 会在启动时校验:
- 触发器必须携带
pollInterval(轮询间隔),或者type === 'webhook'; - 或者是内置的定时触发器(
everyNMinutes、everyHour、everyDay、everyWeek、everyMonth)或 MCP 工具触发器(mcpTool)。
不符合上述任一条件的触发器会被直接抛出异常(Trigger must have a poll interval or be a webhook)。Disqus 的两个触发器正是通过pollInterval: 15通过该校验,属于标准的轮询型触发器。
因此需要明确两点使用限制:
- 触发存在延迟:新评论从发布到触发工作流,最长可能间隔一个轮询周期(15 分钟);
- 无需反向代理或公网回调地址:轮询型触发器由 Automatisch 后台按周期主动拉取,这也是 Disqus 没有采用 webhook 的原因。
触发器一:New comments(新评论)
New comments 触发器用于在 Disqus 论坛产生新评论时启动工作流,是 Disqus 应用最常用的入口步骤。它对外暴露两个配置参数,均由 new-comments/index.js 中的arguments数组定义。
参数 1:Post Types(帖子类型过滤)
- label:Post Types
- key:
postTypes - type:
dynamic(动态字段组,可在工作流编辑器中增删子字段) - required:
false(可留空,留空表示不按类型过滤) - 支持变量(variables: true):子字段值可以引用工作流上下文中其他步骤的输出变量
其内部子字段type是一个下拉框,可选项与 Disqus API 的include参数取值一一对应:
| 界面选项 | 实际传入 API 的值 | 含义 |
|---|---|---|
| Unapproved Posts | unapproved | 未审核通过的帖子 |
| Approved Posts | approved | 已审核通过的帖子 |
| Spam Posts | spam | 被判定为垃圾内容的帖子 |
| Deleted Posts | deleted | 已删除的帖子 |
| Flagged Posts | flagged | 被标记的帖子 |
| Highlighted Posts | highlighted | 被高亮的帖子 |
从源码看,run($)中会先对postTypes做一次清洗:
const formattedCommentTypes = postTypes .filter((type) => type.type !== '') .map((type) => type.type);即过滤掉值为空字符串的子字段,只保留用户实际选中的类型,再通过params.append('include', type)拼接到 Disqus 的posts/list.json请求中。勾选多个类型时,多个include参数会同时传给 API(Disqus 的 include 参数支持多值)。
参数 2:Forum(论坛选择)
- label:Forum
- key:
forumId - type:
dropdown - required:
true(必填,必须选择要监听的论坛) - 支持变量(variables: true)
该下拉框的数据不是硬编码的,而是通过source配置动态查询:
source: { type: 'query', name: 'getDynamicData', arguments: [{ name: 'key', value: 'listForums' }], },即调用 Disqus 应用的动态数据源listForums,由 dynamic-data/list-forums/index.js 实现。该数据源请求 Disqus API 的GET /3.0/users/listForums.json(limit: 100、order: desc、带游标分页),将当前账号可访问的论坛以{ value: forum.id, name: forum.id }的形式填充到下拉框,因此界面展示的选项即论坛 ID。凡是连接账号有权限的论坛都会出现在选项中。
轮询执行逻辑
run($)是每次轮询的核心入口,其请求链路为:
- 构造
GET /3.0/posts/list.json请求,查询参数包含limit=100和forum=<forumId>; - 若配置了 Post Types,则追加若干
include参数; - 进入
do...while循环,通过响应中的cursor.next/cursor.hasNext逐页拉取全部匹配评论; - 对每一页响应中的每条评论调用
$.pushTriggerItem()推入触发队列,其中meta.internalId取评论的comment.id,作为 Automatisch 判定"是否为新条目"的去重依据。
去重机制意味着:同一评论 ID 在多次轮询中只触发一次,即使该评论仍然出现在后续轮询结果中,也不会导致工作流重复执行。这是轮询型触发器幂等性的关键保障。
触发器二:New flagged comments(新被标记评论)
New flagged comments 触发器在 Disqus 评论被标记 flag(例如被举报)时触发,适合用于内容审核、举报通知、风控告警等场景。与 New comments 相比,它只有一个配置参数:
- label:Forum
- key:
forumId - type:
dropdown - required:
true - source:同样复用
listForums动态数据源
其实现文件为 new-flagged-comments/index.js。差异体现在请求构造上:
const isFlaggedFilter = 5; const params = new URLSearchParams({ limit: 100, forum: forumId, filters: [isFlaggedFilter], });该触发器固定使用 Disqusposts/list.json的filters参数,并写入过滤值5。在 Disqus API 的过滤编码中,值5对应"被标记(flagged)"的帖子。也就是说,这个触发器本质上是"New comments + 固定只取 flagged 类型的评论"的特化版本,因此在界面上不再暴露 Post Types 下拉框,避免出现自相矛盾的配置。
其余执行逻辑与 New comments 一致:
- 同样采用
limit=100+cursor游标分页循环; - 同样通过
comment.id作为internalId进行去重; - 同样每 15 分钟轮询一次。
前置条件:先建立 Disqus 连接
在使用上述任一触发器之前,必须先在 Automatisch 中为 Disqus 建立连接。完整操作步骤记录在 连接配置文档 中,核心流程如下:
- 登录 Disqus;
- 进入 API applications 页面,点击Register new application注册新应用;
- 填写Register Application表单并提交;
- 进入Authentication部分,选择Read, Write, and Manage Forums权限(
listForums数据源与评论读取均依赖该权限); - 从 Automatisch 复制OAuth Redirect URL,填入 Disqus 的Callback URL字段并保存;
- 在Details页复制API Key与API Secret,分别填入 Automatisch 的对应字段;
- 点击Submit完成连接,即可在流程中使用。
从源码可以印证这些字段的来源。Disqus 应用的认证定义 auth/index.js 声明了三个输入字段:
oAuthRedirectUrl:只读字段,固定为{WEB_APP_URL}/app/disqus/connections/add,支持一键复制(clickToCopy: true);apiKey:必填字符串;apiSecret:必填字符串。
OAuth 授权的完整链路
连接的建立过程由三个模块协同完成:
- generate-auth-url.js:构造
https://disqus.com/api/oauth/2.0/authorize/授权地址,携带client_id(即 API Key)、scope(来自 auth-scope.js)、response_type=code与redirect_uri; - verify-credentials.js:用授权码换取令牌,向
https://disqus.com/api/oauth/2.0/access_token/提交grant_type=authorization_code,并保存access_token、refresh_token、expires_in、user_id、username等信息; - refresh-token.js:令牌过期后用
grant_type=refresh_token刷新,自动续期accessToken、refreshToken与expiresIn。
每次请求 Disqus API 时,add-auth-header.js 作为beforeRequest钩子,统一为请求追加access_token、api_key、api_secret三个查询参数。也就是说,触发器运行时无需关心令牌管理,连接层已透明完成鉴权。
把触发器接入工作流:操作要点
在 Automatisch 工作流编辑器中按以下步骤使用 Disqus 触发器:
- 新建工作流,添加应用步骤,选择Disqus;
- 在步骤类型中选择New comments或New flagged comments;
- 选择(或新建)一个已授权的 Disqus 连接;
- 配置参数:
- New comments:从 Forum 下拉框选择目标论坛;如需过滤,可展开 Post Types 勾选一个或多个类型;
- New flagged comments:仅需选择 Forum;
- 保存后,Automatisch 将按 15 分钟周期轮询指定论坛;
- 后续步骤可通过变量面板引用每条评论的原始数据(例如评论正文、作者、创建时间等),这些数据来自
pushTriggerItem的raw字段,即 Disqusposts/list.json返回的完整评论对象。
两个触发器如何选择
- 需要处理全部评论动态(包括新评论、垃圾评论、删除、标记等细分类型):选用New comments,配合 Post Types 下拉框按需过滤;
- 只关心被标记(举报)的评论,用于内容审核或告警:选用New flagged comments,无需额外配置,实现更简洁。
关键实现细节速查
以下是本次讲解涉及的源码要点汇总,便于读者在仓库中继续深入:
| 关注点 | 位置 | 关键结论 |
|---|---|---|
| 触发器注册与校验 | define-trigger.js | 必须有pollInterval或是 webhook,否则启动时报错 |
| 评论轮询实现 | new-comments/index.js | posts/list.json+limit=100+ 游标分页 +internalId去重 |
| 标记评论轮询实现 | new-flagged-comments/index.js | 固定filters=5,语义等同"flagged 类型的新评论" |
| 论坛下拉数据源 | list-forums/index.js | users/listForums.json分页拉取账号可访问的论坛 |
| 请求鉴权钩子 | add-auth-header.js | 每次请求自动注入access_token、api_key、api_secret |
| 应用级定义 | index.js | key: 'disqus',apiBaseUrl: https://disqus.com/api,支持连接 |
| 连接与 OAuth | auth/index.js | 需 API Key / API Secret,支持令牌自动刷新 |
结语
Automatisch 的 Disqus 集成以两个 15 分钟轮询型触发器为核心能力:New comments 负责监听论坛评论流并支持按帖子类型精细过滤,New flagged comments 则面向内容审核场景固定捕获被标记评论。配合动态论坛下拉、游标分页与基于评论 ID 的去重机制,这两个触发器可以在不依赖任何公网回调的前提下,将 Disqus 的评论动态稳定地接入自动化工作流。若你需要自定义轮询频率或新增评论过滤维度,也可以直接基于 new-comments/index.js 的结构进行扩展——只需保持pollInterval与run($)的约定即可被 Automatisch 正确加载。
【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考