wechatbot
English

一个 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
  1. 在 pi 中运行 /wechat
  2. 扩展创建 WeChatBot 实例 → 调用 bot.login()
  3. SDK 调用 iLink API → 获取二维码 → 在终端中显示
  4. 用手机微信扫码
  5. 微信消息 → pi.sendUserMessage() → 成为 pi prompt
  6. pi.on('agent_end')bot.reply() → 发回微信
  7. 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 时停止
Pi Agent — 在微信中与 Pi 对话