news 2026/9/14 7:12:05

Qwen Code 接入微信:基于 iLink Bot API 的 WeChat 频道完整配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qwen Code 接入微信:基于 iLink Bot API 的 WeChat 频道完整配置指南

Qwen Code 接入微信:基于 iLink Bot API 的 WeChat 频道完整配置指南

【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code

微信是目前最主流的即时通讯平台之一。Qwen Code 在channels体系中内置了weixin频道适配器,让开发者可以直接用微信与终端里的 AI 编程 Agent 对话:发文字提问、发送截图让多模态模型分析、投递 PDF 或代码文件让 Agent 读取处理。与 Telegram 使用静态 Bot Token 不同,微信频道采用官方 iLink Bot API,通过扫码登录完成鉴权。本文以 weixin.md 为骨架,结合仓库内packages/channels/weixin/的完整实现源码,带你从零配置并理解微信频道的登录、收发消息、媒体解密与故障排查全流程。

前置条件

接入微信频道前需要准备两样东西:

  • 一个可以扫码的微信账号(手机 App),用于完成登录鉴权;
  • 可访问iLink Bot 平台(微信官方 Bot API)的权限。

微信频道不依赖静态 Bot Token,鉴权凭证完全来自扫码登录环节,这一点与 Telegram 频道有本质区别。

第一步:通过二维码登录

微信采用二维码鉴权而非静态 Token,登录命令为:

qwen channel configure-weixin

命令执行后,终端会输出一个二维码 URL(QR code URL: ...),用微信手机 App 扫码并在手机上确认即可完成登录。凭证会被保存到~/.qwen/channels/weixin/account.json

从源码看,这条命令的完整链路位于 configure.ts:

  1. 获取二维码:调用 iLink Bot API 的GET /ilink/bot/get_bot_qrcode?bot_type=3接口获取二维码 ID(见 login.ts);
  2. 轮询扫码状态:每 1 秒轮询一次get_qrcode_status接口,等待用户扫码并确认。轮询期间可能遇到scaned(已扫码待确认)、expired(二维码过期)等状态,二维码过期会自动刷新,最多重试 3 次;整体登录超时上限为 480 秒(8 分钟);
  3. 保存凭证:登录成功后返回bot_tokenbaseurlilink_user_id等信息,写入account.json

configure-weixin命令还支持两个子动作:

# 查看当前登录状态与保存时间 qwen channel configure-weixin status # 清除已保存的微信凭证(退出登录) qwen channel configure-weixin clear

关于凭证文件的安全性,accounts.ts 的实现值得一提:写入时使用随机命名的临时文件并以wxO_CREAT|O_EXCL)标志创建,再通过rename原子替换目标文件,文件权限为0600,可有效防止符号链接攻击与凭证被其他用户读取。clear动作还会顺带清扫中断写入残留的临时文件,避免存活 Token 长期滞留在磁盘上。

说明:微信频道不使用token字段,凭证完全来自扫码登录步骤;account.json属于敏感文件,请勿提交到版本库或随意分享。

第二步:在 settings.json 中配置频道

登录完成后,将频道配置加入~/.qwen/settings.json

{ "channels": { "my-weixin": { "type": "weixin", "senderPolicy": "pairing", "allowedUsers": [], "sessionScope": "user", "cwd": "/path/to/your/project", "model": "qwen3.5-plus", "instructions": "You are a concise coding assistant responding via WeChat. Keep responses under 500 characters. Use plain text only." } } }

各字段含义与可选值如下(完整选项表见 Channel Overview):

配置项说明
type频道类型,微信固定为weixin
senderPolicy谁能与 Bot 对话:allowlist(默认,仅allowedUsers内用户可用)、pairing(陌生人需配对码审批)、open(所有人可用,慎用)
allowedUsers允许使用 Bot 的用户 ID 列表,配合allowlistpairing使用
sessionScope会话隔离方式:user(每个用户一个会话,默认)、chat_threadsingle(所有人共享一个会话)
cwdAgent 的工作目录,默认当前目录;不同频道可指向不同项目
model频道使用的模型。微信支持图片分析,需要配置多模态模型(如qwen3.5-plus
instructions注入到每个会话首条消息的系统指令

由于微信会剥离所有 Markdown 格式,示例中的instructions明确要求 Agent 使用纯文本、控制回复长度,这正是微信频道的最佳实践写法。

第三步:启动频道

# 只启动微信频道 qwen channel start my-weixin # 或一次性启动所有已配置的频道 qwen channel start

启动后打开微信,向 Bot 发送一条消息:你会先看到"..."输入状态指示器(Agent 处理中),随后收到回复。

从源码看,启动的核心是 WeixinAdapter.ts 中的connect():它会先读取account.json加载 Token(未配置时会抛出WeChat account not configured. Run "qwen channel configure-weixin" first.错误),然后调用 monitor.ts 的startPollLoop()启动长轮询循环,持续调用getupdates接口拉取新消息。值得注意的是,微信适配器会自动注入默认指令——如果配置里没有自定义instructions,会补上"简洁编程助手、回复控制在 500 字符内、使用纯文本"的默认提示,并追加[IMAGE: /path/to/file.png]图片发送标记的用法说明。

图片与文件:不只是文字

微信频道支持发送图片和文档给 Agent,而不只是纯文本。

图片:多模态视觉分析

发送截图、照片等图片后,Agent 会用视觉能力分析内容。这要求频道配置了多模态模型(如"model": "qwen3.5-plus")。图片下载处理期间同样会显示"..."输入指示器。

底层实现路径见 WeixinAdapter.ts 与 media.ts:

  • 消息中的图片以 CDN 引用(encrypt_query_param+aes_key)形式到达,适配器调用downloadAndDecrypt()https://novac2c.cdn.weixin.qq.com/c2c/download?encrypted_query_param=...下载密文;
  • 使用AES-128-ECB算法解密。parseAesKey()兼容两种密钥编码:base64 解码后正好 16 字节的原始密钥,或 base64 解码后是 32 字符十六进制字符串(再转回 16 字节密钥);
  • 解密后的图片转成 base64 与 MIME 类型挂载到消息信封上,作为视觉输入交给模型。

文件:任意文档交给 Agent 读取

发送 PDF、代码文件或任意文档后,Bot 会从微信 CDN 下载并解密,保存到本地临时目录,再由 Agent 用文件工具读取。文件支持任何模型,无需多模态能力。

文件处理同样是downloadAndDecrypt()解密,然后写入tmpdir()/channel-files/<uuid>/目录(见 WeixinAdapter.ts),并以附件形式传入 Agent。下载失败时会向用户返回明确的错误占位文本,而不是静默丢弃。

反向发送:Agent 给用户发图片

微信适配器还支持 Agent 在回复中以[IMAGE: /absolute/path/to/file.png]标记发送图片(见 WeixinAdapter.ts)。发送前 send.ts 的validateImagePath()会做严格的安全校验:

  • 扩展名白名单:仅.png.jpg.jpeg.gif.webp
  • 大小上限 20 MB;
  • 路径必须位于临时目录或频道cwd工作目录内(防 AI 读取任意文件);
  • 读取文件头 16 字节做 magic bytes 校验,确保扩展名与真实格式一致。

通过校验后,图片走"申请上传 URL → AES-128-ECB 加密上传 CDN → 携带 CDN 媒体引用发送消息"的四步流程(getuploadurluploadToCdnsendmessage),并在服务端把 Markdown 统一转成纯文本。

配置选项

微信频道支持 Channel Overview 中列出的所有标准选项(见 Channel Overview),此外还有一个专属选项:

选项说明
baseUrl覆盖 iLink Bot API 的基础地址(默认https://ilinkai.weixin.qq.com

该默认值定义在 accounts.ts,WeixinAdapter构造时优先读取配置中的baseUrl,其次使用登录凭证里保存的地址(WeixinAdapter.ts)。baseUrl一般无需修改,仅在企业内部网关或代理场景下使用。

与 Telegram 的关键差异

微信频道虽然与 Telegram 共享同一套 Channel 架构(统一经 ACP 连接同一个 Agent 进程),但在平台能力上差异明显:

维度微信(Weixin)Telegram
鉴权方式二维码扫码登录,会话可能过期静态 Bot Token
消息格式仅纯文本,Markdown 自动剥离支持富文本/Markdown
处理中指示原生"..."输入状态"Working..."文本消息
群聊iLink Bot 仅支持私聊(DM-only),不支持群聊支持群聊(需配置groupPolicy
媒体加密CDN 上 AES-128-ECB 加密,适配器透明解密Bot API 直连下载

关于"输入状态",微信适配器的实现细节非常讲究:iLink 的 typing 状态设置后很快过期,因此 WeixinAdapter.ts 会以4 秒间隔持续刷新TYPING状态(类似 Telegram 适配器对约 5 秒过期的 4 秒重复策略),并设置10 分钟的兜底上限——若某个回合迟迟未结束,keepalive 会自动回收并发送CANCEL,避免卡死会话无限期占用输入指示器。这一系列行为都有对应的单元测试覆盖(见 WeixinAdapter.test.ts,包括多会话共享聊天的指示器管理、过期会话清理、断线重连状态回收等场景)。

使用技巧

  • 用纯文本指令:微信会剥离所有 Markdown,务必在instructions中写明"Use plain text only",否则 Agent 产出的格式化内容在微信里会显得杂乱;
  • 控制回复长度:微信气泡适合短文本,建议在指令中加字符上限(如"Keep responses under 500 characters");
  • 会话过期处理:日志中出现Session expired (errcode -14)说明微信登录已过期,停止频道后重新执行qwen channel configure-weixin扫码登录即可;
  • 限制访问:使用senderPolicy: "pairing""allowlist"控制谁能与 Bot 对话。配对模式下陌生用户会收到 8 位配对码,运营者通过qwen channel pairing approve my-weixin <CODE>审批后该用户才可正常使用(详见 DM Pairing)。

故障排查

"WeChat account not configured"

尚未完成登录。先执行qwen channel configure-weixin完成二维码登录,再启动频道。

"Session expired (errcode -14)"

微信登录会话已过期。停止频道并重新运行qwen channel configure-weixin

从源码看,errcode -14的处理在两层都有体现:

  • api.ts 的isRetryableError()-14明确判为不可重试错误(重试无意义,必须重新登录),而-1(系统繁忙)与45011(频率限制)等瞬时错误则走指数退避重试(最多 3 次,基础延迟 1 秒);
  • monitor.ts 的轮询循环遇到-14时不会直接崩溃,而是打印日志并暂停 30 秒后继续轮询,给运营者留出重新登录的窗口。

Bot 不响应

  • 查看终端输出中的错误信息;
  • 确认频道正在运行(qwen channel start my-weixin);
  • 如果使用senderPolicy: "allowlist",确认你的微信用户 ID 已加入allowedUsers

图片不工作

  • 确认频道配置了支持视觉的模型(如qwen3.5-plus);
  • 查看终端中是否有 CDN 下载错误——下载超时(40 秒上限)或网络问题都会导致图片失败。另外请确认图片格式在支持列表(PNG/JPG/GIF/WebP)内且不超过 20 MB。

小结

微信频道是 Qwen Code Channel 体系中鉴权方式最特殊、媒体链路最复杂的一环:它用扫码登录替代静态 Token,用 AES-128-ECB 加密的 CDN 链路承载图片与文件,用原生"..."指示器替代文本式工作状态,并且只支持纯文本私聊。理解了 accounts.ts、login.ts、monitor.ts、media.ts 与 send.ts 这几条实现链路,你就能在遇到问题时快速定位是登录过期、轮询异常、CDN 下载失败还是媒体格式校验被拒。想要把 Qwen Code 的编码能力带到微信上,按照本文的"扫码登录 → 配置 settings.json → 启动频道"三步即可跑通。

【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code

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

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

deer-flow:一种面向内存边界的沙盒设计思维

1. “deer-flow”不是框架&#xff0c;是内存沙盒的命名隐喻最近在几个技术社区和开源项目讨论区里&#xff0c;频繁看到“deer-flow”这个词——它既不像主流前端框架&#xff08;React/Vue/Svelte&#xff09;那样有官网文档&#xff0c;也不像Node.js或Python那样自带安装器…

作者头像 李华
网站建设 2026/9/14 7:11:12

AI论文写作工具的技术原理与学术应用探讨

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

作者头像 李华
网站建设 2026/9/14 7:10:15

基于阶跃函数脉冲控制的复杂网络同步与图像加密

1. 项目概述 这个项目探讨了如何利用阶跃函数的脉冲控制来实现复杂网络的同步&#xff0c;并将其应用于图像加密解密领域。项目结合了控制理论、复杂网络动力学和密码学等多个学科的知识&#xff0c;提供了一套完整的Matlab实现方案&#xff08;含源码15219期&#xff09;。 在…

作者头像 李华
网站建设 2026/9/14 7:09:06

LLVM Embedded Toolchain for Arm源码深度评测:构建、测试与迁移实践

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

作者头像 李华