# 微信开放个人 Bot API 后,我踩了这 5 个坑

📅 2026/7/13 2:15:45
# 微信开放个人 Bot API 后,我踩了这 5 个坑
153 个 Bot 账号跑了 7 天50,000 条消息CDN 图片发了上千张。踩过的坑都在这了。2026 年 3 月微信悄悄开放了 iLink Bot API。个人微信号也能接入程序了——不用企业微信不用认证扫个码就行。我在 TaskStar 项目里跑了 153 个 Bot7 天 5 万条消息把能踩的坑全踩了一遍。写出来给你省点时间。---## 坑 1登录 token 只有 2 分钟寿命扫码登录的流程是这样的调 API 拿二维码 → 用户微信扫码 → 轮询等确认 → 拿到 bot_token。拿到 token 你以为就完事了坑在后面。每条消息都带了一个专属的 context_token有效期约 2 分钟。回复这条消息时必须带上它——不是全局 token是**每条消息各自携带**的。你回哪条消息就带哪条消息里的 context_token。不带 → 发送失败。带错的 → 也失败。解决起来不复杂收到消息时把它对应的 context_token 记下来回复这条消息时原样带回去。python# 收到消息msg poll_result[get_updates_buf_list][0]context_token msg[context_token] # 这条消息专属的 token# 回复这条消息send_text(token, to_user, text, context_tokencontext_token) # 带回去不是什么高深的技术但如果你没注意到这个细节调半天都不知道为什么发不出去。---## 坑 2长轮询 timeout 不是 bugiLink 用的是长轮询客户端发一个请求服务端 hold 住有消息了再返回。如果 25 秒没消息服务端就返回 timeout。刚开始看到日志里一堆 timeout以为哪里出问题了。后来发现这就是 iLink 的设计——25 秒无消息就超时客户端自动重试即可。几个实测数据| 客户端 timeout | 实际表现 ||:--:|------|| 5s | 5.2s 后 timeout频繁重试 || 30s | 18.4s 收到消息正常 || 60s | 18.6s 收到消息和 30s 没区别 |**结论设 30 秒就够了。** 比 iLink 的 25 秒多 5 秒缓冲避免 HTTP 层提前截断。还有就是**没有频率限制**。我 60 多个 Bot 3 秒间隔连续轮询跑了几天没遇到一次 429。不用担心被封。---## 坑 3CDN 图片上传——绝大多数人卡在这里 ⭐这是整篇文章最重要的部分。iLink 发图片不能直接传 base64必须走微信 CDN 上传。流程是你的服务器 → AES-128-ECB 加密图片 → 调 getuploadurl 拿上传地址→ POST 加密数据到微信 CDN → 拿 download_param → 发图片消息给用户每一步都有坑。### 3.1 AES 密钥编码最坑getuploadurl 要求的 aes_key 是 hex 字符串32 字符。但 sendmessage 的 image_item.aes_key 要求的是 **base64(hex_string)**不是 base64(raw 16 bytes)。我知道你看到这句话已经晕了。直接看代码pythonimport os, base64from Crypto.Cipher import AESfrom Crypto.Util.Padding import pad# 1. 生成 16 字节随机密钥aes_key_raw os.urandom(16)# 2. 转 hex → getuploadurl 用这个aes_key_hex aes_key_raw.hex() # 32 字符如 a1b2c3d4...# 3. base64(hex) → sendmessage 用这个aes_key_b64 base64.b64encode(aes_key_hex.encode(ascii)).decode()# 4. 加密图片cipher AES.new(aes_key_raw, AES.MODE_ECB)encrypted cipher.encrypt(pad(image_bytes, 16))**如果第 3 步你用了 base64(aes_key_raw) 而不是 base64(hex)图片发出去对方看到的是裂图。** 我已经帮三个被这个问题卡住的人调过了。### 3.2 media_type 1不是 2getuploadurl 的 media_type 传 1 表示图片IMAGE传 2 表示视频VIDEO。传 2 上传能成功但对方收不到。没有任何错误提示就是收不到。### 3.3 文件大小和海外服务器微信 CDN 直连有隐形的文件大小限制大约 30KB。超过的直接失败。海外服务器连微信 CDNnovac2c.cdn.weixin.qq.com大概率不通。文字收发没问题发图片必须配国内代理。我在腾讯云广州搞了一台轻量服务器做 CDN 上传代理问题解决。### 3.4 完整流程代码搞清楚了上面这些完整的上传 发送流程大概 120 行 Python。你可以在 demo.dotaskk.com 体验实际效果——发「图片」给 Demo Bot它会生成一张图通过 CDN 发回你微信。---## 坑 4多 Bot 并行没那么可怕一个 Bot 一个 while True 循环轮询。那 60 个 Bot 怎么办用 ThreadPoolExecutor每个 Bot 一个线程。线程大部分时间在等网络 IO实际 CPU 占用很低。pythonfrom concurrent.futures import ThreadPoolExecutordef run_bot(token):buf while True:data, err poll(token, buf)if data:handle_messages(data)buf data.get(get_updates_buf, buf)with ThreadPoolExecutor(max_workers60) as executor:for token in bot_tokens:executor.submit(run_bot, token)60 个 Bot 并发一台 2 核 4G 的 VPS 跑得稳稳当当。内存占用主要在 Python 进程本身每个线程额外开销很小。---## 坑 5语音消息自带 ASR不用花钱这是我没想到的好消息。iLink 自带语音识别ASR。用户发语音消息 → iLink 服务端转成文字 → 你的 Bot 收到的就是文字。你不需要接任何第三方语音转文字服务。对于做微信 AI 助手来说这是个巨大的利好。用户习惯发语音而你能直接拿到文字去做 NLP 处理。回复也是文字即可用户不关心你是怎么收到的。---## 效果展示说这么多不如亲自试一下。扫码加 Demo Bothttps://demo.dotaskk.com/发「你好」试试文字回复发「图片」看 CDN 卡片效果发条语音看 ASR 转文字。整个过程不超过 2 分钟。![Demo Bot 二维码](demo.dotaskk.com/qr)---## 这套方案我打包好了如果你不想花两周踩这些坑我整理了完整方案**标准版¥3,000 / 首批 8 折 ¥2,400**- 单 Bot 核心源码扫码登录 / 长轮询 / 收发消息- CDN 图片上传模块AES 加密 上传 发送完整注释- 部署文档从买服务器到扫码成功一步步跟着走- FAQ15 条实战踩坑问答- 能力测试报告153 Bot / 7 天 / 5 万条消息数据**进阶版¥5,000 / 首批 8 折 ¥4,000**- 标准版全部内容- 多 Bot 并行轮询ThreadPoolExecutor 方案- LLM 接入Claude / GPT 智能回复- 图片卡片生成Pillow 排版 → CDN 发送- H5 服务菜单加微信获取 Demo 体验和详细目录**nyypt2012**---## 附几个你可能会问的**Bot 会被封号吗** iLink 是腾讯官方 API正常使用不会封号。别发违规内容就行。**支持群聊吗** 目前只支持 1v1群聊得看官方后续更新。**海外服务器能用吗** 文字可以发图片不行。老老实实买国内 VPS。**一个微信能跑几个 Bot** 一个微信号一个 Bot。一个 Bot 可以绑多个微信号吗不行一对一。**CDN 图片为什么不能超过 30KB** 微信的限制没写在文档里实测出来的。超过 30KB 直连大概率失败走代理可以到 500KB 左右。