企业微信获取客户详情接口全流程解析:从权限配置到数据获取

📅 2026/7/6 9:02:54
企业微信获取客户详情接口全流程解析:从权限配置到数据获取
1. 项目概述如果你正在负责公司的客户关系管理CRM系统与企业微信的集成或者正在开发一个基于企业微信的SCRM社交化客户关系管理应用那么“获取客户详情”这个接口绝对是你绕不开的核心环节。这不仅仅是拉取一个名字和头像那么简单它关系到你能否构建一个360度的客户视图实现精准的客户分群、个性化服务和销售流程自动化。我见过太多团队在开发初期一头扎进代码里调用接口却总是返回“无权限”或“找不到用户”折腾半天才发现是权限配置这第一步就没走对。今天我们就来彻底拆解这个流程。从最容易被忽略、但至关重要的权限配置开始到最终成功调用接口、解析出丰富的客户数据我会结合自己多次趟坑的经验把每个环节的细节、背后的逻辑以及那些官方文档里不会明说的“潜规则”都讲清楚。无论你是自建应用、第三方应用还是代开发模式这篇文章都能帮你理清思路高效完成集成。2. 权限配置一切接口调用的基石在动手写一行代码之前我们必须把权限这堵墙给砌明白了。企业微信的权限体系设计得非常细致权限没开通任你代码写得再漂亮也是徒劳。2.1 理解三种应用类型与权限差异首先你得明确你开发的是哪种类型的应用这直接决定了权限配置的路径和方式。应用类型定义与特点权限配置入口关键影响自建应用企业管理员在企业微信后台“自建”的应用仅供本企业使用。企业微信管理后台 - 应用管理 - 具体应用 - 权限管理。配置最直接权限由企业管理员完全掌控。第三方应用由服务商开发的、可上架到企业微信应用市场的应用供多个企业安装使用。服务商在服务商管理后台为应用配置“权限集”企业安装时授权。权限需要经过企业授权同意涉及suite_ticket、永久授权码等复杂流程。代开发应用服务商为企业定制开发但以该企业名义“自建”的应用。服务商通过“代开发”模式获取模板企业管理员安装后在应用详情页授权。介于自建和第三方之间应用出现在企业自建列表但由服务商代维。对于“获取客户详情”接口这三类应用所需的权限名称略有不同但本质都是获取客户基础信息的权利自建应用需要被配置到「客户联系」下的「可调用接口的应用」列表中。第三方应用/代开发应用需要具有「客户基础信息」权限。营销获客类应用需要具有「建联客户信息」权限主要用于获取通过该应用添加的客户。实操心得很多开发者在测试时喜欢用自建应用因为配置简单。但如果你最终要上架应用市场务必尽早切换到第三方应用模式进行开发和测试因为两者的授权流程和access_token获取方式完全不同后期切换成本很高。2.2 自建应用权限配置步步详解假设我们从最简单的自建应用开始。目标是让这个应用能调用获取客户详情接口。第一步创建或定位自建应用使用企业管理员账号登录 企业微信管理后台 。进入「应用管理」-「自建」点击“创建应用”填写应用名称、logo等基本信息并创建。或者如果你已有一个现成的应用直接找到它。第二步配置客户联系权限进入该自建应用的详情页面。在左侧菜单中找到「权限管理」。在权限列表中找到「客户联系」相关的权限。这里你需要关注两个地方客户联系基础权限这个权限允许应用访问客户联系功能。通常需要勾选。可调用接口的应用配置这是最关键的一步。仅仅勾选“客户联系”权限可能还不够。你需要联系拥有“客户联系”管理权限的管理员不一定是超级管理员让他进行如下操作进入管理后台的「客户联系」-「配置」-「API」。在「可调用接口的应用」模块点击“修改”。将你的自建应用从左侧列表添加到右侧已选列表并保存。重要提示这个步骤非常容易被遗漏很多开发者以为在应用里勾选了权限就行结果调用接口一直报60011No privilege to access/modify contact错误。务必确认应用ID已添加至此列表。第三步设置应用可见范围决定能获取谁的客户回到应用详情页的「权限管理」找到「成员可见范围」或「客户联系」权限下的细分设置。你需要将那些需要管理其客户的成员添加到应用的可见范围中。核心逻辑应用只能获取到其可见范围内的成员所添加的客户。如果你将应用设置为全公司可见那么理论上可以获取全公司的客户如果只对销售部可见则只能获取销售部成员的客户。2.3 第三方/代开发应用授权流程解析对于第三方或代开发应用流程更为复杂因为它涉及服务商和企业之间的授权。1. 服务商侧配置权限模板服务商需要在 服务商管理后台 中为你的第三方应用配置“权限集”。在权限集中找到「客户联系」-「客户基础信息」权限并勾选。保存后会生成一个带有所需权限的“应用模板ID”。2. 企业侧安装并授权应用企业管理员访问服务商提供的安装授权页或企业微信应用市场安装该应用。在安装过程中会跳转到企业微信的授权页面页面会明确列出该应用申请的所有权限包括“获取客户基础信息”。企业管理员点击同意授权完成。3. 代码侧获取企业永久授权码与访问凭证企业授权后服务商的后台会收到一个永久授权码permanent_code。这是后续为该企业获取访问令牌(access_token)的钥匙。服务商需使用suite_access_token和永久授权码来换取该企业的corp_access_token这个corp_access_token才是最终调用获取客户详情等企业API的凭证。整个授权链可以简化为服务商凭证-suite_access_token- (永久授权码) -corp_access_token- 调用企业API。踩坑记录第三方应用调用客户接口时返回的客户unionid字段可能为空。这是因为要获取unionid企业微信必须绑定同主体的微信开放平台账号。很多企业忽略了这一步导致无法将企业微信客户与公众号/小程序用户打通。绑定路径是企业微信管理后台-客户联系-API-绑定微信开发者ID。2.4 权限验证与排查技巧配置完成后如何验证权限是否真的生效了调用获取访问凭证接口使用你的应用密钥Secret和CorpID尝试获取access_token。如果连access_token都拿不到说明应用基础信息或网络配置有问题。调用获取配置了客户联系功能的成员列表接口这是一个很好的探针接口。请求地址https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_follow_user_list?access_tokenACCESS_TOKEN。如果成功返回成员列表说明你的应用至少具备了客户联系的“读取”权限并且可见范围设置正确。尝试调用获取客户列表接口先获取某个可见范围内成员的客户列表。这是调用获取客户详情的前提。接口地址https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_tokenACCESS_TOKENuseridUSERID。如果返回成功说明你离目标只差最后一步。查看错误码如果调用获取客户详情失败仔细阅读错误信息。40001: 访问令牌无效或过期。检查access_token的获取和刷新逻辑。60011: 无权限访问/修改客户。99%的情况是“可调用接口的应用”未配置或者应用可见范围不包含该客户的跟进人。40003: 无效的UserID。检查传入的external_userid是否正确这个ID应从获取客户列表接口获得。41048: 客户跟进人超过500人需要分页但未传cursor参数。3. 获取Access Token拿到API的通行证权限配置好比拿到了大门钥匙而access_token就是进入具体房间API的临时门禁卡。它是有有效期通常2小时且调用频率受限的。3.1 不同应用类型的Token获取差异这是另一个关键区分点弄混了会导致持续调用失败。应用类型获取access_token的接口所需参数核心区别自建应用https://qyapi.weixin.qq.com/cgi-bin/gettokencorpid企业ID,corpsecret应用Secret直接使用应用自身的Secret。第三方应用https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_tokensuite_access_token服务商凭证,auth_corpid授权方企业ID,permanent_code永久授权码需要先获取suite_access_token再用企业授权时给的permanent_code来换。代开发应用同自建应用corpid,corpsecret代开发应用Secret虽然由服务商开发但获取Token的方式和自建应用一样使用该企业下此应用的Secret。自建应用获取Token示例Python:import requests import json def get_access_token(corpid, corpsecret): url fhttps://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid{corpid}corpsecret{corpsecret} response requests.get(url) result response.json() if result[errcode] 0: return result[access_token] else: raise Exception(fFailed to get access token: {result})3.2 Token的管理与优化实践绝对不能每次调用API都去获取一次Token这既低效又容易触发频率限制。必须实现缓存机制。1. 缓存方案内存缓存对于单机服务可以用全局变量或字典缓存记录token和expires_time获取时间7200秒。分布式缓存对于多实例服务如K8s集群必须使用Redis、Memcached等中央缓存。键名建议包含corpid和agentid例如qywx:token:{corpid}:{agentid}。2. 刷新策略提前刷新不要在Token过期后才刷新。建议在有效期的最后一段时间如最后5分钟进行异步刷新。例如设置缓存过期时间为7000秒比2小时少200秒当读取发现剩余时间少于200秒时触发刷新并更新缓存。互斥锁在高并发下多个进程可能同时判断Token即将过期从而同时发起刷新请求。这会导致重复刷新和频率限制。在刷新前必须使用分布式锁如Redis SETNX确保只有一个进程执行刷新操作。3. 错误处理当API返回40001或42001Token过期错误时你的代码应该能捕获这个特定错误码然后清除本地缓存的Token并重新走一遍获取Token的流程最后用新的Token重试失败的请求。这个过程最好封装成一个通用的请求装饰器或中间件。4. 获取客户详情接口深度解析终于来到了核心环节。有了正确的权限和有效的Token调用获取客户详情接口本身在语法上很简单但返回的数据结构丰富理解每个字段的含义至关重要。4.1 接口调用与参数说明接口是一个简单的GET请求GET https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_tokenACCESS_TOKENexternal_useridEXTERNAL_USERID必需参数access_token: 上面辛苦获取到的接口调用凭证。external_userid: 外部联系人的userid。重要这个ID不是客户微信昵称也不是手机号而是通过获取客户列表接口拿到的那个唯一标识符。每个成员添加的同一个微信客户其external_userid对于该企业是唯一的。可选参数cursor: 用于分页。只有当该客户在企业内的跟进人即添加了该客户的成员超过500人时才需要。首次调用不传或传空如果返回的next_cursor不为空则下次请求带上该cursor以获取后续的跟进人列表。4.2 响应数据结构全字段解读接口返回的JSON结构是信息的宝库。我们结合一个实例来拆解{ errcode: 0, errmsg: ok, external_contact: { external_userid: woAJ2GCAAAXtWyujaWJHDDGi0mACHAAA, name: 李四, position: Manager, avatar: https://p.qlogo.cn/bizmail/..., corp_name: 腾讯, corp_full_name: 腾讯科技有限公司, type: 2, gender: 1, unionid: ozynqsulJFCZ2z1aYeS8h-nuasdAAA, external_profile: { external_attr: [ { type: 0, name: 文本名称, text: {value: 文本} }, { type: 1, name: 网页名称, web: { url: https://www.test.com, title: 标题 } } ] } }, follow_user: [ { userid: rocky, remark: 李部长, description: 对接采购事务, createtime: 1525779812, tags: [ { group_name: 标签分组名称, tag_name: 标签名称, tag_id: etAJ2GCAAAXtWyujaWJHDDGi0mACHAAA, type: 1 } ], remark_corp_name: 腾讯科技, remark_mobiles: [13800000001, 13000000002], oper_userid: rocky, add_way: 10, wechat_channels: { nickname: 视频号名称, source: 1 } } ], next_cursor: NEXT_CURSOR }第一部分客户基础信息 (external_contact)external_userid核心ID所有与该客户相关的操作都基于此ID。name: 客户名称。微信用户返回昵称企业微信用户返回其设置的对外展示名。type: 客户类型。1-微信用户2-企业微信用户。这个字段决定了你能看到哪些其他字段。例如position、corp_name、external_profile只有类型为2企业微信用户时才有。gender: 性别。0-未知1-男性2-女性。注意第三方/代开发应用或上游企业获取下游企业客户时此字段统一返回0。unionid:打通微信生态的关键。如果客户是微信用户type1且你的企业微信已绑定同主体微信开放平台这里会返回客户的UnionID。通过它你可以将企业微信客户与同一主体下的公众号、小程序用户关联起来实现跨平台用户识别。external_profile: 企业微信用户设置的“对外属性”可以理解为电子名片中的自定义字段包含文本、网页、小程序等多种类型。是宝贵的结构化信息。第二部分跟进人信息 (follow_user)这是一个数组因为一个客户可能被多个企业成员添加。每个元素代表一个跟进人即企业成员与该客户的关系。userid: 跟进成员的企业内UserID。remarkdescription: 该成员对客户的备注名和描述。这是非常重要的个性化信息不同销售对同一个客户的备注可能不同体现了各自的跟进上下文。tags: 该成员给客户打上的标签列表。注意标签有类型(type)1-企业统一设置的标签2-成员自己打的个人标签3-通过规则组自动打的标签。企业标签有tag_id个人标签没有。这是进行客户分层和自动化运营的核心依据。add_way:客户来源。这是一个枚举值告诉你客户是怎么被加上的。例如1-扫描二维码2-搜索手机号10-通过视频号添加等。结合state参数如果创建“联系我”时指定了可以精确分析不同渠道的获客效果。wechat_channels: 当add_way10视频号添加时包含视频号名称和添加场景主页、直播间等。对于做视频号引流的企业这是关键数据。4.3 分页处理与大数据量应对follow_user数组理论上没有上限。虽然单次请求最多返回500个跟进人但官方建议在超过500人时才使用cursor分页。处理逻辑如下def get_external_contact_detail_all_followers(access_token, external_userid): all_followers [] next_cursor while True: params { access_token: access_token, external_userid: external_userid } if next_cursor: params[cursor] next_cursor resp requests.get(https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get, paramsparams).json() if resp[errcode] ! 0: # 错误处理 break all_followers.extend(resp.get(follow_user, [])) next_cursor resp.get(next_cursor) if not next_cursor: # 没有下一页了 break return all_followers注意事项分页参数cursor是针对单个客户接口的与获取客户列表接口的分页游标不是一回事不要混淆。只有当客户非常热门、被内部大量成员添加时才需要考虑这里的分页。5. 完整实操流程与代码示例让我们把上面的所有知识点串联起来形成一个从零开始到成功获取客户详情的完整可执行流程。这里以Python为例使用自建应用模式。5.1 环境准备与依赖安装确保你有一个可用的Python环境3.6并安装requests库用于HTTP请求。pip install requests5.2 步骤一配置应用并获取关键信息登录企业微信管理后台创建或找到你的自建应用。记录以下信息它们相当于你的“账号密码”corpid: 企业ID。在“我的企业” - “企业信息”页面底部。agentid: 应用ID。在自建应用的“应用详情”页面。secret: 应用Secret。在自建应用的“应用详情”页面需要管理员扫码查看。务必妥善保管泄露等同于交出钥匙。配置权限确保该应用已被添加到「客户联系」-「配置」-「API」-「可调用接口的应用」列表中并设置了合适的成员可见范围。5.3 步骤二实现带缓存的Access Token管理器import requests import time import json from typing import Optional class WeComTokenManager: def __init__(self, corpid: str, secret: str, cache_redisNone): self.corpid corpid self.secret secret # 简单内存缓存示例生产环境应用Redis self._cache {} self.redis_client cache_redis def _get_cache_key(self): return fqywx:token:{self.corpid}:{self.secret[-6:]} def get_token(self) - str: cache_key self._get_cache_key() token_info None # 1. 尝试从缓存读取 if self.redis_client: cached self.redis_client.get(cache_key) if cached: token_info json.loads(cached) else: token_info self._cache.get(cache_key) # 2. 检查缓存是否有效剩余时间大于200秒 if token_info and token_info.get(expires_at, 0) time.time() 200: return token_info[access_token] # 3. 缓存无效或不存在重新获取 return self._refresh_token(cache_key) def _refresh_token(self, cache_key: str) - str: # 简单实现生产环境应加锁防止并发刷新 url fhttps://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid{self.corpid}corpsecret{self.secret} resp requests.get(url).json() if resp[errcode] ! 0: raise Exception(f获取token失败: {resp}) new_token resp[access_token] expires_in resp.get(expires_in, 7200) expires_at time.time() expires_in token_info {access_token: new_token, expires_at: expires_at} # 4. 更新缓存 if self.redis_client: self.redis_client.setex(cache_key, expires_in - 300, json.dumps(token_info)) # 提前5分钟过期 else: self._cache[cache_key] token_info return new_token # 初始化 corpid 你的企业ID secret 你的应用Secret token_manager WeComTokenManager(corpid, secret)5.4 步骤三获取指定成员的客户列表在获取详情前我们需要先知道客户的external_userid。这个ID来自成员的客户列表。def get_external_user_list(access_token: str, userid: str) - list: 获取某个企业成员的客户列表 :param access_token: 接口调用凭证 :param userid: 企业成员的UserID :return: 客户external_userid列表 url https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list params { access_token: access_token, userid: userid } resp requests.get(url, paramsparams).json() if resp[errcode] ! 0: print(f获取客户列表失败: {resp}) return [] # 返回的external_userid列表 return resp.get(external_userid, [])5.5 步骤四整合调用获取客户完整详情现在将Token管理、获取列表、获取详情串联起来。def get_full_contact_detail(member_userid: str, target_external_userid: Optional[str] None): 获取成员的客户详情。如果不指定具体客户则获取第一个客户的详情作为示例。 # 1. 获取Token try: access_token token_manager.get_token() except Exception as e: print(f获取Token失败: {e}) return # 2. 获取该成员的客户列表 contact_list get_external_user_list(access_token, member_userid) if not contact_list: print(f成员 {member_userid} 没有客户或无权查看。) return # 3. 确定要查询的客户ID if target_external_userid and target_external_userid in contact_list: external_userid_to_query target_external_userid else: # 默认查询第一个客户 external_userid_to_query contact_list[0] print(f未指定具体客户将查询列表中的第一个客户: {external_userid_to_query}) # 4. 调用获取客户详情接口 detail_url https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get detail_params { access_token: access_token, external_userid: external_userid_to_query } detail_resp requests.get(detail_url, paramsdetail_params).json() if detail_resp[errcode] ! 0: print(f获取客户详情失败: {detail_resp}) return # 5. 处理并打印结果 contact_info detail_resp.get(external_contact, {}) followers detail_resp.get(follow_user, []) print(f\n 客户基础信息 ) print(f客户ID: {contact_info.get(external_userid)}) print(f客户名称: {contact_info.get(name)}) print(f客户类型: {微信用户 if contact_info.get(type) 1 else 企业微信用户}) if contact_info.get(type) 2: print(f职位: {contact_info.get(position)}) print(f公司: {contact_info.get(corp_name)}) print(f\n 跟进人信息共{len(followers)}位) for idx, follower in enumerate(followers, 1): print(f\n{idx}. 成员: {follower.get(userid)}) print(f 备注: {follower.get(remark)}) print(f 描述: {follower.get(description)}) print(f 添加方式: {follower.get(add_way)} - {_parse_add_way(follower.get(add_way))}) print(f 添加时间: {time.strftime(%Y-%m-%d %H:%M:%S, time.localtime(follower.get(createtime)))}) tags follower.get(tags, []) if tags: tag_names [f{tag.get(group_name, )}:{tag.get(tag_name)}({tag.get(type)}) for tag in tags] print(f 标签: {, .join(tag_names)}) def _parse_add_way(code): 解析add_way来源代码 way_map { 0: 未知来源, 1: 扫描二维码, 2: 搜索手机号, 3: 名片分享, 4: 群聊, 5: 手机通讯录, 6: 微信联系人, 10: 视频号添加, 16: 获客链接添加, 201: 内部成员共享, 202: 管理员分配, } return way_map.get(code, f其他({code})) # 执行示例 if __name__ __main__: # 替换为你要查询的成员UserID test_member_userid ZhangSan get_full_contact_detail(test_member_userid)5.6 步骤五数据存储与后续处理获取到的数据非常宝贵通常你不会只打印出来看看而是需要存入数据库或CRM系统。数据库表设计建议客户主表 (external_contact)存储external_userid,name,type,gender,unionid,avatar,corp_name,position等不随跟进人变化的基础信息。以external_userid为主键。客户-成员关系表 (contact_follower_relation)存储external_userid,userid成员ID,remark,description,createtime,add_way,state等。这是一个多对多关系表联合主键为(external_userid,userid)。客户标签表 (contact_tag)存储external_userid,userid,tag_id,tag_name,group_name,tag_type。因为同一个客户被不同成员打上的标签不同所以需要关联userid。数据同步策略全量同步定期如每天凌晨遍历所有有权限的成员拉取其全部客户列表再逐个获取详情更新。适用于数据量不大或对实时性要求不高的场景。增量同步推荐通过配置客户联系事件回调监听add_external_contact添加客户、edit_external_contact编辑客户、del_external_contact删除客户等事件。当事件发生时实时调用获取客户详情接口更新数据。这种方式更实时对API压力也更小。6. 常见问题排查与实战技巧即使流程清晰在实际开发中你还是会遇到各种“坑”。下面是我总结的常见问题及解决方法。6.1 高频错误码速查与解决错误码错误信息可能原因解决方案40001invalid credentialaccess_token无效或过期。1. 检查Token是否已超过2小时。2. 检查应用的Secret是否正确是否被重置。3. 检查CorpID是否正确。60011no privilege无权限访问/修改客户联系人。最常见原因1. 自建应用未添加到「可调用接口的应用」列表。2. 应用可见范围不包含目标客户的跟进人。3. 第三方应用未获得企业授权相应权限。40003invalid userid非法的UserID。1. 检查external_userid参数是否正确是否来自获取客户列表接口。2. 确认该客户是否已被成员删除。41048missing cursor parameter缺少cursor参数。该客户的跟进人超过500人需要分页获取。在请求中加上cursor参数值来自上一次响应的next_cursor。48002api forbidden接口权限不足。应用类型与权限不匹配。例如营销获客类应用尝试获取非本应用添加的客户详情。检查应用权限集。44001empty post dataPOST数据包为空。本接口是GET请求不应有POST数据。检查请求方法是否正确。45033reply timeout回复时间超时。接口响应慢。可能是企业微信服务器繁忙或网络问题重试即可。6.2 数据字段为空或不准确的排查问题unionid字段为空。排查确认客户type是否为1微信用户。确认企业微信管理后台是否已成功绑定同主体的微信开放平台账号。问题gender、avatar、remark_mobiles等字段返回0或为空。排查检查应用类型。如果是第三方/代开发应用或上游企业获取下游企业客户这些字段出于隐私保护不会返回。这是正常现象。问题external_profile对外属性为空。排查确认客户type是否为2企业微信用户。只有企业微信用户才能设置对外属性。问题获取到的客户name是昵称而非备注。注意external_contact.name字段返回的是客户的原始名称微信昵称或企业微信对外名称。成员的个性化备注在follow_user.remark字段里。不要混淆。6.3 性能优化与最佳实践批量获取如果需要获取多个客户的详情不要用循环逐个调用获取客户详情接口。优先使用批量获取客户详情接口 (/cgi-bin/externalcontact/batch/get_by_user)它支持一次传入最多100个external_userid能大幅减少网络请求次数。缓存策略对于不常变动的数据如企业标签列表、部门架构可以在本地或Redis中缓存定时更新如每6小时避免频繁调用API。异步处理对于数据同步、消息推送等耗时操作应采用消息队列如RabbitMQ, Kafka进行异步化避免阻塞主业务流程并提高系统的可扩展性和可靠性。监控与告警对access_token获取失败、接口调用频繁报错如40001,60011等关键异常建立监控告警。同时关注企业微信接口调用频率限制避免触发限流。external_userid的转换与持久化external_userid是外部联系人在某个企业内的唯一标识。同一个微信客户在不同企业内对应的external_userid是不同的。在你的系统内存储时建议以(corp_id, external_userid)作为联合唯一标识。如果涉及服务商模式下的unionid关联存储时也应关联上unionid以便进行跨企业同主体的客户识别。6.4 关于“联系我”与state参数的高级用法在follow_user对象中有一个add_way表示来源还有一个可选的state字段。这个state字段是企业在创建“联系我”二维码或获客链接时自定义的一个参数。如何使用在管理后台创建“联系我”时或在生成获客链接的API中你可以设置一个自定义的state参数比如channelwebsite_banner或campaign_id20231001。当客户通过这个带有特定state的渠道添加员工后在调用获取客户详情接口时该跟进人信息的state字段就会是你当初设置的值。这样你就能在后台精确地分析出哪个客户是通过哪个落地页、哪个推广活动添加的。这对于市场营销的渠道归因和效果评估至关重要。这个功能很多企业没有充分利用但它对于精细化运营的价值非常大。