1. 自定义渠道对接
尘锋SCRM开放平台
  • 嵌入页面前端SDK
  • 接入前准备
    • 接口鉴权说明
    • 回调接入指南
    • 报错code码说明
    • 省市区code码
    • 民族id对应关系
    • 获取附件URL访问签名
    • 更新日志
    • AI编程指南
  • 对接方案介绍
    • 联系人架构介绍
    • 员工概览
    • ERP打通
    • 客户信息打通
    • 订单打通
    • 微信unionid互通场景
    • 获客助手对接场景
    • 外呼平台接入SCRM自检说明文档
  • API文档
    • 客户
      • 联系人
        • 联系人管理
          • 查询联系人
          • 新增联系人
          • 编辑联系人
          • 删除联系人
          • 编辑联系人状态
          • 获取联系客户统计数据
          • 批量查询联系人和企业关联关系
          • 外部ID
            • 删除联系人外部ID
            • 更新联系人外部ID
            • 绑定外部ID与联系人ID
        • 联系人字段ID
          • 查询联系人自定义字段模板
          • 查询跟进状态列表
          • 查询联系人公海列表
          • 无效&放弃&删除原因查询
          • 联系人类型与标签和自定义字段关联关系
          • 联系人类型
          • 联系人联系方式
          • 多级联选列表
          • 来源
            • 来源列表查询(企业&联系人)
            • 编辑来源
            • 创建来源
        • 标签库
          • 给联系人打标签
          • 好友标签(企业微信标签)
            • 查询好友标签列表
            • 编辑好友标签
            • 新增好友标签
          • 联系人标签
            • 编辑联系人标签值
            • 新增联系人标签组
            • 编辑联系人标签组
            • 新增联系人标签值
            • 查询联系人标签列表
        • 跟进团队
          • 编辑(联系人/企业)共享人
          • 查询创建⼈跟进⼈和共享⼈
        • 跟进提醒
          • 查询跟进提醒
          • 新增跟进提醒
          • 编辑跟进提醒
          • 完成跟进提醒
          • 删除跟进提醒
        • 跟进记录
          • 查询跟进记录
          • 查询跟进记录模板
          • 新增跟进记录
        • 在职继承
          • 分配在职成员联系人
          • 查询接替状态
        • 签到
          • 查询签到记录
        • 行为轨迹
          • 轨迹参数说明
          • 上报轨迹事件
          • 查询轨迹事件
          • 查询旅程项目
      • 企业
        • 企业字段ID
          • 查询企业字段ID
          • 查询企业跟进状态
          • 查询企业公海列表
          • 来源列表查询(企业&联系人)
          • 查询企业类型
          • 查询企业删除原因
          • 查询多级联选
        • 企业管理
          • 查询企业列表
          • 新增企业
          • 编辑企业
          • 删除企业
          • 企业绑定联系人
          • 更新企业跟进人
          • 放弃企业到公海
          • 分配公海中企业
        • 企业标签
          • 查询企业标签
      • 好友
        • 查询好友列表
        • 编辑好友信息
        • 好友关联联系人
        • 好友取消关联联系人
        • unionId上传&关联externalUserId
      • 客户群
        • 查询客户群列表
        • 查询客户群详情
        • 编辑客户群标签
        • 查询群标签列表
        • 查询群聊数据统计-按群主聚合方式
        • 查询群聊数据统计-按自然日聚合方式
    • 销售机会
      • 销售机会管理
        • 查询销售机会列表
        • 新增销售机会
        • 编辑销售机会
        • 删除销售机会
        • 新增销售机会协同人
        • 移除销售机会协同人
        • 销售机会绑定订单
        • 销售机会解绑订单
        • 销售机会阶段变更记录
      • 销售机会字段ID
        • 查询销售机会字段ID
        • 查询销售机会类型
        • 查询销售机会阶段
        • 查询协同角色ID
        • 查询竞争对手
        • 查询丢单原因
        • 查询销售机会多级联选选项
        • 修改销售机会多级联选选项
    • 交易
      • 订单
        • 查询订单列表
        • 新增&编辑订单
        • 查询订单自定义字段ID
        • 修改订单归属人/归属部门
        • 订单发货
        • 查询物流公司列表
        • 查询订单来源
        • 编辑自主下单
      • 售后单
        • 查询售后单列表
        • 创建售后单
        • 售后单操作退款
        • 关闭售后单
      • 回款单
        • 查询回款单列表
        • 创建回款单
      • 会员积分
        • 查询会员列表
        • 新增会员
        • 变更会员等级
        • 查询会员等级变更明细
        • 变更会员积分
        • 变更会员成长值
        • 查询会员积分变更明细
        • 使用会员积分
      • 商品类
        • 查询商品列表
        • 查询商品详情
        • 新增商品
        • 商品图片/视频上传
        • 编辑商品库存
    • 员工
      • 查询员工信息
      • 编辑员工信息
      • 部门信息查询
      • 批量为员工启用系统
      • 给员工发送企微通知
      • 查询系统登录记录
    • 预约单
      • 查询预约列表
    • 评论
      • 查询评论列表接口
    • 运营
      • 活码
        • 查询活码详情
        • 查询活码列表
        • 批量修改渠道活码属性
      • 表单
        • 查询表单字段模板
        • 查询表单填写内容
      • sop
        • 查询sop列表
        • 查询sop执行情况列表
      • 素材
        • 查询素材列表
        • 查询素材详情
        • 查询员工发送素材明细
        • 创建&编辑素材
        • 删除素材
        • 查询素材包详情
      • 营销任务
        • 查询营销任务执行情况
        • 查询营销任务列表
      • 朋友圈
        • 获取企业发布的朋友圈员工执行情况
        • 获取朋友圈的互动数据
        • 获取企业全部发布列表
      • 获客助手短链
        • 查询获客助手来源及链接信息
        • 查询获客助手配置列表
        • 获取专属短链详情列表
        • 生成用户专属短链接
    • 会话存档
      • 上传会话存档记录
    • 通话短信
      • 查询通话记录列表
      • 电销手机外呼
      • 查询通话录音转文字结果
      • 查询短信记录列表
    • 页面嵌入
      • 页面嵌入配置说明
      • 解密嵌入页面传参
      • 菜单嵌入说明
    • 应用
      • 楼盘管理
        • 查询楼盘
        • 新增楼盘
        • 删除楼盘
      • 外联盟管理
        • 查询外联盟
        • 新增外联盟
        • 编辑外联盟
        • 删除外联盟
        • 启停用外联盟
        • 查询外联盟字段ID
        • 外联盟多级联选选项
  • 事件推送
    • 联系人
      • 新增联系人事件
      • 编辑联系人事件
      • 联系人跟进状态变更事件
      • 删除联系人事件
      • 联系人合并事件
      • 跟进提醒
        • 联系人跟进提醒状态变更
      • 联系人流转
        • 跟进团队变更事件
        • 联系人流转事件
      • 跟进记录
        • 跟进记录操作事件
    • 好友
      • 添加好友事件
      • 好友与联系人绑定事件
      • 好友与联系人解绑事件
      • 好友主动删除员工事件
      • 员工主动删除好友事件
      • 更新好友信息事件
    • 客户群
      • 新增客户群事件
      • 变更客户群事件
      • 解散客户群事件
    • 销售机会
      • 销售机会负责人变更
      • 销售机会协同人变更
      • 销售机会操作事件
    • 企业
      • 企业跟进团队流转事件
      • 企业新增事件
      • 编辑企业事件
      • 企业跟进状态变更事件
      • 企业删除事件
    • 交易
      • 推送说明
      • 订单
        • 新增订单事件
        • 编辑订单事件
        • 订单状态变更事件
        • 订单支付完成事件
        • 删除订单事件
      • 售后单
        • 售后单创建事件
        • 编辑售后单事件
        • 售后单状态变更事件
        • 删除售后单事件
        • 售后单退款成功事件
      • 商品
        • 新增商品事件
        • 商品库存变更事件
        • 编辑商品事件
        • 商品状态变更事件
      • 会员积分
        • 新增会员事件
        • 会员合并事件
        • 成长值变更事件
        • 会员等级变更事件
        • 会员积分变更事件
    • 工单
      • 新增工单事件
      • 流转工单事件
      • 编辑工单事件
    • 运营
      • 提交表单事件
      • SOP推送第三方系统事件
    • 通话短信
      • 通话记录操作事件
      • 短信记录操作事件
    • 预约单
      • 新增预约单事件
    • 应用
      • 楼盘
        • 新增楼盘事件
        • 编辑楼盘事件
        • 删除楼盘事件
      • 外联盟
        • 新增外联盟事件
        • 编辑外联盟事件
        • 删除外联盟事件
        • 启/停外联盟事件
        • 外联盟审批完成事件
  • AIagent
    • 添加/移除群内员工
    • 回调AI推理接口
    • 查询渠道原始id
    • 接入说明
      • agent接口鉴权
      • agent回调接入说明
    • 收发消息能力
      • 会话消息事件
      • 回复消息接口
      • 主动发送消息接口
      • AI消息发送结果事件
    • 自定义渠道对接
      • 对接说明
      • 会话转人工
      • 发送消息
      • 消息推送事件
      • 获取访客信息
    • 嵌入页面
  1. 自定义渠道对接

对接说明

自定义渠道 SPI 调用说明#

1. 适用范围#

该协议版本为 OpenKF HTTP SPI v1,用于新合作方与Chatdoing之间传输客服消息、会话状态和访客信息。
协议中的双方职责如下:
方向发起方接收方用途
出站chatdoing合作方平台发送消息、转人工、查询访客
回调合作方平台chatdoing推送客服事件
所有业务 body 必须使用 AES-256-GCM 加密;HTTPS 仍是必需的传输层保护,不能以应用层加密替代。

2. 启用与应用配置#

配置如下,示例中的值不可用于生产
{
  "appid": "partner-app-id",
  "host": "https://partner.example.com",
  "key_id": "open-kf-202608",
  "key": "MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY="
}
字段要求说明
appid非空字符串合作方的平台应用标识,写入 X-OpenKF-App-ID
hostHTTPS 绝对 URL,无 userinfochatdoing 调用合作方的基础地址
key_id非空字符串当前 active 加密密钥版本
key标准 Base64 编码的 32 字节随机值当前 active AES-256 密钥

3. 加密信封#

3.1 HTTP 约束#

所有请求和成功可加密响应均使用:
Content-Type: application/octet-stream
Body: AES-256-GCM ciphertext || tag
body 是原始字节,不能再包装为 JSON、Base64 或表单。明文 JSON 最大为 1 MiB;GCM tag 固定为 16 字节。
当接收方无法安全构造加密响应时,例如缺少完整协议头、非法本地 appID 或未知 key_id,回调接口会以 HTTP 400 返回最小明文 JSON 错误。其他已完成头和密钥校验后的回调响应均为加密 body。

3.2 必填请求头#

Header值与格式
X-OpenKF-Version固定 1
X-OpenKF-Direction请求为 request,响应或 ACK 为 response
X-OpenKF-App-ID合作方 appid
X-OpenKF-Key-ID本次使用的密钥版本
X-OpenKF-Algorithm固定 AES-256-GCM
X-OpenKF-TimestampUnix 毫秒时间戳字符串,与接收方时钟差不得超过 5 分钟
X-OpenKF-Nonce标准 Base64 编码的 16 字节随机值,用于防重放
X-OpenKF-IV标准 Base64 编码的 12 字节随机 GCM nonce
X-OpenKF-Request-ID一次逻辑请求的稳定唯一标识,建议 UUID v4
每一次实际 HTTP 传输必须重新生成 timestamp、nonce 和 IV。同一次逻辑调用的自动重试必须保持同一个 request_id。

3.3 AAD 构造#

对请求和响应均使用以下固定顺序,以换行符 \n 连接,UTF-8 编码后作为 GCM Additional Authenticated Data:
method\npath\nversion\ndirection\nappID\nkeyID\nalgorithm\ntimestamp\nnonce\niv\nrequestID
其中 method 是大写的 POST,path 仅为 URL path,不包含 scheme、host、query string。例如出站消息接口为:
POST
/open-kf/spi/v1/messages/send
1
request
partner-app-id
open-kf-202608
AES-256-GCM
1700000000000
QUFBQUFBQUFBQUFBQUFBQQ==
AQIDBAUGBwgJCgsM
req-001
双方必须使用完全相同的 method、path 和 header 原始值构造 AAD。任一字段被修改都会使 GCM 认证失败。

4. 合作方实现的出站服务 SPI#

chatdoing 作为客户端调用合作方 host 下的三个固定端点。合作方应解密 body、处理业务、以相同 request_id 返回加密的统一响应。

4.1 发送消息#

POST {host}/open-kf/spi/v1/messages/send
解密后请求示例:
{
  "msg_id": "msg-20260812-001",
  "chat_id": "chat-001",
  "send_time": 1786492800123,
  "msg_type": 0,
  "content": "您好,请问有什么可以帮您?"
}
支持的 msg_type 如下。消息类型值与本服务内部枚举一致。
msg_type类型必填业务字段
0文本content
1图片file_url
2语音file_url
3文件file_url
4视频file_url
7位置location
9链接link
位置和链接的字段格式:
{
  "location": {
    "name": "办公园区",
    "address": "广东省广州市...",
    "latitude": 23.1291,
    "longitude": 113.2644
  },
  "link": {
    "title": "帮助中心",
    "desc": "常见问题",
    "url": "https://partner.example.com/help",
    "thumb_url": "https://partner.example.com/help.png"
  }
}

4.2 会话转人工#

POST {host}/open-kf/spi/v1/chats/transfer
解密后的 body:
{"chat_id":"chat-001"}
合作方应以 request_id 或自身持久化的会话业务键保证重复调用不会重复转人工。

4.3 查询访客#

POST {host}/open-kf/spi/v1/contacts/get
解密后的请求:
{"chat_id":"chat-001","sender_id":"customer-001"}
成功响应的 data 应为:
{
  "sender_id": "customer-001",
  "nickname": "张三",
  "avatar": "https://partner.example.com/avatar.png",
  "gender": 1,
  "unionid": "optional-unionid"
}
无法提供访客查询能力时,必须返回明确的非零业务错误码,不能返回缺少 data 的成功响应。

4.4 统一加密响应#

三个端点的响应均为加密 JSON,解密后的结构固定为:
{
  "code": 0,
  "message": "",
  "request_id": "d2b9a0ad-9ac1-4a21-98cc-436be1e37701",
  "duplicate": false,
  "data": null
}
响应 header 的 direction 必须为 response,其余 header 重新生成;响应 app_id、key_id 和 body 中的 request_id 必须与请求对应。成功时 code=0;重复成功可设置 duplicate=true 并返回原结果。

5. 合作方调用本服务的回调 SPI#

合作方向 chatdoing 推送事件时,调用为该 Application 配置的回调 URL:
POST /go-im-center/open_customer_service/callback/v1/events/{localAppID}
请求使用第 3 节的加密信封,X-OpenKF-Direction 必须为 request,X-OpenKF-App-ID 必须等于该本地 Application 配置的合作方 appid。
当前仅支持 event_type="event.msg"。解密后 body 示例:
{
  "event_type": "event.msg",
  "msg_id": "partner-msg-001",
  "chat_id": "chat-001",
  "chat_type": 0,
  "chat_status": 1,
  "sender_id": "customer-001",
  "sender_type": 1,
  "send_time": 1786492800123,
  "msg_type": 0,
  "content": "我想咨询产品价格"
}
字段说明
chat_type0 单聊,1 群聊
chat_status1 人工服务,2 AI 托管
sender_type0 客服/员工,1 客户,2 AI
msg_type取值及载荷字段见 4.1;媒体消息使用 file_url,位置使用 location,链接使用 link
处理成功后,本服务会返回加密 ACK,解密格式同 4.4。相同 msg_id 或 request_id 已成功处理时,ACK 的 code=0 且 duplicate=true,不会再次发布消息事件。

6. 错误、重试与幂等#

code含义是否自动重试
40001信封或 header 非法否
40002GCM 解密或认证失败否
40003nonce 重放否,重新构造新请求才可能重试
40004时间戳超过 5 分钟窗口否,先校准时钟后重新构造请求
40005协议版本、方向或算法不支持否
40006事件、动作、发送者或消息类型不支持否
40101key_id 缺失、未知或已 retired否,更新密钥配置后重新构造请求
40901该请求正在处理,幂等占用冲突由调用方按退避策略重试
42900业务限流是
50000服务端内部错误是
chatdoing 对出站请求的行为为:总共最多 3 次,首次重试等待 100 ms,第二次重试等待 200 ms;单次逻辑调用共享 10 秒超时。HTTP 429 或任意 5xx,以及业务码 42900、50000 都会触发该重试。
合作方实现相同语义时应遵守:
1.
request_id 在一次逻辑操作和其传输重试中保持不变。
2.
每次传输尝试重新生成 16 字节 nonce、12 字节 IV 和当前毫秒时间戳。
3.
在 appid + nonce 维度原子去重,避免重放。
4.
在 appid + request_id 及消息 appid + msg_id 维度保存处理结果,重复请求返回原结果或 duplicate=true,不重复产生业务副作用。
5.
记录日志时只保留 appID、keyID、action、requestID、错误码和耗时;禁止记录 key、明文、完整密文或访问令牌。

7. Go 实现示例#

下例展示合作方服务端解密 chatdoing 的请求并构造加密响应所需的核心逻辑。示例只使用 Go 标准库;生产实现还应加入 key 查找、时间窗口校验、nonce 原子占用和持久化幂等记录。
回调发送方复用相同的 crypt、Headers 和 AAD 规则即可。区别仅在于:URL path 为 /go-im-center/open_customer_service/callback/v1/events/{localAppID},请求 body 为第 5 节的事件 JSON;收到响应后按响应 headers 的 direction=response 解密并检查 request_id、code 与 duplicate。
以下示例基于前述 Headers、Response、crypt、headersFromHTTP 和 validateHeaders,展示合作方调用本服务 POST https://im.example.com/go-im-center/open_customer_service/callback/v1/events/12345 的完整流程。
该函数所在文件需要额外引入:
发生网络超时、HTTP 429/5xx 或 ACK 的业务码为 42900、50000 时,应保持 requestID 不变,重新生成 Timestamp、Nonce、IV,使用新 header 和新密文重发;不可复用同一个 nonce 或 IV。
修改于 2026-08-12 10:35:37
上一页
AI消息发送结果事件
下一页
会话转人工
Built with