使用钉钉远程操作你的claude code
通过钉钉机器人与 Claude Code 对话。支持多轮会话,在钉钉里即可使用 Claude Code 的全部能力。项目地址:
https://github.com/suyin58/claudetalk
实现的效果(支持多轮回话):
起因是: 今天看到一则消息,Claude Code 原生支持通过 channels 的方式实现聊天工具远程操作,但只支持 Telegram 和 Discord。
我就想花一点时间,把钉钉也集成上去。
项目目标
将 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
claude -p 会返回 JSON 格式的结果,包含 result、session_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
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]