首页/新闻资讯/正文详情

TEN Framework 钉钉机器人扩展集成指南:让 AI 助手通过 LLM 工具向钉钉群推送消息

发布时间:2026/9/24 17:22:50 来源:云帆数科 栏目:资讯中心
TEN Framework 钉钉机器人扩展集成指南:让 AI 助手通过 LLM 工具向钉钉群推送消息
人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载本指南围绕 TEN Framework 开源仓库中的dingtalk_bot_tool_python扩展展开讲解如何将该扩展作为 LLM 可调用工具集成到语音 AI 助手中使 AI 在对话中识别通知、提醒、群发等意图后自动向钉钉群聊发送文本消息。读完本文你将掌握该扩展的配置项含义、底层签名与发送原理以及把它接入voice-assistant示例应用的全流程实操方法。扩展概览一个会发消息的 LLM 工具dingtalk_bot_tool_python是 TEN Framework 生态中一个 Python 编写的扩展包位于 ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python。它本身不参与语音采集、识别或合成而是作为一个**工具Tool**挂载到 LLM 上当用户说出帮我通知团队今天下午 3 点开会这类指令时LLM 判断应当调用工具扩展随即通过钉钉群机器人的 Webhook 把消息推送到目标群聊。其核心特性包括LLM 工具集成以标准工具元数据向 LLM 注册send_message工具支持智能消息发送消息推送向钉钉群聊发送文本消息msgtype: text安全认证支持钉钉机器人的access_token与加签HMAC-SHA256 签名双重校验异步处理基于AsyncTenEnv与AsyncLLMToolBaseExtension构建非阻塞、高性能详细日志从启动、配置加载、工具注册到消息发送的每个环节都有结构化日志便于调试与监控。系统要求在集成前请确认环境满足以下条件依据 manifest.json 与 pyproject.toml 中的声明要求说明Python 版本文档要求 3.8pyproject.toml中requires-python 3.10建议按 3.10 准备TEN Runtime Python 0.11manifest 中ten_runtime_python版本声明为 0.11TEN AI Base 0.7manifest 中ten_ai_base版本声明为 0.7钉钉群机器人一个有效的自定义机器人 Webhook 及安全凭证依赖仅有一个requests用于向钉钉 API 发送 HTTP 请求requirements.txt中即一行requestspyproject.toml中进一步限定为requests2.34.2。安装依赖pip install -r requirements.txt源码结构从 Addon 注册到消息发送的实现链路在动手配置前先梳理扩展的源码结构有助于理解后续每个配置项的作用。包内关键文件如下ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python/ ├── README.md / README_CN.md # 使用文档 ├── __init__.py # 包初始化 ├── addon.py # Addon 注册入口 ├── extension.py # 扩展核心实现 ├── manifest.json # 扩展清单依赖、API 声明 ├── property.json # 默认属性凭证占位 ├── pyproject.toml # Python 工程配置 └── requirements.txt # 依赖列表Addon 注册addon.pyaddon.py 通过register_addon_as_extension(dingtalk_bot_tool_python)将扩展注册为名为dingtalk_bot_tool_python的 addon并在on_create_instance中创建DingTalkBotExtension实例register_addon_as_extension(dingtalk_bot_tool_python) class DingTalkBotAddon(Addon): def on_create_instance(self, ten_env: TenEnv, name: str, context) - None: ten_env.on_create_instance_done(DingTalkBotExtension(name), context)这就是为什么在图的节点配置中name与addon都填写dingtalk_bot_tool_python——addon对应注册名name是图中实例名。扩展核心extension.pyextension.py 是核心实现包含三大部分工具元数据定义工具名为send_message描述为 Send a message to DingTalk group chat. Use this when user wants to notify team members or send information to DingTalk.唯一参数contentstring 类型、必填即要发送的消息内容。生命周期方法on_start中通过DingTalkBotConfig.create_async(ten_envten_env)异步加载配置对应property.json中的access_token与secret随后构造tool_register命令并send_cmd发送给主控制器完成工具注册on_cmd中处理tool_call命令解析工具名与arguments命中send_message时调用run_tool执行。消息发送实现_send_dingtalk_message方法负责构造 Webhook URL 并 POST 文本消息其中签名逻辑严格对应钉钉官方加签算法if secret: timestamp str(round(time.time() * 1000)) secret_enc secret.encode(utf-8) string_to_sign {}\n{}.format(timestamp, secret) string_to_sign_enc string_to_sign.encode(utf-8) hmac_code hmac.new( secret_enc, string_to_sign_enc, digestmodhashlib.sha256 ).digest() sign urllib.parse.quote_plus(base64.b64encode(hmac_code)) webhook_url f{webhook_url}timestamp{timestamp}sign{sign}即以毫秒时间戳timestamp \n secret作为待签名字符串用secret作为密钥做 HMAC-SHA256再经 Base64 编码与 URL 编码得到sign拼接到 Webhook 上最终请求体为{msgtype: text, text: {content: content}}。发送结果以errcode 0判定成功失败时把钉钉返回的错误码与错误信息回传给 LLM方便模型向用户解释原因。API 契约manifest.jsonmanifest.json 声明了扩展的 APIcmd_intool_call属性含namestring必填与argumentsobjectcmd_outtool_register属性tool为包含name、description、parameters数组格式的对象返回结果含response。api.property.properties.params声明了两个可配置项access_token与secret与配置章节一一对应。这也印证了配置时需将凭证写入节点的property下也可包裹在params对象中取决于图配置写法BaseConfig.create_async会按声明结构读取。配置获取凭证并写入扩展属性获取钉钉机器人凭证在钉钉群中添加自定义机器人机器人类型选择自定义设置安全设置建议同时启用关键词与加签其中加签会生成secret从 Webhook 地址中提取access_tokenURL 中access_token后的部分若启用了加签保存secret密钥。配置文件设置编辑扩展的 property.json默认内容为两个空字符串占位{ access_token: your_dingtalk_access_token_here, secret: your_dingtalk_secret_here }在实际应用中更推荐把凭证写在应用图app 的property.json中对应扩展节点的property字段里并使用环境变量引用见下文避免敏感信息入库。重要安全提示不要将包含真实凭证的property.json提交到版本控制系统建议使用环境变量或密钥管理服务存储敏感信息。环境变量可选可以通过环境变量注入凭证。TEN 框架的图配置支持${env:VAR_NAME}语法voice-assistant示例中agora_rtc、stt、llm等节点即使用该语法因此可将节点属性写成property: { access_token: ${env:DINGTALK_ACCESS_TOKEN}, secret: ${env:DINGTALK_SECRET} }对应的环境变量设置export DINGTALK_ACCESS_TOKENyour_access_token export DINGTALK_SECRETyour_secret使用${env:VAR}语法后真实凭证只存在于运行环境中property.json可以安全入库。集成到 voice-assistant 示例完整三步原文档给出了把该扩展接入 ai_agents/agents/examples/voice-assistant 示例的详细步骤。以下是基于仓库实际文件manifest.json 与 property.json整理的完整流程。步骤 1添加扩展依赖编辑 ai_agents/agents/examples/voice-assistant/tenapp/manifest.json在dependencies数组中追加仓库中该文件第 157 行附近是weatherapi_tool_python依赖可紧随其后添加{ dependencies: [ // ... 其他依赖 ... { path: ../../../ten_packages/extension/dingtalk_bot_tool_python } ] }该相对路径从tenapp目录出发指向ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python与示例中其他扩展如weatherapi_tool_python的写法一致。步骤 2添加扩展节点编辑 ai_agents/agents/examples/voice-assistant/tenapp/property.json在ten.predefined_graphs[0].graph.nodes数组中追加钉钉扩展节点示例中weatherapi_tool_python节点之后是合适的插入位置{ type: extension, name: dingtalk_bot_tool_python, addon: dingtalk_bot_tool_python, extension_group: default, property: { access_token: your_dingtalk_access_token_here, secret: your_dingtalk_secret_here } }步骤 3注册工具到主控制器在同一个文件的connections部分找到main_control的cmd配置仓库中tool_register连接位于约第 120-128 行当前source中只有weatherapi_tool_python把钉钉扩展追加进source数组{ extension: main_control, cmd: [ { names: [ tool_register ], source: [ { extension: weatherapi_tool_python }, { extension: dingtalk_bot_tool_python } ] } ] }这条连接的意义在于dingtalk_bot_tool_python在on_start中会主动发送tool_register命令只有把它加入main_control的tool_register来源主控制器即 LLM 编排层才能收到并登记该工具。完整配置示例综合以上三步property.json中修改后的关键结构如下{ ten: { predefined_graphs: [ { name: voice_assistant, auto_start: true, graph: { nodes: [ // ... 其他节点(agora_rtc, stt, llm, tts 等) ... // 添加钉钉扩展节点 { type: extension, name: dingtalk_bot_tool_python, addon: dingtalk_bot_tool_python, extension_group: default, property: { access_token: your_dingtalk_access_token_here, secret: your_dingtalk_secret_here } } ], connections: [ { extension: main_control, cmd: [ // 注册工具到主控制器 { names: [tool_register], source: [ {extension: weatherapi_tool_python}, {extension: dingtalk_bot_tool_python} // 添加这一行 ] } ] } // ... 其他连接配置 ... ] } } ] } }需要修改的文件与配置参数汇总需要修改两个文件manifest.json示例约第 157 行添加扩展路径依赖property.json两处修改一处在nodes中新增扩展节点另一处在main_control的tool_register连接的source中追加钉钉扩展。核心配置参数参数类型必填说明access_tokenstring✅钉钉机器人的 access token取自 Webhook URLsecretstring✅钉钉机器人的加签密钥启用加签安全设置时获得extension_groupstring✅扩展组设置为default与weatherapi_tool_python同组便于统一管理验证配置与运行效果配置完成后启动 voice-assistant 应用观察日志确认扩展正常加载。扩展在on_start阶段会输出以下关键日志对应 extension.py 中的日志埋点[DingTalkBotExtension] on_start BEGIN [DingTalkBotExtension] Config loaded successfully [DingTalkBotExtension] - access_token: SET (length32) [DingTalkBotExtension] - secret: SET (length32) [DingTalkBotExtension] Registering tool with parameter array format... [DingTalkBotExtension] Tool registration result: ... [DingTalkBotExtension] on_start END 日志会回显access_token与secret是否已设置仅打印长度不泄露明文以及tool_register命令的返回结果可用于确认工具是否成功注册。正常运转时AI 与用户的交互效果如下用户: 帮我通知团队今天下午3点开会 AI: 好的我已经向钉钉群发送了会议通知钉钉群内收到的消息今天下午3点开会当send_message被执行时日志中会出现run_tool CALLED、DingTalk API response等记录若errcode 0扩展返回成功信息给 LLM否则会把钉钉的错误码与错误消息回传便于排查。常见问题排查Q配置后扩展没有加载检查manifest.json中dependencies里的路径是否正确指向ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python确认已运行task install安装依赖若使用 TEN Agent 的 Taskfile 工作流使扩展包被拉取到本地ten_packages目录观察启动日志中是否出现[DingTalkBotExtension] on_start BEGIN确认 addon 是否被创建addon.py 中on_create_instance会打印 Creating DingTalk Bot Extension instance。Q消息发送失败检查access_token与secret是否正确、是否与钉钉后台一致查看日志中的错误码与错误信息DingTalk API response中的errcode/errmsg常见如errcode310000签名错误或关键词不匹配等确认钉钉机器人的安全设置若启用了加签secret必须正确若启用了关键词消息内容需包含关键词否则钉钉会拒绝推送。Q工具未注册到 LLM检查connections中main_control的tool_register连接是否已将dingtalk_bot_tool_python加入source确认tool_register命令的连接配置正确且扩展与主控制器在同一图graph中确认扩展节点的extension_group设置为default与weatherapi_tool_python保持一致避免工具注册链路被分组隔离。小结dingtalk_bot_tool_python以标准的 LLM 工具形态为 TEN Framework 语音助手补上了钉钉群消息推送能力它通过tool_register完成工具登记通过tool_call接收 LLM 的调用意图内部用钉钉官方的 HMAC-SHA256 加签算法构造 Webhook 并发送文本消息全程异步并输出结构化日志。集成只需在应用的manifest.json与property.json中完成三处修改即可让 AI 助手在对话中自动完成群通知任务。若需自定义消息类型或扩展更多能力如 Markdown、ActionCard 消息可基于 extension.py 中的_send_dingtalk_message方法进一步改造。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐C无锁并发队列完整指南moodycamel::ConcurrentQueue单头文件集成与预分配调优C无锁并发队列完整指南moodycamel::ConcurrentQueue单头文件集成与预分配调优 最近给一条实时渲染管线做性能分析profiling人工智能AI Agent多模态语音AI 应用WePush钉钉消息推送机器人消息与工作通知的完整实现WePush钉钉消息推送机器人消息与工作通知的完整实现 想要实现高效的钉钉消息批量推送吗WePush作为一款专注批量推送的小而美工具提供了完整的钉钉消息推开发工具MeterSphere钉钉机器人消息通知配置指南MeterSphere钉钉机器人消息通知配置指南 问题背景 在使用MeterSphere测试平台时许多团队希望通过钉钉机器人接收项目相关的测试通知。近期有用户测试接口测试测试管理后端前端AI 应用上一篇Crawlee v3 升级指南从 Apify SDK v2 迁移到 Crawlee 的完整破坏性变更清单下一篇Mastra 云端部署与可观测性架构解析Deploy → Token → Traces → Storage 全链路实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Sure Helm Chart 版本演进深度解析:从 Redis Sentinel 高可用到 Pipelock AI 安全代理的迭代全览
Sure Helm Chart 版本演进深度解析:从 Redis Sentinel 高可用到 Pipelock AI 安全代理的迭代全览

