微信个人号接口与多语言 SDK:消息收发、群聊管理、朋友圈、通讯录及实时事件推送。
下载正式接入套件 · 完整接入案例:WebSocket 收消息并回复
85 个接口 · 16 种事件 · Python / Node.js / Go / Java 客户端
微信机器人 · 微信 API · 微信 SDK · 微信协议 · 微信个人号开发 · 微信自动回复 · 微信消息推送 · 微信群管理 · 朋友圈自动化
WeChat personal account HTTP API — bot, automation, message webhook, contacts, group and moments, with Python / Node.js / Go / Java SDKs.
先看这个:如果你只要一对一的问答机器人,别用这个,用微信官方的 iLink Bot API。 2026 年微信开放了个人号 Bot 能力,chatgpt-on-wechat 和 AstrBot 都已经内置,社区也有现成的多语言 SDK(比如 wechatbot.dev, 第三方项目,非官方出品)。客服问答、知识库助手这类"用户来问、机器人答"的场景, 官方那条就是标准答案。
官方那套不支持群聊、不能主动发起对话(每次回复都要带用户消息里的
context_token),也没有朋友圈和通讯录。这个项目只在那几件事上有意义。
仅供学习与技术交流。 可以拿来研究一个消息平台该怎么设计、SDK 该怎么生成、 事件回调该怎么验签。请遵守微信的用户协议与当地法律,不要用于骚扰、群发广告、 爬取他人隐私。用它做了什么,责任在使用的人。
WeLink 提供基于 iPad / Mac 微信协议的 HTTP API,以及 Python、Node.js、Go、Java SDK。
适用于微信个人号的消息通知、客户服务、群聊管理、朋友圈管理和 AI 应用集成。仓库提供接口文档、SDK 与接入示例;微信协议服务端不在本仓库中。
扫码把号挂上来,之后你的程序就能像用任何一个 API 一样用它:发消息、读通讯录、 建群、发朋友圈。别人发来的消息和各种变动,可通过 WebSocket 实时接收,也可推送到你配置的 Webhook 地址。
没有 UI 自动化,不用一直开着一台电脑,也不用碰微信协议那一摊。你只面对 JSON。
wx = WeLink(api_key="key_xxx", base_url="https://你的服务地址")
wx.message_text("acc_xxx", to="filehelper", content="你好")这个仓库里有什么:四种语言的 SDK、能直接跑的示例、85 个接口的完整文档。
适合谁看:需要机器人在群里干活的、需要定时或按事件主动推送的、 要自动发朋友圈或批量维护通讯录的、要同时托管多个号的。 或者单纯想看看这类平台的接口该怎么设计。
只要一对一问答的话,上面那段说过了——官方的更合适。
文字、图片、视频、语音、文件、动图表情、链接卡片、小程序卡片 —— 收和发都支持。
- 文件直接传:手里只有字节也能发 —— 程序刚生成的图片直接传上来换一个 ID,不用先挂到公网上
- 转发不用重新上传:收到的图片和文件可以直接转给别人,走的是秒传;自己传上来的那个 ID 发过一次之后,再发也不重传
- 撤回:自己发的能撤回,别人撤回了你也会收到事件
- @ 谁:群里能精确 @ 到人,收到的消息里也会告诉你被 @ 的是谁
- 引用消息:谁引用了哪一条,能对应上
- 历史与补拉:平台存着消息记录;服务断过的那段,可以直接从微信补回来
- 通讯录全量拉取、批量获取联系人详情
- 处理他人的好友申请、修改备注、删除联系人
- 标签的增删改查,直接给联系人打标签
- 企业微信那边的外部联系人也能拿到
- 建群、拉人、踢人、设管理员
- 改群名、发群公告、设群备注、改自己的群昵称
- 群二维码、通过链接进群、处理入群邀请
- 群成员列表与单个成员的详情
- 免打扰、置顶
- 读自己的时间线,也能读指定某个人的
- 发文字、图片、视频,转发别人的
- 点赞、取消赞、评论、删评论
- 删自己的动态,或者把它设成私密
- 扫码登录,二维码状态实时可查,掉线会自动重连
- 改头像、改昵称、隐私设置
- 看这个号在哪些设备上登录着,并把某个设备踢下线
- 每个号都走自己的出口网络:自己的 socks5 代理,或者用网络助手走自己手机的网络
- 每个号可以单独选要不要保存收发的消息
16 种事件,发生什么推什么:
| 消息 | 收到消息、自己在别的设备发了消息、消息被撤回 |
| 好友 | 收到好友申请、新增好友、联系人资料变更、联系人被删 |
| 群 | 成员加入、成员退出、群名变更、自己被拉进群 |
| 实例 | 二维码被扫、上线、掉线、正在自动恢复 |
两种收法,内容一模一样:填一个地址让平台推过来,或者不开公网地址、自己来轮询。
首次接入建议从完整案例开始:包括环境安装、实例和会话配置、三个测试命令、事件去重与断线恢复。若只需要 SDK 源码或各语言最小示例,可以继续阅读下文。
export WELINK_API_KEY=key_xxx
export WELINK_BASE_URL=https://你的服务地址
export WELINK_PROXY=socks5://user:pass@host:port # 出口网络,也可以填网络助手的网络ID
python examples/python/1_quickstart.py这个脚本会:建一个实例 → 取登录二维码 → 等你扫 → 上线后给文件传输助手发一条。 四十行,从零到发出第一条消息。
想看收消息的,跑 2_echo_bot.py —— 一个复读机,
包含回调怎么收、签名怎么验、消息怎么回。
WebSocket 收消息并回复:从安装环境到实际发送 /ping 收到 pong,演示一条账号连接管理多个微信、指定会话回复、事件去重与重启恢复。附本地模拟网关测试,运行测试不需要生产密钥。
四种客户端都只使用语言自带的库,覆盖当前 85 个接口。支持验签、事件轮询和 SSE,具体用法见各语言 README。
接口文档 · 回调字段 · OpenAPI 文件 · 维护记录
| 语言 | 位置 | 要求 |
|---|---|---|
| Python | sdk/python |
只用标准库,3.8+ |
| Node.js | sdk/node |
只用内置 fetch,18+ |
| Go | sdk/go |
只用标准库,1.21+ |
| Java | sdk/java |
只用 JDK,11+(JSON 读写自带) |
每个都带签名校验函数,收事件时直接用。
Python
from welink import WeLink
wx = WeLink(api_key="key_xxx", base_url="https://你的服务地址")
wx.message_text("acc_xxx", to="wxid_abc", content="在吗")
wx.message_image("acc_xxx", to="wxid_abc", url="https://…/cat.jpg")
wx.moment_post_text("acc_xxx", content="今天天气不错")
for wxid in wx.contact_ids("acc_xxx")["items"]:
print(wxid)Node.js
import { WeLink } from './welink.js'
const wx = new WeLink({ apiKey: 'key_xxx', baseUrl: 'https://你的服务地址' })
await wx.message.text('acc_xxx', { to: 'wxid_abc', content: '在吗' })
await wx.group.create('acc_xxx', { members: ['wxid_a', 'wxid_b'] })Go
wx := welink.New("key_xxx", "https://你的服务地址")
_, err := wx.MessageText(ctx, "acc_xxx", welink.M{
"to": "wxid_abc",
"content": "在吗",
})Java
WeLink wx = new WeLink("key_xxx", "https://你的服务地址");
wx.messageText("acc_xxx", Map.of("to", "wxid_abc", "content", "在吗"));无需提供公网回调地址,程序主动连接网关即可接收微信消息和实例事件。提供 Python、Node.js、Go、Java 示例,包含心跳、断线重连、游标保存与缺口处理。
HTTPS 入口使用 wss,HTTP 入口使用 ws。需要所连接网关已开放 WebSocket 接口,旧版本请先更新服务端。
不是按功能列的,是按"先看什么再看什么"排的:
1. 先看一次调用长什么样 —— 下面那节,三十秒。
2. 跑通登录 —— 1_quickstart.py。
扫码登录这套流程(取码 → 轮询状态 → 上线)是后面所有操作的前提。
3. 收第一条事件 —— 2_echo_bot.py。
重点看验签那几行,以及"先回 2xx 再干活"为什么重要。
4. 不想开公网地址 —— 3_poll_events.py。
游标怎么用,为什么没拉到东西时游标不能动。
5. 查具体接口 —— 接口清单,88 个,每条都带各语言的调用写法。 标了「易封号」和「建议缓存」的,调之前看一眼那句提醒。
6. 事件和错误 —— 事件回调(16 种事件 + 验签)、 错误码(31 个)。
7. 读 SDK 源码 —— 生成出来的代码很平,一个方法对一个接口,底层就一个 call。
想知道请求是怎么拼的、错误是怎么抛的,看那一个函数就够了。
请求:
POST /v1/accounts/acc_xxx/messages/text
Authorization: Bearer key_xxx
Content-Type: application/json
{ "to": "wxid_abc", "content": "在吗" }响应:
{
"code": 0,
"message": "ok",
"data": { "message_id": "msg_xxx", "created_at": "2026-01-01T12:00:00+08:00" },
"request_id": "req_xxx"
}code 永远有,0 是成功。失败时 message 是给人看的中文,request_id 留着排查。
事件推过来长这样:
{
"event_id": "evt_xxx",
"type": "message.received",
"account_id": "acc_xxx",
"created_at": "2026-01-01T12:00:01+08:00",
"data": {
"message_id": "msg_xxx",
"chat_id": "12345@chatroom",
"is_group": true,
"sender": "wxid_abc",
"type": "text",
"text": "在吗",
"mentions_me": true
}
}可申请试用,先验证接入效果,再决定是否使用。
项目长期维护。 持续更新接口、SDK 和接入文档,修复使用中发现的问题。
代码、文档、四种语言的 SDK 就在这个仓库里,可直接查阅和使用。
适用用途: 合法合规的接口对接、消息通知、客户服务及业务系统集成。申请试用时,请说明实际业务场景和使用用途。
禁止用于黑灰产及违法违规业务。 包括但不限于色情、赌博、网络诈骗、洗钱、非法交易及恶意骚扰等。一经发现并核实,永久封禁相关平台账号及实例,停止提供服务。
试用申请、接入咨询和使用帮助,请通过 QQ 联系。
QQ:2824382313 · 点击添加
要自己研究微信协议吗? 不用。协议那层在服务端做掉了,你这边只有 HTTP 和 JSON,四种语言的微信 SDK 直接调。
和微信官方的 Bot API 有什么不一样?
官方那套是一对一的:不支持群,发消息必须带 context_token,而这个 token 只能从对方
发来的消息里取。所以对方从没跟你说过话,你就发不出去——token 本身可以存下来复用,
给聊过的人定时推没问题,卡死的是陌生人那一步。这个项目能进群、能给任何联系人发、
能发朋友圈、能读写通讯录。如果你不需要这几样,官方的更划算,没有封号风险。
和 itchat、wechaty 这类有什么不一样? 那些是在你自己机器上跑一个客户端,得一直开着;这个是服务端托管的,你的程序只发 HTTP 请求,你的进程挂了不影响号在线。
能挂几个号?
一个 Key 下可以挂多个,每个号一个 account_id,互不影响。
消息能存多久? 默认 7 天。断线期间漏掉的,可以用同步接口从微信那边补回来。 不想在平台上留消息的号,可以单独把保存关掉。
怎么让号稳一点? 几条经验:新号头一晚掉线别慌,第二天原实例重新扫码;别删了实例再重建; 同一个号别再在别的电脑上登录;加好友、通过申请别一口气做太多; 不常变的数据(通讯录、群成员这些)自己存一份,别反复拉。
掉线了怎么办?
会自动重连。真的需要重新扫码时,会推一条 account.offline 事件告诉你。
Key 丢了怎么办? 控制台里验证一次密码就能把完整的 Key 复制出来,不用重新建。
觉得有用的话,点个 star,让更多人找得到。
仅供学习与技术交流
