
配置推送地址后,企业客户在找企业页点击「转移」,平台会把线索推到你方接口;你方处理完后可回调我方回写结果,也可主动同步转移状态。
本文存在两种调用方向,签名方式不同,每个接口正文都单独标明,请勿混用:
| 方向 | 说明 | 签名 / 鉴权 |
|---|---|---|
| 你方 → 我方 | 调用ISV 统一接口(/api/isv/v1/...) |
与其他对接接口同一套:X-App-Key / X-Timestamp / X-Nonce / X-Sign(HMAC-SHA256),见 接口鉴权和错误码 |
| 我方 → 你方 | 平台按你配置的 URL 主动请求你方服务 | Header access-token + Body/约定字段中的 sign(md5(...)),secret 为开通代理商时下发的 appSecret |
一. 配置数据接收地址
每个企业客户在页面操作【转移数据】时,需要提前把接收方的 URL 配置好,后续操作时则可自动接收。
页面功能支持配置批量转移和单条转移,其中 APP 端企业详情的【转移】需要配置 singleSyncUrl。
调用关系:你方 → ISV 统一接口
请求
POST /api/isv/v1/org/conf
Content-Type: application/json
鉴权 Header(与其他对接接口相同)
| Header | 必填 | 说明 |
|---|---|---|
X-App-Key |
是 | 开通代理商时下发的 appKey |
X-Timestamp |
是 | 当前毫秒时间戳 |
X-Nonce |
是 | 随机串(如 UUID) |
X-Sign |
是 | HMAC-SHA256 签名,算法见鉴权文档 |
请求 Body
| 参数 | 位置 | 必填 | 说明 |
|---|---|---|---|
oid |
body | 是 | 登录用户在我们系统的企业账号 ID,每个企业可以配置一套 |
syncUrl |
body | 是 | 批量接收地址 |
singleSyncUrl |
body | 否 | 单条接收地址(未配置时企业详情页不显示【转移】按钮,含 H5 页面) |
additionalConfigUrl |
body | 否 | 接收地址多模块配置(一个接收地址有多个选项,如外呼计划1、线索池2等) |
返回结果
{
"code": 0,
"message": "成功",
"data": {
"success": true // 是否配置成功
},
"traceId": "..."
}
接收地址多模块配置(可选)
上面提供 additionalConfigUrl 地址时,则会拉取转移模块选项并在页面展示。

