一个 pi 扩展,将微信桥接到你的 Pi 编程助手。微信扫码 → 直接在微信里与 Pi 对话。支持文本、图片、文件、语音和视频。使用 @wechatbot/wechatbot SDK 处理所有 iLink 协议操作。
工作原理
graph LR A["📱 微信用户<br/>(手机)"] <--> B["☁️ iLink API<br/>(腾讯)"] B <--> C["🤖 Pi 助手<br/>(笔记本)"] B --- D["@wechatbot/wechatbot SDK"] style D fill:none,stroke:none,color:#666
- 在 pi 中运行
/wechat - 扩展创建
WeChatBot实例 → 调用bot.login() - SDK 调用 iLink API → 获取二维码 → 在终端中显示
- 用手机微信扫码
- 微信消息 →
pi.sendUserMessage()→ 成为 pi prompt pi.on('agent_end')→bot.reply()→ 发回微信- Pi 思考时显示"对方正在输入中"
安装
从 npm 安装(推荐):
pi install npm:@wechatbot/pi-agent
或直接加载(不安装):
pi -e npm:@wechatbot/pi-agent
或复制到扩展目录(自动加载):
cp -r pi-agent/ ~/.pi/agent/extensions/wechat-bridge/
使用方法
> /wechat 📱 在微信中扫描此二维码: ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ █ ▄▄▄ █ █▀█ █ ▄▄▄ █ ... [wechat] 已扫码 — 在微信中确认 [wechat] 登录确认 ✓ 微信已连接!账号: e06c1ceea05e@im.bot
现在从微信发送消息 —— Pi 将其作为 prompt 处理,并把回复发回微信。
消息流程
微信用户发送 "帮我重构 auth 模块" │ ▼ iLink API(长轮询 getupdates) │ ▼ 扩展收到 IncomingMessage │ ├── bot.sendTyping(userId) → "对方正在输入中..." │ ├── pi.sendUserMessage(content) → 成为 pi prompt │ ▼ Pi 助手处理(工具、思考...) │ ▼ pi.on('agent_end') 触发 │ ├── 提取助手文本 ├── stripMarkdown() → 清理 Markdown ├── 检测生成的文件路径 → 作为媒体发送 ├── bot.stopTyping(userId) └── bot.reply(msg, content) → 发回微信
媒体支持
扩展处理所有微信消息类型 —— 不仅仅是文本。
入站(微信 → Pi)
| 类型 | 处理方式 | |
|---|---|---|
| 文本 | 直接作为 pi prompt 发送 | |
| 图片 | 下载 → base64 → 作为 ImageContent 发送给视觉模型 | |
| 语音 | 优先使用微信转文字;否则下载 SILK 音频 | |
| 文件 | 文本文件(.txt, .md, .py 等):内容包含在 prompt 中。其他:描述元数据 | |
| 视频 | 下载 → 保存到临时文件 → 告诉 Pi 文件路径 |
出站(Pi → 微信)
| 类型 | 处理方式 | |
|---|---|---|
| 文本 | 去除 Markdown 格式 → 纯文本发送 | |
| 生成的文件 | 在回复中检测文件路径 → 通过 bot.reply({ file }) 自动发送 | |
| 自动路由 | .png → 图片消息,.mp4 → 视频消息,.pdf → 文件附件 |
命令
/wechat 开始登录(显示二维码)
/wechat --force 强制重新登录(新二维码)
/wechat-disconnect 断开微信
/wechat-send <文本> 手动发送文本给微信用户
已连接时运行 /wechat 会显示菜单:断开连接、查看状态或取消。
使用的 Pi API
扩展 API 使用
| Pi API | 用途 | 时机 |
|---|---|---|
| pi.registerCommand() | /wechat, /wechat-send, /wechat-disconnect | 扩展加载时 |
| pi.sendUserMessage() | 微信消息 → pi prompt(文本或图片+文本) | 每条消息 |
| pi.on(agent_end) | 捕获回复 → stripMarkdown → 发微信 | Agent 完成后 |
| pi.on(message_update) | 跟踪流式文本 | 流式输出时 |
| ctx.ui.setStatus() | 连接状态显示 | 全程 |
| pi.on(session_shutdown) | 退出清理 | 关闭时 |
功能
- 零配置 ——
/wechat加扫码 - 完整媒体支持 —— 图片(视觉模型)、语音、文件、视频
- Markdown 清理 —— AI 输出 → 干净纯文本发到微信
- 自动媒体路由 —— 生成的
.png作为图片发送,.mp4作为视频等 - 凭证持久化 ——
~/.wechatbot/,重启跳过扫码 - 会话恢复 —— 收到
-14自动重新登录 - 输入指示器 —— Pi 思考时显示"对方正在输入中"
- 文本分片 —— 长回复在 2000 字符处分片
- 优雅关闭 ——
session_shutdown时停止