Skip to main content
⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考英文原版

什么是触发器插件?

触发器是 Dify v1.10.0 版本中引入的一种新型起始节点。与代码、工具或知识库检索等功能节点不同,触发器的目的是将第三方事件转换为 Dify 可以识别和处理的输入格式 Trigger Plugin Intro 例如,如果你在 Gmail 中将 Dify 配置为 new email 事件接收器,每当收到新邮件时,Gmail 会自动向 Dify 发送一个可用于触发工作流的事件。然而:
  • Gmail 的原始事件格式与 Dify 的输入格式不兼容。
  • 全球有数千个平台,每个平台都有其独特的事件格式。
因此,我们需要触发器插件来定义和解析来自不同平台、各种格式的事件,并将它们统一为 Dify 可以接受的输入格式。

技术概述

Dify 触发器基于 webhook 实现,这是一种在网络上被广泛采用的机制。许多主流 SaaS 平台(如 GitHub、Slack 和 Linear)都支持 webhook,并提供完善的开发者文档。 Webhook 可以理解为一种基于 HTTP 的事件分发器。一旦配置了事件接收地址,这些 SaaS 平台会在订阅的事件发生时自动将事件数据推送到目标服务器。 为了以统一的方式处理来自不同平台的 webhook 事件,Dify 定义了两个核心概念:订阅(Subscription)事件(Event)
  • 订阅(Subscription):基于 Webhook 的事件分发需要在第三方平台的开发者控制台中将 Dify 的网络地址注册为目标服务器。在 Dify 中,这个配置过程称为订阅
  • 事件(Event):一个平台可能发送多种类型的事件——例如收到邮件删除邮件标记邮件为已读——所有这些都会推送到注册的地址。触发器插件可以处理多种事件类型,每个事件对应 Dify 工作流中的一个插件触发器节点。

插件开发

触发器插件的开发流程与其他插件类型(工具、数据源、模型等)一致。 你可以使用 dify plugin init 命令创建开发模板。生成的文件结构遵循标准的插件格式规范。
  • manifest.yaml:描述插件的基本元数据。
  • provider 目录:包含提供者的元数据、创建订阅的代码,以及接收 webhook 请求后对事件进行分类的代码。
  • events 目录:包含事件处理和过滤的代码,支持在节点级别进行本地事件过滤。你可以创建子目录来分组相关事件。
对于触发器插件,Dify 最低版本必须设置为 1.10.0,SDK 版本必须 >= 0.6.0
接下来,我们将以 GitHub 为例来说明触发器插件的开发流程。

创建订阅

主流 SaaS 平台的 Webhook 配置方式差异很大:
  • 一些平台(如 GitHub)支持基于 API 的 webhook 配置。对于这些平台,一旦完成 OAuth 认证,Dify 可以自动设置 webhook。
  • 其他平台(如 Notion)不提供 webhook 配置 API,可能需要用户手动进行认证。
为了适应这些差异,我们将订阅过程分为两部分:**订阅构造器(Subscription Constructor)订阅(Subscription)**本身。 对于像 Notion 这样的平台,创建订阅需要用户手动复制 Dify 提供的回调 URL,并将其粘贴到他们的 Notion 工作区以完成 webhook 设置。这个过程对应 Dify 界面中的粘贴 URL 创建新订阅选项。 粘贴 URL 创建新订阅 要实现通过手动粘贴 URL 创建订阅,你需要修改两个文件:github.yamlgithub.py
由于 GitHub webhook 使用加密机制,需要一个密钥来解密和验证传入的请求。因此,你需要在 github.yaml 中声明 webhook_secret

事件处理

一旦提取了事件,相应的实现必须过滤原始 HTTP 请求并将其转换为 Dify 工作流可以接受的输入格式。 以 Issue 事件为例,你可以分别通过 events/issues/issues.yamlevents/issues/issues.py 定义事件及其实现。事件的输出可以在 issues.yamloutput_schema 部分定义,它遵循与工具插件相同的 JSON Schema 规范。

事件过滤

要过滤掉某些事件——例如,只关注具有特定标签的 Issue 事件——你可以在 issues.yaml 的事件定义中添加 parameters。然后,在 _on_event 方法中,你可以抛出 EventIgnoreError 异常来过滤掉不符合配置条件的事件。

通过 OAuth 或 API 密钥创建订阅

要启用通过 OAuth 或 API 密钥自动创建订阅,你需要修改 github.yamlgithub.py 文件。
github.yaml 中,添加以下字段。
subscription_constructor 是 Dify 抽象出来的一个概念,用于定义如何构造订阅。它包含以下字段:
  • parameters(可选):定义创建订阅所需的参数,例如要订阅的事件类型或目标 GitHub 仓库
  • credentials_schema(可选):声明使用 API 密钥或访问令牌创建订阅所需的凭据,例如 GitHub 的 access_tokens
  • oauth_schema(可选):实现通过 OAuth 创建订阅时需要。有关如何定义它的详细信息,请参阅为你的工具插件添加 OAuth 支持

修改完这两个文件后,你将在 Dify 界面中看到使用 API 密钥创建选项。 通过 OAuth 自动创建订阅也可以在同一个 Constructor 类中实现:通过在 subscription_constructor 下添加 oauth_schema 字段,即可启用 OAuth 认证。 OAuth 和 API 密钥选项

深入探索

触发器插件开发中核心类的接口定义和实现方法如下。

Trigger

TriggerSubscriptionConstructor

Event


Edit this page | Report an issue