金融科技后端前端移动开发桌面应用AI 应用 【免费下载链接】sure The personal finance app for everyone (by everyone) 项目地址: https://gitcode.com/gh_mirrors/sure5/sure 点击查看 免费下载 Sure 官方 Helm Chart 负责将 Rails(web) … · 2026/9/24 17:22:50

PostGraphile V5 Refs 完全指南:用 @ref / @refVia 智能标签为 GraphQL 类型建立跨表关联
PostGraphile V5 Refs 完全指南:用 @ref / @refVia 智能标签为 GraphQL 类型建立跨表关联

后端API网关 【免费下载链接】crystal 🔮 Graphiles Crystal Monorepo; home to Grafast, PostGraphile, pg-introspection, pg-sql2 and much more! 项目地址: https://gitcode.com/gh_mirrors/cry/crystal 点击查看 免费下载 导读 PostGraphile 会自… · 2026/9/24 17:22:50

Semi Design FloatButton 悬浮按钮组件完全指南:从基础用法到源码级解析
Semi Design FloatButton 悬浮按钮组件完全指南:从基础用法到源码级解析

Semi Design FloatButton 悬浮按钮组件完全指南:从基础用法到源码级解析 【免费下载链接】semi-design 🚀A modern, comprehensive, flexible design system and React UI library, AI-friendly built-in.🎨Provide 3000 Design Tokens, easy… · 2026/9/24 17:22:43

