Dify
简体中文
简体中文
  • 入门
    • 欢迎使用 Dify
      • 特性与技术规格
      • 模型供应商列表
    • 云服务
    • 社区版
      • Docker Compose 部署
      • 本地源码启动
      • 宝塔面板部署
      • 单独启动前端 Docker 容器
      • 环境变量说明
      • 常见问题
    • Dify Premium
    • Dify 教育版
  • 手册
    • 接入大模型
      • 增加新供应商
      • 预定义模型接入
      • 自定义模型接入
      • 接口方法
      • 配置规则
      • 负载均衡
    • 构建应用
      • 创建应用
      • 聊天助手
        • 多模型调试
      • Agent
      • 应用工具箱
        • 敏感内容审查
    • 工作流
      • 关键概念
      • 变量
      • 节点说明
        • 开始
        • LLM
        • 知识检索
        • 问题分类
        • 条件分支
        • 代码执行
        • 模板转换
        • 文档提取器
        • 列表操作
        • 变量聚合
        • 变量赋值
        • 迭代
        • 参数提取
        • HTTP 请求
        • Agent
        • 工具
        • 结束
        • 直接回复
        • 循环
      • 快捷键
      • 编排节点
      • 文件上传
      • 异常处理
        • 预定义异常处理逻辑
        • 错误类型
      • 附加功能
      • 预览与调试
        • 预览与运行
        • 单步调试
        • 对话/运行日志
        • 检查清单
        • 运行历史
      • 应用发布
      • 结构化输出
      • 变更公告:图片上传被替换为文件上传
    • 知识库
      • 创建知识库
        • 1. 导入文本数据
          • 1.1 从 Notion 导入数据
          • 1.2 从网页导入数据
        • 2. 指定分段模式
        • 3. 设定索引方法与检索设置
      • 管理知识库
        • 维护知识库内文档
        • 通过 API 维护知识库
      • 元数据
      • 在应用内集成知识库
      • 召回测试/引用归属
      • 知识库请求频率限制
      • 连接外部知识库
      • 外部知识库 API
    • 工具
      • 快速接入工具
      • 高级接入工具
      • 工具配置
        • Google
        • Bing
        • SearchApi
        • StableDiffusion
        • Dall-e
        • Perplexity Search
        • AlphaVantage 股票分析
        • Youtube
        • SearXNG
        • Serper
        • SiliconFlow (支持 Flux 绘图)
        • ComfyUI
    • 发布
      • 发布为公开 Web 站点
        • Web 应用的设置
        • 文本生成型应用
        • 对话型应用
      • 嵌入网站
      • 基于 APIs 开发
      • 基于前端组件再开发
    • 标注
      • 日志与标注
      • 标注回复
    • 监测
      • 集成外部 Ops 工具
        • 集成 LangSmith
        • 集成 Langfuse
        • 集成 Opik
      • 数据分析
    • 扩展
      • API 扩展
        • 使用 Cloudflare Workers 部署 API Tools
        • 敏感内容审查
      • 代码扩展
        • 外部数据工具
        • 敏感内容审查
    • 协同
      • 发现
      • 邀请与管理成员
    • 管理
      • 应用管理
      • 团队成员管理
      • 个人账号管理
      • 订阅管理
      • 版本管理
  • 动手实验室
    • 初级
      • 如何搭建 AI 图片生成应用
      • AI Agent 实战:搭建个人在线旅游助手
    • 中级
      • 使用文件上传搭建文章理解助手
      • 使用知识库搭建智能客服机器人
      • ChatFlow 实战:搭建 Twitter 账号分析助手
  • 社区
    • 寻求支持
    • 成为贡献者
    • 为 Dify 文档做出贡献
  • 插件
    • 功能简介
    • 快速开始
      • 安装与使用插件
      • 插件开发
        • 初始化开发工具
        • Tool 插件
        • Model 插件
          • 创建模型供应商
          • 接入预定义模型
          • 接入自定义模型
        • Agent 策略插件
        • Extension 插件
        • Bundle 插件包
      • 插件调试
    • 插件管理
    • 接口定义
      • Manifest
      • Endpoint
      • Tool
      • Agent
      • Model
        • 模型设计规则
        • 模型接口
      • 通用规范定义
      • 持久化存储
      • 反向调用 Dify 服务
        • App
        • Model
        • Tool
        • Node
    • 最佳实践
      • 开发 Slack Bot 插件
      • Dify MCP 插件指南:一键连接 Zapier 并自动发送邮件
    • 发布插件
      • 自动发布插件
      • 发布至 Dify Marketplace
        • 插件开发者准则
        • 插件隐私政策准则
      • 发布至个人 GitHub 仓库
      • 本地发布与分享
      • 第三方签名验证
    • 常见问题
  • 研发
    • 后端
      • DifySandbox
        • 贡献指南
    • 模型接入
      • 接入 Hugging Face 上的开源模型
      • 接入 Replicate 上的开源模型
      • 接入 Xinference 部署的本地模型
      • 接入 OpenLLM 部署的本地模型
      • 接入 LocalAI 部署的本地模型
      • 接入 Ollama 部署的本地模型
      • 接入 LiteLLM 代理的模型
      • 接入 GPUStack 进行本地模型部署
      • 接入 AWS Bedrock 上的模型(DeepSeek)
    • 迁移
      • 将社区版迁移至 v1.0.0
  • 阅读更多
    • 应用案例
      • DeepSeek 与 Dify 集成指南:打造具备多轮思考的 AI 应用
      • 本地私有化部署 DeepSeek + Dify,构建你的专属私人 AI 助手
      • 如何训练出专属于“你”的问答机器人?
      • 教你十几分钟不用代码创建 Midjourney 提示词机器人
      • 构建一个 Notion AI 助手
      • 如何在几分钟内创建一个带有业务数据的官网 AI 智能客服
      • 使用全套开源工具构建 LLM 应用实战:在 Dify 调用 Baichuan 开源模型能力
      • 手把手教你把 Dify 接入微信生态
      • 使用 Dify 和 Twilio 构建 WhatsApp 机器人
      • 将 Dify 应用与钉钉机器人集成
      • 使用 Dify 和 Azure Bot Framework 构建 Microsoft Teams 机器人
      • 如何让 LLM 应用提供循序渐进的聊天体验?
      • 如何将 Dify Chatbot 集成至 Wix 网站?
      • 如何连接 AWS Bedrock 知识库?
      • 构建 Dify 应用定时任务助手
      • 如何在 Dify 内体验大模型“竞技场”?以 DeepSeek R1 VS o1 为例
      • 在 Dify 云端构建 AI Thesis Slack Bot
      • 将 Dify 快速接入 QQ、微信、飞书、钉钉、Telegram、Discord 等平台
    • 扩展阅读
      • 什么是 LLMOps?
      • 什么是数组变量?
      • 检索增强生成(RAG)
        • 混合检索
        • 重排序
        • 召回模式
      • 提示词编排
      • 如何使用 JSON Schema 让 LLM 输出遵循结构化格式的内容?
    • 常见问题
      • 本地部署
      • LLM 配置与使用
      • 插件
  • 政策
    • 开源许可证
    • 用户协议
      • 服务条款
      • 隐私政策
      • 获取合规报告
Powered by GitBook
On this page
  • 1. 准备工作
  • 2. 详细步骤
  • 2.1. 创建 Dify 应用
  • 2.2. 创建钉钉企业应用机器人
  • 2.3. 钉钉 AI 卡片配置
  • 3. 部署 Dify-on-Dingtalk
  • 3.1. 下载 Dify-on-Dingtalk 项目代码
  • 3.2. 填写配置文件
  • 3.3. 启动 docker 容器
  • 4. 实际对话测试
  • 4.1. 将机器人添加进群聊
  • 4.2. 与机器人进行私聊
  • 5. 后记
  1. 阅读更多
  2. 应用案例

将 Dify 应用与钉钉机器人集成

Previous使用 Dify 和 Twilio 构建 WhatsApp 机器人Next使用 Dify 和 Azure Bot Framework 构建 Microsoft Teams 机器人

Last updated 2 months ago

本文系社区投稿,作者:zfanswer, 开源项目作者。

IM 是天然的智能聊天机器人应用场景,校企用户有不少是使用钉钉软件的,通过在企业内部群中添加 Dify 应用,就可以打造功能强大的数字员工,帮助企业内部人员提质增效。

在本文中,我们将向你展示如何将你的 Dify 应用和钉钉机器人进行集成,并在钉钉中实现打字机式的流式输出效果,通过使用 这个开源框架,进行简单的配置就可以轻松完成这个集成任务。