调用关系:我方 → 你方 additionalConfigUrl
请求方法:GET
请求 Header
| Header | 必填 | 说明 |
|---|---|---|
access-token |
是 | 开通代理商时下发的 access-token |
平台调用你方 additionalConfigUrl 时附带 query:
| 请求参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
oid |
string | 是 | 登录用户在我们系统的企业账号 ID |
uid |
string | 是 | 登录用户在我们系统的登录用户 ID |
请求例子:${additionalConfigUrl}?oid=123456&uid=789012
你方响应要求
- HTTP 200,5 秒内响应
error_code必须为0
{
"error_code": 0, // 必须为 0,否则表示请求错误
"data": {
"options": [ // 转移选项-功能模块配置
{
"name": "线索池", // 一级选项,必须有
"additional_params": { // 可选,自定义额外参数
"code": "11",
"desc": "户管理模块"
},
"sub": [ // 二级选项(可选)
{
"name": "线索池1",
"additional_params": { // 可选,自定义额外参数
"key": 111
}
}
]
},
{
"name": "客户公海"
}
]
}
}
规则摘要
- 转移时只传递一个 选择的
name+additional_params - 一级含二级时,二级放在
sub数组 - 每层最多 20 个;超出截取前 20
二. 数据转出对接-工商企业
1. 批量转移
配置地址:企业配置中的 syncUrl。平台将调用该地址,把线索数据推送到你方。
调用关系:我方 → 你方 syncUrl
请求方法:POST
请求 Header
| Header | 必填 | 说明 |
|---|---|---|
access-token |
是 | 开通代理商时下发的 access-token |
Content-Type |
是 | application/json |
Body 签名(本接口)
sign = md5(taskId + oid + uid + appSecret)
taskId、oid、uid:与 Body 中字段值一致(字符串拼接,顺序固定)appSecret:开通代理商时下发的密钥sign放在 Body 字段中(不是 Header)
Body 完整示例
{
"sign": "xxxx", // 必填,见上方签名算法:md5(taskId + oid + uid + appSecret)
"taskId": 1111, // 必填,任务 id(异步回调结果时需要用到)
"async": 1, // 是否异步:0-同步,1-异步;批量固定为 1,须通过「转出完成回写」接口回传结果
"oid": "123456", // 必填,登录用户在我们系统的企业账号 ID(据此确定是你方哪个企业账号转出的)
"uid": "789012", // 必填,登录用户在我们系统的登录用户 ID(据此确定是你方哪个用户转出的)
"batchId": "387cf029d31ef28836486", // 数据批次 id(回调任务结果时需要用到)。任务完成(异常或正常结束)后,会再调用一次 batchId="0" 且不传线索数据,仅作任务结束通知;此时你方无需再回调
"clueType": "COMPANY", // 线索类型:COMPANY=工商企业;
"syncTaskOption": { // 同步任务选项:企业客户选中的转移功能模块
"name": "客户管理", // 转移功能模块名称
"additionalParams": { // 模块额外参数(来自 additionalConfigUrl 返回的配置)
"code": 111, // 额外自定义参数
"desc": "管理客户信息" // 额外自定义参数
}
},
"clueItems": [ // 本批次线索列表
{ // ---------- 工商企业线索样例(COMPANY),转工商企业线索时,线索数据的字段格式 ----------
"id": "f3c7933261570af39adb4e66514a019e", // 平台线索数据唯一 id,请落库;回嵌详情、回调结果、状态同步时都要用
"name": "华为技术有限公司", // 企业名称
"contactItems": [ // 联系方式列表
{
"content": "13868787644", // 联系号码
"type": 1, // 联系方式类型:1手机;2固话;3QQ;4邮箱
"contactName": "华**", // 联系人姓名
"contactPosition": "市场营销部-员工", // 联系人职位
"contactDepartment": "市场营销部", // 联系人部门
"numStatus": "1", // 号码状态:1实号;2异常;3未知;5疑似代理
"labels": [ // 联系方式标签
"推荐",
"近期收录",
"疑似代理"
],
"sourceNames": [ // 来源站点名
"钉钉企典",
"英才网"
]
}
],
"uncid": "914403001922038216", // 统一社会信用代码
"esDate": 558633600000, // 成立时间(毫秒时间戳)
"legalPerson": "张三", // 法定代表人/负责人
"regCapDisplay": "1000万元人民币", // 注册资本显示值(带单位)
"regAddress": "深圳市龙岗区坂田华为总部办公楼", // 注册地址(完整)
"regAddressProvince": "广东", // 注册地址-省
"regAddressCity": "深圳", // 注册地址-市
"regAddressDistrict": "龙岗区", // 注册地址-区
"historyNames": [ // 曾用名
"深圳市华为技术有限公司"
],
"hasATax": true, // 是否 A 级纳税人
"contactAddress": "深圳市龙岗区坂田华为总部办公楼", // 通讯地址(完整)
"contactAddressProvince": "广东", // 通讯地址-省
"contactAddressCity": "深圳", // 通讯地址-市
"contactAddressDistrict": "龙岗区", // 通讯地址-区
"website": "www.huawei.com.cn", // 企业官网
"firstIndustry": "制造业", // 所属行业一级
"secondIndustry": "计算机、通信和其他电子设备制造业", // 所属行业二级
"thirdIndustry": "通信设备制造", // 所属行业三级
"fourthIndustry": "通信系统设备制造", // 所属行业四级
"firstIndustryCode": "C", // 所属行业一级 code
"secondIndustryCode": "39", // 所属行业二级 code
"thirdIndustryCode": "392", // 所属行业三级 code
"fourthIndustryCode": "3921", // 所属行业四级 code
"opScope": "程控交换机、传输设备、数据通信设备、宽带多媒体设备、电源、无线通信设备...", // 经营范围
"entProfile": "华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商,我们致力于..." // 企业简介
}
]
}
你方即时响应
- HTTP 200,5 秒内响应(业务处理不完请先入队)
- 否则该批视为转移失败
{
"error_code": 0, // 须固定返回 0,否则该批视为转移失败
"message": "" // 响应消息
}
异步处理完成后,调用下文「2. 转出完成回写处理结果」接口回传结果。
2. 转出完成回写处理结果(异步批量)
批量转移推送中 async=1,你方处理完一批线索后,须按批次回调告知结果。
调用关系:你方 → ISV 统一接口
请求
POST /api/isv/v1/clues/sync_callback
Content-Type: application/json
鉴权 Header(与其他对接接口相同)
| Header | 必填 | 说明 |
|---|---|---|
X-App-Key |
是 | appKey |
X-Timestamp |
是 | 当前毫秒时间戳 |
X-Nonce |
是 | 随机串 |
X-Sign |
是 | HMAC-SHA256,算法见鉴权文档 |
请求 Body
{
"oid": "123456", // 登录用户在我们系统的企业账号 ID
"uid": "789012", // 登录用户在我们系统的登录用户 ID
"taskId": 1111, // 任务 id(推送体中的 taskId)
"batchId": "387cf029d31ef28836486", // 批次 id
"syncResult": {
"387cf029d31ef28836486d0d38821d5e": { // key = 平台线索数据唯一 id(同 clueItems[].id)
"success": true,
"errorMessage": "线索同步失败",
"successContacts": { "18812345678": 0 },
"failedContacts": { "18812345679": "号码同步失败" }
}
}
}
返回结果
{
"code": 0,
"message": "成功",
"data": { "success": true },
"traceId": "..."
}
失败文案约定:
- 以「号码重复」开头 → 对应「号码重复」筛选
- 以「电话号码格式不正确」开头 → 对应「格式不正确」
- 其他 → 「其他」
3. 单条转移
配置地址:企业配置中的 singleSyncUrl(未配置时详情页不显示转移按钮)。
调用关系:我方 → 你方 singleSyncUrl
请求方法:POST
请求 Header
| Header | 必填 | 说明 |
|---|---|---|
access-token |
是 | 开通代理商时下发的 access-token |
Content-Type |
是 | application/json |
Body 签名(本接口)
sign = md5(id + oid + uid + appSecret)
id=clueItems[0].id(平台线索数据唯一 id)oid、uid:与 Body 中字段值一致appSecret:开通代理商时下发的密钥sign放在 Body 字段中
Body 顶层字段与 clueItems 数据结构同「批量转移」,差异如下:
| 差异点 | 说明 |
|---|---|
async |
固定为 0(同步),须在本接口响应中即时返回转移结果 |
sign |
见上方:md5(id + oid + uid + appSecret),其中 id = clueItems[0].id |
clueType |
线索类型:COMPANY=工商企业,当前单条转移仅支持 COMPANY(工商企业) |
| 超时 | 须在 30 秒内响应,否则视为转移失败 |
请求体示意
{
"sign": "xxxx",
"async": 0,
"oid": "123456",
"uid": "789012",
"clueType": "COMPANY",
"syncTaskOption": { /* 同批量转移 */ },
"clueItems": [ /* 同批量转移中的工商企业线索结构,通常仅 1 条 */ ]
}
你方响应格式
{
"error_code": 0, // 须为 0,否则视为接口调用异常
"message": "",
"data": {
"success": true, // 必填,线索是否同步成功(失败则其下所有联系方式都视作失败)
"errorMessage": "线索同步失败", // 可选,同步失败时的错误消息
"successContacts": { // 可选,成功号码 -> 你方 customerId(Long,可选)
"18812345678": 0
},
"failedContacts": { // 可选,失败号码 -> 错误文案
"18812345679": "号码同步失败"
}
}
}
4. 转移状态 → 已转移
为了保持两边【企业是否已转移】状态一致,你方已有企业数据时,可把我方数据状态改为【已转移】。
一次最多 200 个线索 id(平台线索数据唯一 id,与数据转出 clueItems[].id 相同)。
调用关系:你方 → ISV 统一接口
请求
PUT /api/isv/v1/clues/mark_synced
Content-Type: application/json
鉴权 Header(与其他对接接口相同)
| Header | 必填 | 说明 |
|---|---|---|
X-App-Key |
是 | appKey |
X-Timestamp |
是 | 当前毫秒时间戳 |
X-Nonce |
是 | 随机串 |
X-Sign |
是 | HMAC-SHA256,算法见鉴权文档 |
请求 Body
{
"oid": "123456",
"uid": "789012", // 可选,登录用户在我们系统的登录用户 ID;用于额度归属
"clueType": "COMPANY", // 线索类型:COMPANY=工商企业,当前仅支持 COMPANY(工商企业)
"ids": ["f3c7933261570af39adb4e66514a019e"], // 平台线索数据唯一 id,一批最多 200
"enableAutoDeduct": false // true 时会先解锁再标记已转并扣额度
}
返回结果
{
"code": 0,
"message": "成功",
"data": {
"updatedIds": ["f3c7933261570af39adb4e66514a019e"], // 成功标记为已转
"unViewedIds": ["70db8286de8f03c9883ee617bb411195"], // 未解锁
"deductedQuota": 10 // 本次扣点
},
"traceId": "..."
}
5. 转移状态 → 未转移
为了保持两边【企业是否已转移】状态一致,你方数据删除后,可把我方数据状态改为【未转移】。
一次最多 200 个线索 id(平台线索数据唯一 id,与数据转出 clueItems[].id 相同)。
调用关系:你方 → ISV 统一接口
请求
PUT /api/isv/v1/clues/mark_non_synced
Content-Type: application/json
鉴权 Header(与其他对接接口相同)
| Header | 必填 | 说明 |
|---|---|---|
X-App-Key |
是 | appKey |
X-Timestamp |
是 | 当前毫秒时间戳 |
X-Nonce |
是 | 随机串 |
X-Sign |
是 | HMAC-SHA256,算法见鉴权文档 |
请求 Body
{
"oid": "123456",
"params": [
{
"clueType": "COMPANY", // 线索类型:COMPANY=工商企业,当前仅支持 COMPANY(工商企业)
"ids": [ // 平台线索数据唯一 id,一批最多 200 个
"f3c7933261570af39adb4e66514a019e"
]
}
]
}
返回结果
{
"code": 0,
"message": "成功",
"data": { "success": true },
"traceId": "..."
}