news 2026/9/12 5:54:25

AgentScope Agent Service 怎么接入钉钉渠道?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AgentScope Agent Service 怎么接入钉钉渠道?

AgentScope Agent Service 怎么接入钉钉渠道?

【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

要把 AgentScope 2.0 的 Agent Service 接到钉钉里,让钉钉用户通过单聊或群聊 @机器人 直接和 Agent 对话,你需要完成三件事:装好带渠道依赖的 AgentScope、在服务端把DingTalkChannel注册进create_app、再在 Web UI(或调用/channels接口)里创建一条钉钉渠道并填上钉钉应用的 Client ID / Client Secret。本文按这条主路径给出可执行的步骤,适用环境为examples/agent_service示例所要求的前提:Python ≥ 3.11、Redis 作为后端存储、Node.js ≥ 20(仅 Web UI 需要)。

准备:安装依赖并确认渠道已注册

钉钉渠道依赖官方的dingtalk-streamSDK(版本要求>=0.24.3,见 pyproject.toml 中channelextra),而fullextra 已经包含了它:

uv pip install agentscope[full]

同时按 examples/agent_service/README.md 的 Quickstart 安装并启动 Redis(macOS、Linux、Docker 三种方式文档都给了),例如:

# Linux (systemd) sudo apt install redis-server sudo systemctl start redis-server # Docker (cross-platform) docker run --rm -p 6379:6379 redis:7

然后检查 examples/agent_service/main.py:示例默认就把三个渠道类型注册进了应用,DingTalk 已在其中,无需改动:

channels=[ DingTalkChannel, DiscordChannel, FeishuChannel, ],

启动服务:

cd examples/agent_service python main.py

服务默认监听0.0.0.0:8000。钉钉渠道走官方 Stream SDK 的长连接(见 src/agentscope/app/channel/_dingtalk/_channel.py 顶部说明),不需要为它配置公网回调地址;出站消息、媒体、卡片则全部通过钉钉 OpenAPI 发送。

创建钉钉渠道

主路径:通过 Web UI 创建

在另一个终端启动示例配套的 Web UI:

cd examples/web_ui/ pnpm install pnpm dev

在 Web UI 里把 API endpoint 设置为http://localhost:8000,进入渠道管理页创建渠道,按表单依次完成(表单校验规则来自 channel-form.tsx 的isChannelFormValid,缺项不能提交):

  1. 渠道类型选DingTalk
  2. 填写渠道名称(必填)。
  3. 凭据:Client IDClient Secret,即钉钉应用的 AppKey 和 AppSecret(字段定义见 src/agentscope/app/channel/_dingtalk/_channel.py 中的Credentials模型)。表单字段是由GET /channels/types返回的credentials_schema动态渲染的,选中钉钉类型后这两个输入框会自动出现。
  4. 选择一个聊天模型(chat_model_config,必填,模型来自服务里已配置好的凭据)。
  5. 路由绑定(Routing):示例 UI 的默认绑定是match_key: "chat_id"match_value: "*"session_scope: "per_chat",并把消息路由到你指定的agent_idmatch_value可填GET /channels/{id}/chat_ids返回的具体会话 id 来限定只接某些会话,*表示全部。
  6. 提交后渠道以启用状态创建(enabled: true)。

备选路径:直接调用 HTTP 接口

渠道的完整 API 见 src/agentscope/app/_router/_channel.py:

POST /channels/ 创建渠道 GET /channels/ 列出当前用户的渠道 PATCH /channels/{id} 更新路由/会话/配置 GET /channels/{id}/status 聚合的实时连接状态 GET /channels/{id}/chat_ids 已知会话(用于路由配置) POST /channels/{id}/enable / disable

创建请求体对应 CreateChannelRequest:

{ "channel_type": "dingtalk", "name": "my-dingtalk", "credentials": { "client_id": "<你的钉钉应用 Client ID (AppKey)>", "client_secret": "<你的钉钉应用 Client Secret (AppSecret)>" }, "platform_config": { "only_at_reply": true }, "routing": { "bindings": [ { "match_key": "chat_id", "match_value": "*", "agent_id": "<服务中的 Agent ID>", "session_scope": "per_chat" } ] }, "session": { "chat_model_config": "<填服务中已配置的模型>", "permission_mode": "default" }, "enabled": true }

其中尖括号内容是读者必须替换的值:agent_id用你服务里已创建的 Agent;session.chat_model_config的具体结构以GET /channels/{id}返回的记录中的session字段为准(创建渠道时响应里会原样带回)。凭据也可以走POST /channels/bindings的绑定流程再创建,凭据不必经过浏览器表单。

钉钉平台侧配置项(platform_config)

