解决 devapp→dev 重构与 connect/数字分身工作的合并冲突,方向:全面对齐 wxianfeng 的 dev 命名空间,保留我方两处实质内容(动态端点 + connect 功能)。 冲突解决要点: - release.yml:取 wxianfeng 更干净的 npm 守卫(repository_owner + 注释); 保留我新增的「-dws-devapp 翻成非 prerelease+latest」步骤 - devapp.go / devapp_test.go / 路由文档:取 wxianfeng(新 MCP 工具名 *_dev_app_*/extension、新增 event 工具、删 robot create、config 合 upsert) - 端点:保留我方动态 devappMCPEndpoint()(网关 base 推导、生产默认), 否则会把「建号对所有人打预发」的 bug 倒灌回来;同步修 helper_tool_fetcher.go 与 direct_runtime_test.go 改用该函数 + wxianfeng 工具名 list_dev_app - devapp_connect.go:connect 命令对齐 dev connect 命名,保留我方 --agent-cmd 自研渠道示例(#37),建号引用修正为真实存在的 robot submit - skills:跟随 wxianfeng 删除旧 dingtalk-devapp(已被重写的 dingtalk-dev 覆盖) - robot-quickstart.md:命令全改 dws dev(建号两步 submit+result、dev connect), 下载源改 wxianfeng,去掉写死版本号用 releases/latest 验证:go build ./... 通过;go vet 干净;internal/app、internal/helpers 单测全过
7.3 KiB
钉钉 AI 群机器人快速上手
10 分钟搭一个自己的钉钉群答疑机器人:群里 @它 提问,它用你本地的 AI(Claude Code / Codex / Qoder 等)回答,支持发文字和报错截图。
只需四步:装工具 → 建机器人 → 接上 AI → 拉进群。
第一步:安装 dws
macOS
打开终端,整段复制执行(Intel / Apple 芯片都适用):
ARCH=$(uname -m | sed 's/x86_64/amd64/')
mkdir -p ~/.local/bin
curl -fsSL -o /tmp/dws.tar.gz "https://github.com/wxianfeng/dingtalk-workspace-cli/releases/latest/download/dws-darwin-${ARCH}.tar.gz"
tar xzf /tmp/dws.tar.gz -C ~/.local/bin dws
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
dws version
Windows
打开 PowerShell,整段复制执行:
New-Item -ItemType Directory -Force "$env:USERPROFILE\dws" | Out-Null
Invoke-WebRequest -Uri "https://github.com/wxianfeng/dingtalk-workspace-cli/releases/latest/download/dws-windows-amd64.zip" -OutFile "$env:TEMP\dws.zip"
Expand-Archive -Path "$env:TEMP\dws.zip" -DestinationPath "$env:USERPROFILE\dws" -Force
[Environment]::SetEnvironmentVariable("Path", "$env:Path;$env:USERPROFILE\dws", "User")
然后重新打开一个 PowerShell 窗口,执行 dws version 确认。
两个平台装好后都应显示形如
dws version v1.0.6x-dws-devapp的版本号(能打印版本即安装成功,具体数字以最新发布为准)。其他平台(Linux / Windows ARM)的安装包在 最新 Release 页面下载。
登录钉钉
dws auth login
按提示扫码登录即可。
第二步:创建机器人
建号是异步的,两步(名字、描述可以改成你自己的):
# 1) 提交建号任务,记下返回的 taskId
dws dev app robot submit --name 我的智能体 --robot-name 小助手 --desc "群内答疑" --yes --format json
# 2) 用上一步的 taskId 查结果,直到 status 变成 SUCCESS(还是 WAITING 就过几秒再查一次)
dws dev app robot result --task-id 上一步返回的taskId --format json
status 变成 SUCCESS 后,返回结果里的 clientId 和 clientSecret 保存好,下一步要用。
第三步:把机器人接上你本地的 AI
dws dev connect --channel auto --robot-client-id dingxxxxxxxxxxxxxxxx --robot-client-secret yyyyyyyyyyyyyyyyyyyy
- 把
dingxxxxxxxxxxxxxxxx和yyyyyyyyyyyyyyyyyyyy换成第二步返回的clientId和clientSecret的实际值 --channel auto自动识别你电脑上装的 AI 工具(Claude Code / Codex / Qoder / Gemini 等)- 这个命令是前台运行的:窗口开着机器人在线,关掉窗口机器人下线
第四步:拉进群聊
在钉钉里打开目标群:
群设置 → 机器人 → 添加机器人 → 在企业机器人里搜"小助手"(你起的名字)→ 添加
完成。现在在群里 @小助手 提问试试,发文字、发报错截图都能答。
进阶配置(可选)
按需加在第三步的命令后面:
| 参数 | 作用 |
|---|---|
--agent-workdir ./项目目录 |
让机器人在你的项目目录里跑,能读到和终端一样的本地文件(详见下方「机器人答得不如终端准?」) |
--knowledge-dir ./docs |
挂本地知识目录(.md/.txt),回答自动带上你的资料 |
--agent-cmd "<命令>" |
接入内置列表之外的 AI 工具(自研的、或还没内置支持的),详见下方「想用没在列表里的 AI 工具?」 |
--allowed-users 工号1,工号2 |
用户白名单,名单外的人无法触发机器人 |
--allowed-groups 群ID |
群白名单 |
--user-rate-limit 0 |
关闭限流(默认每人每分钟 20 条) |
想用没在列表里的 AI 工具?(自研 / 未内置支持)
--channel auto 只认内置的几款工具(Claude Code / Codex / Qoder / Gemini 等)。如果你用的是自研的、或还没内置支持的 AI(比如网易有道龙虾 LobsterAI),用 --agent-cmd 把它接进来——只要它能在命令行「一次性」跑(给一段问题、把答案打到标准输出),就能接:
dws dev connect \
--agent-cmd "你的AI命令 一次性问答参数" \
--robot-client-id dingxxxx --robot-client-secret yyyy
机器人收到群消息后,会执行 你的AI命令 一次性问答参数 "用户的问题"(问题作为最后一个参数追加),把它打印出来的内容当作回复发回群里。
举例:假设龙虾的命令行叫 lobster、一次性问答用 -p 参数,就写 --agent-cmd "lobster -p"。命令里有空格就整体用引号括起来。
常见问题
执行命令报 zsh: parse error near '\n'?
命令里残留了 <...> 尖括号占位符(旧版文档的写法),shell 会把尖括号当成重定向符。把占位符整体替换成实际值、不要保留尖括号,再执行。
群里 @机器人 没反应?
确认第三步的 dev connect 窗口还开着——关掉窗口机器人就下线了。
第二步提示"当前用户没有开发者身份"? 创建应用需要开放平台开发者权限。请企业管理员在钉钉开放平台(open-dev.dingtalk.com)的「权限管理」中把你的账号添加为开发者,然后重试第二步。
提示找不到 dws 命令? macOS 重开一个终端窗口;Windows 重开一个 PowerShell 窗口(安装时改了 PATH,需要新窗口才生效)。
提示本地没有装 AI 工具? 机器人背后需要一个本地 AI CLI。推荐先装 Claude Code 或 Codex,装好后重新执行第三步。
机器人回复"调用失败"? 通常是本地 AI 工具未登录或额度用尽,单独运行一次该 AI 工具确认其本身可用。
机器人答得不如终端准?(同样的问题,终端对、机器人不对) 这通常不是模型问题,而是"机器人看到的上下文比终端少":
- 工作目录不同:默认机器人在一个空白临时目录里跑(为了启动快、回复中立),它看不到你终端所在项目里的文件。要让它和终端读到同样的资料,在第三步加
--agent-workdir ./你的项目目录(指到你平时在终端里跑 AI 的那个目录)。 - 知识没挂上:如果靠的是本地文档/知识库,加
--knowledge-dir ./docs(或--knowledge-source wiki:<spaceId>)把资料显式挂给机器人,别指望它自己去翻。 - 模型不同:机器人默认走一个偏快的小模型;如果你终端用的是更强的模型,给机器人也指定同一个:
--agent-model <模型名>。 - 回答"水位"上下浮动:群里每条消息都是独立的一次性调用,不带你终端里的历史会话。同一个群想让它记住上下文,确认没关
--agent-memory(默认开)。
一句话:让机器人和终端"看到一样的东西、用一样的模型",差距基本就抹平了。
第三步执行完,在蚂蚁钉/开放平台搜不到审批工单?
这是正常的,不是出错。第三步 dev connect(把机器人接到本地 AI)只是用现成机器人的凭证起一条连接、本地转发,不产生任何审批工单。会产生审批工单的是第二步「建机器人」(dev app robot submit),由平台/管理员审批。所以第三步之后搜不到工单是预期内的。