办公聊天软件接入 Hermes Agent 实录(三):钉钉 Stream 模式长连接零公网跑通

📅 2026/8/13 8:58:32
办公聊天软件接入 Hermes Agent 实录(三):钉钉 Stream 模式长连接零公网跑通
办公聊天软件接入 Hermes Agent 实录三钉钉 Stream 模式长连接零公网跑通基于 Hermes Agentv0.20.0 Dify1.16.1实测。文中所有命令、日志片段、配置项均来自真实运行未做美化。目标读者企业 IT 管理员、独立开发者、AI 应用交付工程师。环境版本Hermes Agent v0.20.0 Dify 1.16.1 钉钉企业内部应用Stream 模式。前置条件已有可运行的 Hermes Gateway Dify 知识库应用接入方法见系列一企业微信篇。读完你将获得① 钉钉 Stream 模式零公网接入完整四步法 ② 懒安装后 pycache 缓存导致raw_process缺失的根因与修复 ③ 钉钉/飞书/企微三平台并存架构 ④ 20.5s 响应带引用回复的验证日志。一、为什么做这件事⚠️ 本文基于 Hermes Agentv0.20.0、Dify1.16.1、钉钉 Stream 模式 SDK 实测。钉钉开放平台的界面文案、Hermes 的配置项可能随版本调整请以官方最新文档为准。国内企业办公三巨头——飞书、企业微信、钉钉——前两个已经接进 Hermes 了各自有独立文章钉钉是最后一块拼图。三款都用同一套方案聊天软件里问知识库/跑业务流程机器人秒回带引用。钉钉有个额外的价值个人开发者也能接。不需要企业资质免费创建团队就能走通全流程——这篇文章把「个人怎么接」讲透。二、钉钉接入的两个认知先看这个2.1 应用必须「挂」在某个组织下钉钉的应用/机器人属于组织创建那一刻就绑定之后挪不走。个人开发者没有企业就免费建一个「团队」一个手机号最多建 10 个团队免费不需要认证手机钉钉 → 通讯录 → 创建加入企业/组织/团队 → 创建团队 → 起名如 My Hermes Bot然后回到开放平台open.dingtalk.com扫码登录顶部切换到新组织再创建应用——应用就属于新组织了和原来的彻底隔离。2.2 Stream Mode 长连接零公网依赖钉钉接入有两种消息接收模式我们用的是Stream 模式dingtalk-stream SDK 长连接不需要公网 IP、不需要回调 URL——和飞书/企微长连接同一套逻辑配置只需 App KeyClient ID App SecretClient Secret两个凭证文本/图片/音频/视频/文件都能收支持群 门控架构链路Stream Mode 长连接dingtalk-stream SDK调 MCP 工具 dify_askHTTP POST /v1/chat-messages返回 answer 带引用原样转发回推 表情交互钉钉客户端Hermes GatewayHermes AgentDify 知识库应用三、前置创建组织 应用人工步骤钉钉侧需要人工操作一次参考官方指引流程比飞书简单3.1 建团队组织壳手机钉钉 → 通讯录 → 创建团队1 分钟免费一个手机号最多 10 个团队。3.2 切组织 建应用open.dingtalk.com 扫码登录 → 顶部「选择组织」→选刚建的新组织关键建错地方挪不走应用开发 → 企业内部应用 → 创建应用 → 填名称/描述/图标左侧「添加应用能力 → 机器人」→ 开启开关消息接收模式选 Stream 模式零公网推荐3.3 发布与可见范围版本管理与发布 → 创建版本 →可用范围选你自己关键不选就搜不到→ 保存并发布凭证与基础信息 → 复制 Client ID Client Secret⚠️ 最容易漏的一步必须走完「发布」流程——开发后台写好了不等于上线不发布聊天框里搜不到机器人。发布后回到钉钉主界面直接搜应用名即可私聊。四、Hermes 侧接入# ~/.hermes/.env DINGTALK_CLIENT_IDdingxxx DINGTALK_CLIENT_SECRETxxx DINGTALK_ALLOWED_USERS* # 白名单* 任何人仅限开发测试# 启用插件 重启hermes pluginsenabledingtalk-platform hermes gateway restart连接成功的标志agent.loggateway.run: Connecting to dingtalk... [Dingtalk] Robot SDK initialized (media download) [Dingtalk] Connected via Stream Mode gateway.run: ✓ dingtalk connected一个小细节gateway 检测到 dingtalk-stream SDK 缺失时会自动安装Lazy-installing dingtalk-stream0.24.3不需要手动 pip。⚠️DINGTALK_ALLOWED_USERS*仅限开发测试。生产环境必须填具体钉钉 User ID——从 gateway 日志的sender_id字段获取收到第一条消息后复制。否则任何知道机器人入口的人都能触发你的 Hermes Agent 调用 Dify产生费用和安全风险。4.1 健康状态对照配置完后自检检查点健康表现异常表现 → 处理SDK 依赖自动懒安装dingtalk-stream0.24.3懒安装后 pycache 缓存 →raw_process缺失见第五节连接日志✓ dingtalk connectedConnected via Stream Mode无此行 → Client ID/Secret 错消息接收inbound message: platformdingtalk连接正常但无此行 → User ID 不在白名单Dify 调用mcp__dify_bridge__dify_ask completed无此行 → Dify 服务/MCP 桥接异常回复response ready 钉钉收到带 [1] 引用回复超时 → Dify 应用未发布或 LLM 慢五、一个致命坑懒安装后的 pycache 缓存5.1 现象连接成功Connected via Stream Mode但发消息后 SDK 层报错ERROR dingtalk_stream.client: error processing message: _IncomingHandler object has no attribute raw_process5.2 根因gateway 自动装 SDK 是「懒安装」——插件代码在 SDK 安装前就被编译缓存了__pycache__/*.pyc。编译时 SDK 还没装适配器的消息处理类继承的是空基类而非 SDK 的 ChatbotHandler导致运行时缺raw_process方法。新进程加载的是旧缓存继承链断裂。5.3 修复清掉插件缓存强制重新编译重启rm-rf~/.hermes/hermes-agent/plugins/platforms/dingtalk/__pycache__ hermes gateway restart重启后Connected via Stream Mode 消息正常处理。判断线索pyc 文件时间戳早于 SDK 安装时间 缓存的是旧版。六、验证链路真实日志6.1 真实日志钉钉发「x-office有哪些功能」后消息完整走通[Dingtalk] _send_emotion: reply Thinking ← 钉钉表情思考中 gateway.run: inbound message: platformdingtalk user周贵鲁 msgx-office有哪些功能 agent.turn_context: conversation turn: platformdingtalk agent.tool_executor: tool mcp__dify_bridge__dify_ask completed gateway.run: response ready: time20.5s response55 chars [Dingtalk] Sending response (55 chars) [Dingtalk] _send_emotion: recall Thinking reply Done ← 表情完成钉钉收到回答「根据知识库内容X-Office 提供会议纪要、任务管理、周报生成三大核心能力 [1]。」——干净、带引用。6.2 钉钉表情交互加分项钉钉适配器原生带表情交互Thinking → Done收到消息自动显示「思考中」表情、完成时回收换「完成」表情——比飞书/企微多了实时反馈体验更好。七、三平台并存飞书、企业微信、钉钉可以同时在线一个 Hermes 大脑、三个聊天软件入口gateway.run: Gateway running with 3 platform(s)会话按平台天然隔离agent:main:dingtalk:.../agent:main:feishu:.../agent:main:wecom:...互不干扰——员工用哪款办公软件都能在聊天窗口里问知识库。国内办公三巨头全覆盖企业客户问「支持钉钉/飞书/企微吗」答案都是「接」。八、总结钉钉接入一句话免费建团队组织壳→ 建企业内部应用 机器人Stream 模式→ 发布 可见范围 → Hermes 配两个凭证链路就通了。唯一坑是懒安装后的 pycache 缓存清缓存 重启即修复。方案边界Stream 模式虽零公网但属于企业内部应用形态个人免费「团队」也在此范畴可正常使用。如果未来需要回调公网 HTTPS 端点的高级场景如接收钉钉卡片回调则需改用 HTTP 模式并准备公网域名 TLS 证书。三平台钉钉/飞书/企微可同时接入且互不干扰同平台多机器人在 v0.20.0 有会话隔离限制详见系列一企业微信篇第九节生产环境建议单机器人。这套方案适合用钉钉办公、想把知识库变成「聊天窗口里随叫随到的 AI 助手」的企业以及想用个人账号自建 AI 助手的开发者——零企业资质、零公网、免费跑通。九、常见问题 FAQQ1一定要建团队组织吗个人账号不能直接建应用A钉钉应用必须归属于某个组织。个人开发者没有企业资质时免费建「团队」即可一个手机号最多建 10 个团队无需认证。Q2为什么连接成功但发消息报raw_process缺失A懒安装后的 pycache 缓存问题。清掉plugins/platforms/dingtalk/__pycache__/后重启 gateway 即可。Q3DINGTALK_ALLOWED_USERS*生产能用吗A不能。生产必须填具体钉钉 User ID从 gateway 日志的 sender_id 字段获取否则任何知道机器人入口的人都能触发你的 Hermes Agent产生费用和安全风险。Q4钉钉/飞书/企微能同时在线吗A能。Hermes 单实例多平台实测三平台在线会话按平台天然隔离agent:main:dingtalk/feishu/wecom互不干扰。十、参考资料钉钉服务端 Stream 模式官方文档https://open.dingtalk.com/document/resourcedownload/Introduction-to-stream-mode钉钉机器人接收消息官方文档https://open.dingtalk.com/document/dingstart/robot-receive-message钉钉 Stream 模式概述https://opensource.dingtalk.com/developerpedia/docs/learn/stream/overviewHermes Agent 钉钉接入文档https://hermes-agent.nousresearch.com/docs/zh-Hans/user-guide/messaging/dingtalkDify Service API 文档https://docs.dify.ai/zh-hans/api-reference/application-service-apis本系列其他篇系列零序言为什么做、怎么选、三篇地图系列一企业微信极简路线 多 Dify 应用系列二飞书权限矩阵 长连接事件订阅一次跑通本文由 AI 协作完成接入、排障、优化均为实测过程数据取自真实运行日志。有问题欢迎评论区交流。