以下选项来自 DingTalkChannel.Config,在 Web UI 的渠道表单里按 schema 动态渲染,也可通过PATCH /channels/{id}platform_config更新:

配置项默认值作用
only_at_replytrue群聊中仅在机器人被 @ 时才回复
show_tool_processfalse在回复中内联展示工具调用和结果
show_thinkingfalse在回复中内联展示模型推理过程
max_media_bytes10 * 1024 * 1024单个收发附件的大小上限
streaming_card_template_id官方公开的 AI 卡片模板流式回复用的 AI 卡片模板;清空后改为普通 Markdown 消息回复
approval_card_template_id公开审批卡片模板工具审批卡片模板;清空后需要审批的工具调用会卡住,渠道会发一条提示文案说明

验证接入结果

  1. 连接状态:调用GET /channels/{id}/status(Web UI 的渠道详情页也展示)。渠道源码里的状态机是:先connecting,Stream 客户端建立 websocket 后变为connected;断开后如果曾连上过则进入retrying(SDK 自带重连);发生异常时为failed并带last_error字段,日志里会记录DingTalk '<channel_id>' Stream client failed。看到connected说明 Stream 长连接已建立。
  2. 收到消息:在钉钉里私聊机器人,或在群里 @机器人 发一条消息。only_at_reply保持默认true时,群里未被 @ 的消息会被直接忽略,这是预期行为而非故障。
  3. 回复形式:默认配置下回复以流式 AI 卡片呈现;如果卡片创建或更新失败,渠道会回退成一条或多条 Markdown 消息(超过 4000 字会拆分,max_message_length为 4000)。
  4. 会话列表GET /channels/{id}/chat_ids返回已知会话。注意钉钉的限制:平台侧没有暴露应用机器人的会话枚举 API,所以该列表只包含本进程实际收到过消息回调的会话(源码中list_bot_chats的 docstring 明确说明)。想扩大路由范围前,先让目标会话里发过一条消息。

边界与限制

  • 出站文件类型:除图片外,钉钉侧只接受docdocxpdfrarxlsxzip后缀的文件(见 src/agentscope/app/channel/_dingtalk/_openapi.py 的_SUPPORTED_FILE_TYPES),其他后缀会被渠道拒绝并记 warning。
  • 工具审批:如果 Agent 启用了需要人工确认的工具调用,钉钉侧会以审批卡片呈现;approval_card_template_id被清空时无法投递卡片,聊天中会出现「无法展示工具审批卡片」的提示文案,运行会停在等待审批状态。
  • 凭据不可事后修改PATCH /channels/{id}不支持改渠道类型和凭据(UpdateChannelRequest 注释标明 type/credentials immutable),填错 AppKey/AppSecret 只能删除渠道重建。
  • 服务重启后,之前记录的已知会话仍在(走 Redis 存储),但chat_ids中「被动观察到」的部分要等新回调进来才会出现。

接入完成后的自然延伸:通过 Web UI 的渠道详情页调整路由绑定和platform_config,或参考 README 中 "What Next" 一节继续定制main.py(MCP、中间件、workspace manager)。

【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 5:52:10

wxPython进销存系统实战:轻量桌面方案落地中小商户

简介&#xff1a;这是一份面向Python初学者的wxPython GUI开发实战学习资源&#xff0c;聚焦进销存管理系统这一典型企业级应用&#xff0c;帮助开发者掌握跨平台桌面程序的设计与实现。资源共206个文件&#xff0c;包含12个核心Python源码&#xff08;如main.py入口、MainPane…

作者头像 李华
网站建设 2026/9/12 5:51:58

技术团队如何评估与拒绝不合理需求

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 5:49:33

gpt-image-2 技术解析与工程实践:从 API 接入到提示词调优

1. 为什么 gpt-image-2 值得单独整理一份资源清单 这两年 AI 绘图模型迭代速度快到让人有点追不过来&#xff0c;但 gpt-image-2 发布之后&#xff0c;我明显感觉到它和上一代产品在“可用性”上的差距拉开了。以前我们讨论图像模型&#xff0c;核心关注点是“画得像不像、美不…

作者头像 李华
网站建设 2026/9/12 5:49:26

从Prompt到Skills:AI编程技能封装与Claude Code实战指南

这两年做AI编程和Agent相关的工作&#xff0c;我最大的感受是&#xff1a;真正的生产力瓶颈往往不在模型本身&#xff0c;而在于你怎么把重复性的"专家经验"沉淀下来。以前我新开一个Claude Code会话&#xff0c;总是要重新念叨一遍"你是资深前端工程师"&q…

作者头像 李华
网站建设 2026/9/12 5:46:37

UC3843AC反激电源设计实战:从变压器计算到环路调试的完整记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华