【Coze】【视频】小人国风格动画工作流
【Coze】【视频】小人国风格动画工作流

今天给大家演示一个 微观小人国场景构建与多模态生成的 Coze 工作流。这个工作流的设计目标,是将用户输入的主题转化为成体系的微观生活场景,再通过大模型生成文本、图像与视频内容,最终形成可用于创作与展示的多模态成果。从场景文本构思,到文生图提示词,再到批量图像生成… · 2026/9/24 18:27:12

快速排序实战笔记:从分治原理到代码优化与边界排查
快速排序实战笔记:从分治原理到代码优化与边界排查

如果你和我一样,是靠刷 LeetCode 硬啃基础算法过来的,那“快速排序”这四个字你绝对不陌生。很多人在基础算法集训里把它当成一道“背模板题”——敲一遍快排代码、跑通几个用例,就觉得自己会了。但真到了手撕代码、处理大数据量、甚至面试被… · 2026/9/24 18:27:06

从原理到实战:搭建轻量级沙箱环境与隔离技术解析
从原理到实战:搭建轻量级沙箱环境与隔离技术解析

说到沙箱技术,很多人的第一印象可能是留档取证或者安全分析人员的神秘工具,但把它放到日常软件工程里,它其实就是一个“能让你胆大心细地跑不受信任代码”的基础设施。我最早接触沙箱,是因为要分析一系列可疑的 Office 文档&#… · 2026/9/24 18:27:06

