惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
MyScale Blog
MyScale Blog
博客园 - Franky
The Cloudflare Blog
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
WordPress大学
WordPress大学
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
Martin Fowler
Martin Fowler
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
腾讯CDC
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
博客园 - 【当耐特】
美团技术团队
云风的 BLOG
云风的 BLOG

博客园 - 月·漩涡

java写的马赛克拼图生成软件 mybatis-generator 类型转化插件 mybatis-generator 注释插件 mybatis-generator lombok插件 mybatis-generator 唯一索引插件 mybatis-generator 自定义插件 Dubbo 使用rest协议发布http服务 Dubbo封装rest服务返回结果 dubbo rest返回值异常Incompatible types: declared root type 解决resteasy上传表单文件名乱码 RSA加密解密及RSA加签验签 使用OTP动态口令(每分钟变一次)进行登录认证 讲一下创业公司的技术架构演进 开源分布式任务调度平台Cuckoo-Schedule Nginx二级域名配置 Java分页下载 Solr6+IKAnalyzer分词环境搭建 消息发送平台简单架构设计 优先级线程池实现
使用钉钉远程操作你的claude code
月·漩涡 · 2026-03-21 · via 博客园 - 月·漩涡

通过钉钉机器人与 Claude Code 对话。支持多轮会话,在钉钉里即可使用 Claude Code 的全部能力。

项目地址:
https://github.com/suyin58/claudetalk


实现的效果(支持多轮回话):

1

 

起因是: 今天看到一则消息,Claude Code 原生支持通过 channels 的方式实现聊天工具远程操作,但只支持 Telegram 和 Discord。

2

我就想花一点时间,把钉钉也集成上去。

项目目标

将 Claude Code 接入钉钉机器人,实现在钉钉中与 Claude Code 对话,支持多轮会话。


从 MCP Channel 到 CLI 调用

尝试 MCP Channel 方案

一开始我按照官方文档的思路,打算把程序作为 MCP Server 插件运行在 Claude Code 内部。配置 .mcp.json

{ "mcpServers": { "dingtalk": { "command": "bun", "args": ["src/index.ts"], "env": { "DINGTALK_CLIENT_ID": "xxx", "DINGTALK_CLIENT_SECRET": "xxx" } } } }

然后启动:

claude --dangerously-load-development-channels server:dingtalk

但 Claude Code 直接提示:

--dangerously-load-development-channels ignored (server:dingtalk) Channels are not currently available

查了官方文档才知道,channels 功能需要 claude.ai 登录,Console 和 API key 认证不支持。而我的环境用的是智谱 GLM 模型(ANTHROPIC_BASE_URL 指向 open.bigmodel.cn),所以这个路子走不通。

换个思路:直接调用 CLI

MCP Channel 用不了,突然想到万物皆可以cli,而且claude自己也很推崇cli,就去查了一下,果然claude自身也支持cli来调用。那就换个更直接的方式——写一个独立的钉钉机器人,收到消息后直接调用 claude -p 命令。

架构很简单:

钉钉消息 → Stream WebSocket 接收 → claude -p 处理 → sessionWebhook 回复

核心代码就几行:

# 新会话 echo "你好" | claude -p --output-format json --dangerously-skip-permissions # 继续会话 echo "继续" | claude -p --output-format json --dangerously-skip-permissions --resume <session_id>

claude -p 会返回 JSON 格式的结果,包含 resultsession_id 等字段。每个钉钉的 conversationId 对应一个 session_id,这样就能实现多轮对话。

回复消息用钉钉的 sessionWebhook 最简单,直接 POST 就行,不用调 API。

遇到的权限问题

刚开始跑的时候,Claude 总是回复"请在权限提示中点击允许"。

这是因为 claude -p 在非交互模式下遇到权限提示时,不会自动处理。我试了 --permission-mode auto,但不知道是 GLM 模型的原因还是版本问题,这个参数不生效。

最后加上了 --dangerously-skip-permissions,问题就解决了。虽然名字听起来有点危险,但在这个场景下是合适的。

这里面都是 MCP Channel 调试过程中遇到的问题,如果哪位大佬用的是正版的claude code,可以试试这个MCP的方案。

  • MCP capabilities 要声明 experimental: { 'claude/channel': {} }
  • 推送消息用 notifications/claude/channel
  • 接收回复要注册名为 reply 的 tool