Hermes Agent × 钉钉机器人集成
让 Hermes AI Agent 通过钉钉机器人接收和回复消息,作为移动端入口。
快速开始
前提条件
- 已安装 Hermes Agent(参考 Hermes 官方文档)
- 有钉钉开放平台的企业内部应用权限
- Python 3.10+ 环境
三步部署
# 1. 克隆本项目
git clone <repo-url> hermes-dingtalk
cd hermes-dingtalk
# 2. 运行一键部署脚本(交互式引导)
bash setup.sh
# 3. 启动网关
hermes gateway restart
在钉钉中找到你的机器人,发条消息试试!
项目结构
hermes-dingtalk/
├── README.md # 本文档
├── setup.sh # 一键部署脚本
├── patches/
│ └── dingtalk.py # 修复后的钉钉适配器(覆盖官方文件)
├── config/
│ ├── .env.template # 环境变量模板
│ └── config.yaml.template # Hermes 配置模板
├── docs/
│ ├── dingtalk-setup-guide.md # 钉钉开放平台配置指南(图文)
│ └── architecture.md # 架构原理与 Bug 修复说明
└── scripts/
└── (扩展脚本)
钉钉开放平台配置
在运行 setup.sh 之前,你需要先在钉钉开放平台创建应用。
详细图文指南请参阅: docs/dingtalk-setup-guide.md
简要步骤:
- 登录 https://open-dev.dingtalk.com/
- 创建「企业内部应用」
- 开启「机器人」能力
- 消息接收模式选择 Stream 模式
- 记录 ClientID、ClientSecret、AgentId
- 发布应用
修复的 Bug 清单
官方 dingtalk.py 存在 5 个 Bug 导致钉钉集成无法正常工作:
| # | 问题 | 原因 | 修复 |
|---|------|------|------|
| 1 | Webhook 正则不匹配 | 正则只匹配 api.dingtalk.com,实际 webhook 域名是 oapi.dingtalk.com | 改为 [a-z]*api\.dingtalk\.com |
| 2 | Stream 启动报错 | asyncio.to_thread(start) 包装了本身就是 async 的函数 | 直接 await start() |
| 3 | 消息处理函数签名错误 | process() 是同步函数,但 SDK 用 await 调用 | 改为 async def |
| 4 | 消息类型解析错误 | SDK 传 CallbackMessage,代码按 ChatbotMessage 处理 | 用 ChatbotMessage.from_dict(data) 转换 |
| 5 | 文本提取失败 | text 是 对象,代码只处理 dict/str | 增加 属性提取 |