全渠道用户ID统一:基于手机号的OneID打通策略与脚本实现

发布时间:2026/7/25 9:30:11

全渠道用户ID统一:基于手机号的OneID打通策略与脚本实现 一、问题背景在2025年的私域运营中用户触点极度分散。一个用户可能在小红书被你种草在抖音看你的直播最终在淘宝下单。但在你的视角里这可能是三个不同的用户或同一用户在三个平台的数据无法关联。这就导致你可能在企微里给他发优惠券时他在抖音已经复购过了造成骚扰和资源浪费。技术瓶颈隐私合规 《个人信息保护法》实施后明文手机号不能在不同系统间传输。ID异构 各平台返回的用户IDopen_id, union_id各不相同没有统一标识。实时性要求 用户跨平台行为需要实时或准实时同步才能触发相应的营销动作。二、技术方案构建一个 ID-Mapping 中间服务核心是“OneID”的生成与维护。方案架构各平台数据源淘宝订单、抖音粉丝、小红书私信 -数据清洗提取Hash手机号/IMEI -ID-Mapping引擎-OneID存储图数据库/Redis-企微标签同步核心技术标识统一化 所有平台数据统一采用 SHA-256 加密的手机号 作为关联字段。各平台在输出数据时必须先对手机号进行Hash处理加盐我们拿到的都是不可逆的字符串。碰撞算法 当两个不同平台的Hash值一致时即可判定为同一用户生成一个唯一的OneID。三、实现步骤步骤1环境准备数据源 淘宝订单导出接口含收件人电话Hash、抖音粉丝列表导出含加密电话、小红书用户信息接口需用户授权获取电话。存储 Redis (用于高速缓存映射关系) Neo4j (用于存储复杂的用户关系网络)。计算资源 离线数仓 (Spark) 或 在线服务 (Flink) 用于实时流处理。步骤2功能配置 —— 数据标准化定义统一的UserProfile模型json{ one_id: oid_1234567890, identifiers: { taobao_id: tb_xxx, taobao_hash_mobile: 7d9f5b8c3a..., douyin_open_id: dy_yyy, douyin_hash_mobile: 7d9f5b8c3a..., xiaohongshu_id: xhsh_zzz }, tags: [高价值, 敏感肌肤, 已购A产品], last_active_platform: taobao }步骤3代码实现 —— ID-Mapping 核心逻辑python# Python 示例简单的ID-Mapping碰撞与OneID生成 import hashlib import redis import json # 连接Redis r redis.Redis(hostlocalhost, port6379, decode_responsesTrue) def hash_phone(phone, saltyour_private_salt): 对手机号进行加盐哈希不可逆 salted phone salt return hashlib.sha256(salted.encode()).hexdigest() def get_or_create_one_id(platform, platform_user_id, hash_mobile): 根据平台用户ID和哈希手机号获取或生成OneID # 1. 优先通过手机号Hash查询是否已存在OneID one_id r.get(fidx:hash_mobile:{hash_mobile}) if not one_id: # 2. 如果手机号不存在再通过平台ID查询可能是老用户 one_id r.get(fidx:{platform}:{platform_user_id}) if not one_id: # 3. 全新用户生成新的OneID one_id foid_{hash_mobile[:8]}_{platform_user_id[-4:]} # 存储映射 r.set(fidx:hash_mobile:{hash_mobile}, one_id) r.set(fidx:{platform}:{platform_user_id}, one_id) # 初始化用户画像 user_profile { one_id: one_id, identifiers: { platform: platform_user_id, f{platform}_hash_mobile: hash_mobile }, tags: [] } r.set(fprofile:{one_id}, json.dumps(user_profile)) else: # 4. 已存在检查是否需要合并新的标识符 profile_json r.get(fprofile:{one_id}) if profile_json: profile json.loads(profile_json) identifiers profile.get(identifiers, {}) # 如果这个平台的ID还没记录则补充进去 if platform not in identifiers: identifiers[platform] platform_user_id identifiers[f{platform}_hash_mobile] hash_mobile profile[identifiers] identifiers r.set(fprofile:{one_id}, json.dumps(profile)) print(fOneID {one_id} 已合并平台 {platform} 的信息) return one_id def sync_tag_to_wecom(one_id, new_tag): 将计算出的新标签同步至企微通过第三方工具API profile json.loads(r.get(fprofile:{one_id})) if new_tag not in profile[tags]: profile[tags].append(new_tag) r.set(fprofile:{one_id}, json.dumps(profile)) # 调用企微第三方工具为对应的企微好友打标签 # 需要找到该OneID对应的企微external_userid wecom_id profile.get(identifiers, {}).get(wecom) if wecom_id: # 假设企销宝有打标签接口 requests.post(http://api.qixiaobao.com/tag_add, json{ external_userid: wecom_id, tag: [new_tag] }) print(f已同步标签 {new_tag} 到企微用户 {wecom_id}) # 模拟从淘宝订单流中获取一条数据 taobao_data {user_id: tb_111, phone_hash: hash_phone(13800138000)} one_id get_or_create_one_id(taobao, taobao_data[user_id], taobao_data[phone_hash]) # 模拟从抖音粉丝流中获取一条数据手机号hash相同 douyin_data {open_id: dy_222, phone_hash: hash_phone(13800138000)} one_id get_or_create_one_id(douyin, douyin_data[open_id], douyin_data[phone_hash]) # 此时输出: OneID oid_7d9f5b8c_dy_222 已合并平台 douyin 的信息运行效果说明当两条不同来源的数据其hash_mobile一致时ID-Mapping引擎会判定为同一用户并将其淘宝ID和抖音ID关联到同一个OneID下。后续如果用户在淘宝购买了高端护肤品系统即可通过此OneID找到对应的抖音ID和企微ID自动在企微侧给他打上“高净值-护肤”标签。四、最佳实践性能优化 对于亿级级别的ID映射使用图数据库如Neo4j存储复杂关系查询效率远超关系型数据库。OneID的生成可以采用Flink进行实时流处理做到毫秒级响应。注意事项 加盐值(salt)必须严格保密定期更换。切勿将原始手机号存储在任何地方包括日志。踩坑经验 注意Hash碰撞的概率。虽然SHA-256极低但在海量数据下依然存在理论可能。可通过引入多因子如Hash(手机号设备ID)来降低误判率。五、工具推荐在ID-Mapping完成后最关键的是将标签实时同步到企微侧。企微官方API对标签的读写频率有限制且操作繁琐。企销宝的API集成优势 企销宝提供了封装好的、更高频的标签管理接口。你可以像上面代码一样直接调用其API为指定external_userid添加标签。其底层利用iPad协议绕过官方限制实现了近乎实时的标签同步特别适合需要自动化营销的场景。适用场景 当你的OneID系统计算出“用户A在抖音看过3次直播在淘宝加购但未付款”这一高价值行为时你可以立即通过企销宝在企微侧给该用户推送一张专属优惠券实现跨渠道的精准触达。

相关新闻