消息处理指南
本文说明如何在监听回调中处理笔记、合并消息、小程序、图片/视频/文件等消息。日常开发只需调用 msg.* 高层 API,无需关心内部实现。
消息字段(attr / type / sender)
每条 Message 对象在 GetNextNewMessage 等 API 的 callback(msg) 或返回列表中可直接读取。
推荐通过 WinAuto.im_client() 绑定当前拾取的主窗口(WIN_CLASS / hwnd),再调用消息 API;默认内置 WeChat 适配器,其它 IM 可传 client='your_pkg.Client'。
识别好友发送 vs 自己发送:
GetNextNewMessage 返回值(与 callback 交付的消息一致):
群聊补全发送人:fetch_sender=True(默认 OCR;use_profile_sender=True 优先资料卡)。
消息锚点(滚动/重绘后找回同一条)
GetNextNewMessage 内部用内容指纹 + runtimeid 标注每条待交付消息;UI 重绘后 msg.id(runtimeid)会变,不能长期依赖 GetMessageById。
完整字段见 msg.info():
推荐回调模式
要点:
- 笔记 / 合并 / 小程序:按
msg.type分支,调用对应方法即可。 - 图片 / 视频 / 文件:建议先入队再批量
download(),避免在 callback 里长时间阻塞。 - 失败时应用
isinstance(result, WxResponse)判断,不要只用or []静默跳过。
消息类型 → 处理方法
支持的小程序
凡气泡摘要含「小程序」字样,msg.type 均为 'miniapp'。是否可自动解析由 msg.identify_kind() 决定。
识别优先级(高 → 低): 微商相册系列 → 产品笔记pro / 私域产品笔记 → 商品笔记。
未内置的小程序
msg.identify_kind()返回None- 不会自动点击或下载,仅可读
msg.content摘要
示例
与微信原生笔记的区别
二者 type 不同,不会互相冲突。
调试环境变量(可选)
更多 API 说明见 Message类 — MiniAppMessage。
消息读取 API 一览
GetNextNewMessage(主路径)
首帧基线:第一次调用通常返回空 dict(
chat_name/msg为空),仅标记当前视口为已读;持续监听须while True+time.sleep。
持续监听:
GetNextUnreadBarMessages(跳转条)
专门处理聊天区「?N条新消息 / N条新消息」浮动条;不会被 GetNextNewMessage 自动处理,需单独调用:
当前窗口:GetAllMessage / GetNewMessage
子窗口监听
同一会话需先双击弹出独立聊天窗(ChatWnd):
三种监听方式
同窗口监听需先将会话弹出为独立聊天窗口。
按 type 完整分支示例
参考 测试代码/新消息.py,在 callback 内按类型处理: