配置推送地址后,企业客户在找企业页点击「转移」,平台会把线索推到你方接口;你方处理完后可回调我方回写结果,也可主动同步转移状态。

本文存在两种调用方向,签名方式不同,每个接口正文都单独标明,请勿混用:

方向 说明 签名 / 鉴权
你方 → 我方 调用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": "客户公海"
      }
    ]
  }
}

规则摘要

  1. 转移时只传递一个 选择的 name + additional_params
  2. 一级含二级时,二级放在 sub 数组
  3. 每层最多 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": "..."
}
文档更新时间: 2026-09-16 23:42   作者:004