从“音轨列表”到“场景叙事”:白噪音App差异化设计与实时音频实现
从“音轨列表”到“场景叙事”:白噪音App差异化设计与实时音频实现

做白噪音App的人应该都有这种感觉:打开应用商店搜一下“白噪音”,满屏的图标全是水滴、树叶、篝火、月亮,截图里都是深蓝紫渐变背景加一个圆形播放按钮,功能列表也逃不开那几样——场景列表、混音器、定时关闭、睡眠模式。我当时拿… · 2026/9/24 18:27:00

智慧工地人员安全管理系统:从实名制到AI识别的全链路闭环
智慧工地人员安全管理系统:从实名制到AI识别的全链路闭环

工地上最怕的不是活儿难干,而是人出事儿。我经手过不少智慧工地项目,说实话,大多数平台都在做“监控考勤扬尘噪音”这老三样,真正把“人员安全”当成核心去设计的并不多。“程象一站式智慧工地人员安全管理系统”这个名字之所以让… · 2026/9/24 18:27:00

仿写校园官网:从HTML/CSS到响应式布局的完整实战
仿写校园官网:从HTML/CSS到响应式布局的完整实战

校园官网这四个字听起来没什么技术含量,真的动手仿写过之后我才发现,它是那种“看着容易、做起来全是细节”的练手目标。我选择它,不单是因为结构完整、栏目齐全,更因为它把信息展示型页面该有的元素几乎占全了:既有轮… · 2026/9/24 18:27:00

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码