"获取通讯录"这个需求拆开看,不只是拉一份名单。按数据获取深度分三层,每层数据越来越细,价值也越来越高。
一、列表层——拿到好友清单
最浅层是拉联系人列表:每个好友的 wxid、昵称、备注。这是通讯录的骨架,有了它才有后续操作的基础。
列表数据量可能很大(几百到几千),必须分页拉取。拉完落库,本地有了一份完整的通讯录。但这层只有"谁是我的好友",没有更多细节。
二、详情层——补全每个人的资料
列表只有 wxid 和昵称不够用,详情层补全每个人的资料:头像、签名、性别、地区。详情要逐个查,量大时按需补——只查业务需要的人,不必全量补。
详情数据让通讯录从"名单"变成"档案"。有了档案,运营动作才能个性化:按地区分组、按性别做不同文案、按签名分析兴趣偏好。
三、关联层——把联系人和业务打通
最深层是关联:wxid 作为桥梁,把微信好友和 CRM 客户、订单系统用户、工单系统联系人对应起来。
关联之后通讯录不再是一个孤立的名单,而是业务系统的一个维度。客户在微信里问了什么、买了什么、有没有售后工单,全能看到。关联靠的是 wxid 在两个系统间的映射,映射表要维护好。
三层获取对照
获取层 | 拿到什么 | 数据量 | 业务价值 |
|---|---|---|---|
列表层 | wxid、昵称、备注 | 全量分页 | 通讯录骨架 |
详情层 | 头像、签名、性别、地区 | 逐个按需 | 个性化基础 |
关联层 | wxid ↔ 业务系统ID | 映射表 | 业务打通 |
三层获取示例
# 列表层:分页拉取 def sync_contacts(): page = 1 while True: r = api("getContactList", {"wId": WID, "page": page}) for c in r["data"]["list"]: db.upsert("contacts", c) if page >= r["data"]["totalPage"]: break page += 1 # 详情层:按需补全 def enrich_contact(wxid): r = api("getContactDetail", {"wId": WID, "wxid": wxid}) db.update("contacts", wxid, r["data"]) # 关联层:和CRM对账 def link_to_crm(): for c in db.query("contacts WHERE crm_id IS NULL"): match = crm.find_by_phone(c.get("phone")) # 用手机号匹配 if match: db.update("contacts", c["wxid"], {"crm_id": match["id"]})落地建议
三层从浅到深逐步做。先拉列表(有名单),再补详情(有档案),最后做关联(有业务)。跳过列表直接补详情效率极低,没有关联再多数据也只是微信里的信息,进不了业务系统。三层做完,通讯录才是真正可用的数据资产。