先上效果图,也许你就有兴趣继续读下去了。

1. 准备工作

  1. 安装好 Git、Docker、Docker Compose

  2. 一个有企业应用开发者权限的钉钉账号

  3. 可使用的 Dify 平台(自部署和官方 SaaS 服务都可以)

  4. 一个你是群主的钉钉群,用作测试

然后我们一步一步详细介绍如何操作。

2. 详细步骤

2.1. 创建 Dify 应用

下图是一个简易方法让你快速识别自己应用的类型,后续配置时需要明确写明接入应用的类型。

另外需要说明的是,虽然所有类型的应用都可以接入,但是根据类型不同也有些限制和区别:

  • AGENT 也属于 CHATBOT,聊天助手应用在接入钉钉机器人后是可以保持聊天上下文的(即支持多轮对话),只有本身在 Dify 中支持会话的才可以

  • COMPLETION(文本生成)、WORKFLOW(纯工作流)应用在创建的时候有限制,接收的用户输入 只能有一个且变量名为 query,因为钉钉对话场景下用户输入是单条消息,所以这里只能设置一个变量。

这里我们假设你已经创建好等待接入的 Dify 应用了,这时就需要查看你这个应用的 访问 API 页面,创建该应用的 API 密钥④,并且记录 API 服务器访问地址⑤。

所以,在此步骤中你创建了待接入的 Dify 应用,同时记录该应用的几个重要参数:应用的类型、该应用 API 秘钥、API 服务器访问地址。

2.2. 创建钉钉企业应用机器人

在弹出窗口里填好 应用名称、应用描述,上传应用图标点击保存。然后自动进入应用开发配置界面,通过 添加应用能力 添加机器人能力。

打开机器人配置开关,在下方出现的表单中按你的实际情况填入各必要信息,在消息接收模式上选择 Stream 模式。

点击发布后,再去到左边栏的应用发布 -> 版本管理与发布 -> 创建新版本,给应用建立一个新版本进行发布。

最后回到 凭证与基础信息,记录下该应用的 Client ID 和 Client Secret,此时左上角应用的状态应该是 已发布,到此完成钉钉机器人的配置。

2.3. 钉钉 AI 卡片配置

为了让钉钉机器人的回复也实现打字机一样的流式输出效果,需要用到钉钉近来针对 AI 功能开放的 AI 卡片。

点击 创建 后进入卡片编辑页面,这里基本不需要任何改动,如果希望机器人在出错时把具体错误信息也输出出来,可以把 启用失败状态 打开。

最后点击保存,发布,显示 “模板发布成功”,然后返回到刚才的模板列表页面,复制 ** 模板 ID**,保存下来一会儿会用到。

3. 部署 Dify-on-Dingtalk

3.1. 下载 Dify-on-Dingtalk 项目代码

git clone https://github.com/zfanswer/dify-on-dingtalk.git
# 有网络问题的可以从 gitee 镜像仓库拉取
# git clone https://gitee.com/zfanswer/dify-on-dingtalk.git

3.2. 填写配置文件

cd dify-on-dingtalk
# 将配置文件示例拷贝到 docker 文件夹中
cd docker
cp ../.env.example .env
cp ../.bots.yaml.example .bots.yaml
# 分别修改.env 和.bots.yaml 文件,配置好所需参数。

.env 文件主要是配置全局变量的,内容示例如下:

# 日志级别
LOG_LEVEL=INFO
# 默认每个机器人后台监听线程数,调大可加大可问答并发
# 不过不要太大根据 cpu 配置适当调整
DEFAULT_MAX_WORKERS=2
# Dify API 服务器访问地址,上文 2.1. 步骤里记录的
DIFY_OPEN_API_URL="https://api.dify.ai/v1"
# 用户各自上下文维持时间,默认 15 minutes,只对 chatbot app 有效
DIFY_CONVERSATION_REMAIN_TIME=15
# 钉钉 AI 卡片模板 ID,上文 2.3. 步骤里记录的
DINGTALK_AI_CARD_TEMPLATE_ID="<your-dingtalk-ai-card-temp-id>"

.bots.yaml 文件主要是配置钉钉机器人和 Dify 应用的绑定关系,内容示例配置如下:

bots:
  - name: 问答助手
    # 钉钉应用凭证信息,上文 2.2. 步骤里记录的
    dingtalk_app_client_id: <your-dingtalk-app-client-id>
    dingtalk_app_client_secret: <your-dingtalk-app-client-secret>
    # Dify 应用类型,上文 2.1. 开头提到的
    dify_app_type: <chatbot or completion or workflow>
    # Dify 应用 API 密钥,上文 2.1. 步骤里记录的
    dify_app_api_key: <your-dify-api-key-per-app>
    # 目前是固定值,不用动
    handler: DifyAiCardBotHandler
  - name: 问答助手 2
    xxx 以下略 xxx

可以看到,在文件中通过添加一组新的 bot 设定,是支持一次性配置多个机器人和 Dify 应用绑定的,这是为了用于比如企业内部人事、法务、代码助手等需要多个机器人后边配置不同的 Dify 应用。不过需要注意的是,不要把同一个钉钉机器人绑定不同的 Dify 应用,不然具体调用哪个 Dify 应用来回答是随机的。

3.3. 启动 docker 容器

通过如下命令启动 docker 容器,

# 假设现在 pwd 是在 docker 文件夹下
docker compose up -d

待容器启动后可以通过 docker logs < 容器 ID> 查看服务日志确认服务是否正常启动,出现如下日志且没有报错即为正常。

2024-08-20 18:16:42.019 | INFO     | __main__:run:33 - 待启动机器人数量:1, 预计使用最大线程数:1
2024-08-20 18:16:42.019 | INFO     | __main__:run:37 - 启动第 1 个机器人:agent_chatbot
2024-08-20 18:16:42.021 | INFO     | dingtalk_stream.stream:open_connection:131 - open connection, url=https://api.dingtalk.com/v1.0/gateway/connections/open
2024-08-20 18:16:42.314 | INFO     | dingtalk_stream.stream:start:72 - endpoint is % s

4. 实际对话测试

4.1. 将机器人添加进群聊

从群设置中找到创建的钉钉机器人,添加进群,即可开始在群众 @机器人进行对话,该示例图片中是使用了 Dify 应用的标注功能实现关键字 help 的固定输出。

4.2. 与机器人进行私聊

与机器人进行私聊有两种方法:

  1. 在群聊中左键机器人头像,选择发送消息进入私聊界面;

  2. 在搜索框中搜索机器人名称,在功能分类下找到机器人,点击进入私聊界面;

私聊界面中直接对话即可,不需要再 @ 了。

5. 后记

到此为止,Dify 应用在钉钉上的集成已经完成,希望本文给你带来了帮助。

创建 Dify 应用在本文就不赘述了,可以参考非常详实的 。这里你需要知道的是,本文介绍的方法支持接入的 Dify 应用包含了 Dify 目前所有类型。

登录进入 ,选择合适的组织,进入企业内部应用开发页面,创建一个企业内部应用。

进入钉钉开发者后台,顶部菜单 -> 开放能力 -> -> 新建模板,来新建一个 AI 卡片模板,填入你喜欢的模板名称,卡片类型选择 消息卡片,卡片模板场景选择 AI 卡片,并 关联刚才创建的应用。

本文中使用 docker 来演示如何快速启动服务,如果需要用源代码启动服务,请参考代码中 文件,两个文件的参数配置可参考其中的参数说明,也可按下边简易配置。

如果你对 Dify-on-Dingtalk 的功能还有其他需求和期待,欢迎对进行贡献。

Dify 官方文档
钉钉开发平台
卡片平台
README.md
该项目
Dify-on-Dingtalk
Dify-on-Dingtalk