刚接触接口的人常问"到底能做什么"。与其按功能罗列,不如按接口性质分三类:读类(拉数据)、写类(执行动作)、事件类(被动接收)。三类接口的调用约束完全不同——读类怕超频、写类怕触发风控、事件类怕丢。按这个视角盘点,能做什么、怎么用、什么不能做就清楚了。
一、读类接口:好友、群、消息记录
读类接口不改动任何状态,只拉数据。好友列表与详情——分页拉全量好友,拿 wxid、昵称、备注、标签。群列表与群成员——拿群 ID、群名、成员清单。消息记录——按会话拉历史消息,用于存档和检索。
读类接口的约束是调用频率。几千好友全量拉一遍要分页几十次,频繁全量拉会触发限流。正确做法是首次全量、之后增量,结果本地建索引,查询走本地。好友列表的分页拉取方式在 Eyun 开发文档 中有说明。
二、写类接口:通过好友、发消息、群操作
写类接口会改变微信侧状态,是高危操作区。通过好友申请——传申请 ID 确认通过。发消息——文本、图片、文件、视频按类型传参。群操作——拉人、踢人、改群名、发公告、撤回消息。
写类接口的约束不是"能不能调",是"多久调一次"。发消息间隔最低 3 秒、批量操作打散到不同时间段、单条文本不超过 500 字。写接口的返回值要逐条检查——批量拉群时可能部分成功部分失败,失败的进重试队列。消息发送的类型参数和限流说明见 Eyun 官网。
三、事件类接口:消息、申请、成员变动
事件类是被动接收,不是主动调用——配置 Webhook 地址,平台把事件推过来。消息事件——单聊、群聊的新消息。申请事件——好友申请、入群邀请。变动事件——群成员进出、被踢出群。
事件类接口的约束是接收端必须可靠:回调要在时限内返回 ACK、要做幂等去重、要做验签。事件推送是整个自动化体系的触发源,这一层不稳,上层所有逻辑都是空中楼阁。
三类接口能力对照
类别 | 代表接口 | 核心约束 | 典型用途 |
|---|---|---|---|
读类 | 好友列表、群成员、消息记录 | 分页+限频 | 建索引、做报表 |
写类 | 发消息、通过申请、拉群 | 间隔≥3秒+打散 | 自动回复、批量运营 |
事件类 | 消息回调、申请回调 | ACK+幂等+验签 | 触发业务流 |
常用组合的最小示例
class CapabilityDemo: def __init__(self, api): self.api = api # 读类:分页拉好友 def list_friends(self): friends, cursor = [], None while True: r = self.api.get("/friend/list", params={"cursor": cursor, "limit": 200}).json() friends += r["items"] cursor = r.get("next_cursor") if not cursor: break time.sleep(1) # 读接口也留间隔 return friends # 写类:通过申请并发欢迎语 def accept_and_welcome(self, req_id, wxid): self.api.post("/friend/accept", {"req_id": req_id}) time.sleep(3) # 写接口间隔 self.api.post("/send", { "wxid": wxid, "content": "你好,已通过好友申请" }) # 事件类:回调入口只做分发 def on_event(self, event): handlers = { "message": self.on_message, "friend_request": self.on_friend_request, "member_change": self.on_member_change, } h = handlers.get(event.get("type")) if h: h(event) # 各处理器独立落地建议
盘点能力按读、写、事件三类分——读类建本地索引别反复全量拉,写类控制间隔和批量节奏,事件类把 ACK、幂等、验签三件事做扎实。三类接口组合起来就是完整自动化链路:事件触发、读类取上下文、写类执行动作。具体每个接口的字段和限制,以Eyun这类个人微信API平台 的开发文档为准,业务编排逻辑在自建服务实现。