传递客户上下文

通过 Open API 签发 contextToken,在 Web SDK 会话中将客户资料与会话摘要同步至客服工作台

简述

传递客户上下文 面向 技术对接人员:由您的业务后端携带租户 API Key,调用 OpenDesk Open API 签发短期 contextToken,再交给网页端 Web SDK 使用。OpenDesk 会在访客发起咨询后,将客户资料、自定义用户字段与会话纪要字段同步到客服工作台,无需坐席手工录入。

调用边界: API Key 仅用于 服务端(业务后端、BFF、定时任务等),禁止写入浏览器前端、移动 App 或公开仓库。


适用场景

场景说明
官网 / App 嵌入 Web SDK访客点击在线客服前,后端已识别登录用户,希望坐席侧自动看到昵称、手机、会员等级等
预填会话摘要业务侧已知咨询意图、订单号、产品型号等,希望写入 会话纪要 供坐席参考
会话中更新上下文客户信息变更时,后端重新签发 Token,SDK 调用 updateContext 增量同步

典型用途: 电商订单页咨询、会员中心售后、SaaS 控制台内嵌客服。


接入前准备

准备项说明获取方式
OpenDesk 访问地址租户部署根地址,下文记为 {OpenDesk地址}由实施或运维提供,如 https://desk.example.com
API Key格式 sk-odk-...,绑定当前租户超级管理员在 管理后台 → 全局设置 → API Key 创建
Web 渠道 Key channelKey与 Web SDK 初始化参数一致管理后台 → 在线客服 → 渠道管理 → Web SDK 渠道详情
HTTPS 客户端任意语言均可curl、Python requests、Java OkHttp、Node.js fetch

接口前缀:

{OpenDesk地址}/api/v1/open

鉴权 Header(每次请求必填):

Authorization: Bearer sk-odk-您的密钥
Content-Type: application/json

技术特性:

  • 租户由 API Key 哈希解析,无需 在请求体中传 tenantId
  • Key 被禁用、删除或轮换后,旧 Key 立即无法签发 Token。
  • 成功调用会更新该 Key 的 最近使用时间,便于在管理后台排查调用方。

整体流程

您的业务后端                         OpenDesk                         网页 Web SDK
     │                                  │                                  │
     │  ① POST /open/context-token       │                                  │
     │     Authorization: Bearer Key     │                                  │
     │ ───────────────────────────────> │                                  │
     │  ② 返回 contextToken + expiresIn  │                                  │
     │ <─────────────────────────────── │                                  │
     │                                  │                                  │
     │  ③ 将 contextToken 交给前端/SDK  │                                  │
     │ ─────────────────────────────────────────────────────────────────> │
     │                                  │  ④ SDK 建连时携带 Token           │
     │                                  │ <─────────────────────────────── │
     │                                  │  ⑤ 校验 Token 并同步客户/纪要     │
     │                                  │     至客服工作台                   │

要点:

  • contextToken您的服务器 生成,经 SDK 后台通道 传给 OpenDesk,不会 出现在 URL 查询参数中。
  • Token 为 JWT,绑定 tenant_idchannel_key、签发所用 api_key_idkey_version;渠道或 Key 不匹配时校验失败。
  • 默认有效期 1800 秒(30 分钟),可自定义 300~1800 秒

如何使用

第一步:创建 API Key

  1. 使用 超级管理员 账号登录管理后台。
  2. 进入 全局设置 → API Key
  3. 点击 新建 API Key,填写名称(如「官网后端」「会员中心 BFF」)。
  4. 创建成功后 仅展示一次 完整 Key(sk-odk-...),请立即复制到密钥管理系统。
  5. 关闭弹窗后无法再次查看完整 Key,遗失需 轮换 或新建。

管理后台新建 API Key

第二步:获取 Web 渠道 Key

  1. 进入 管理后台 → 在线客服 → 渠道管理
  2. 打开目标 Web SDK 渠道详情。
  3. 复制 渠道 Key(即请求体中的 channelKey)。
  4. 确认该渠道已 启用,且允许公开接入(与 Web SDK 嵌入配置一致)。

渠道管理中的 Web SDK 渠道 Key

第三步:后端调用签发接口

接口: POST {OpenDesk地址}/api/v1/open/context-token

请求示例:

curl -X POST "{OpenDesk地址}/api/v1/open/context-token" \
  -H "Authorization: Bearer sk-odk-您的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "channelKey": "您的Web渠道Key",
    "customer": {
      "externalUserId": "user-10001",
      "nickname": "张三",
      "email": "zhangsan@example.com",
      "phone": "13800138000",
      "fields": {
        "vip_level": "gold"
      }
    },
    "sessionSummary": {
      "fields": {
        "customer_intent": "售后咨询",
        "order_no": "ORD-2026-001"
      }
    },
    "expiresSeconds": 600
  }'

成功响应(HTTP 200):

{
  "contextToken": "eyJhbGciOiJIUzI1NiIs...",
  "expiresIn": 600
}

响应字段采用 camelCasecontextTokenexpiresIn),与 Web SDK 参数名一致。

第四步:将 Token 交给 Web SDK

在网页初始化 SDK 时传入上一步返回的 contextToken

OpenDesk.init({
  channelKey: '您的Web渠道Key',
  contextToken: '从上一步接口返回的 contextToken',
  // ... 其他 SDK 配置
});

会话进行中若客户信息变化,可:

  1. 后端重新调用 POST /open/context-token 获取新 Token;
  2. 前端调用 SDK 的 updateContext({ contextToken: '...' })

客服工作台看到同步后的客户资料与会话纪要


接口说明

项目说明
MethodPOST
Path/api/v1/open/context-token
Content-Typeapplication/json
鉴权Authorization: Bearer <API_KEY>
成功响应200,Body 为 ContextTokenResponse
在线调试浏览器访问 {OpenDesk地址}/docs,在 OpenAPI 页面试调(需有效 Key)

请求参数

参数JSON 字段必填说明
渠道 KeychannelKey须为当前租户下已启用的 Web SDK 渠道
客户信息customer对象,见下表
会话摘要sessionSummary对象,格式 { "fields": { "字段标识": "值" } }
有效秒数expiresSeconds整数,300~1800,默认 1800

customer 系统字段:

字段说明约束
externalUserId您系统中的用户唯一 ID最长 128 字符;用于匹配 / 创建访客
nickname昵称最长 64 字符,客服侧展示为客户姓名
email邮箱最长 254 字符,服务端转小写
phone手机号最长 32 字符,自动去除空格、括号等
gender性别male / female / unknown
address地址最长 256 字符
remark备注最长 2000 字符
fields自定义用户字段键值对,见下文

自定义用户字段(customer.fields

使用前须在 管理后台 → 用户与组织 → 用户字段 中创建并 启用 目标字段,记下 字段标识(如 vip_level)。

"customer": {
  "externalUserId": "user-10001",
  "nickname": "张三",
  "fields": {
    "vip_level": "gold",
    "member_no": "M20260001"
  }
}
规则说明
字段须预先存在未配置或未启用的字段被忽略,同步结果返回 UNKNOWN_CUSTOMER_FIELD:字段标识
字段标识格式小写字母、数字、下划线,以字母或下划线开头(正则 ^[a-z_][a-z0-9_]{1,63}$
值类型须与字段类型匹配;格式错误返回 INVALID_CUSTOMER_FIELD:字段标识
空字符串"" 表示跳过,不更新该字段
部分失败单个自定义字段失败 不会 导致整次 HTTP 请求失败

sessionSummary.fields

  • 字段标识须与 管理后台 → 在线客服 → 会话纪要 中已配置字段一致。
  • 最多 50 个字段。
  • customersessionSummary 各自序列化后不超过 16KB会话纪要字段 用户信息字段

错误与排查

HTTP 状态常见原因处理建议
401未带 Key、格式错误、Key 无效或已删除检查 Authorization: Bearer sk-odk-...
403API Key 已禁用管理后台启用 Key,或创建新 Key 并更新调用方
404channelKey 不存在或不属于当前租户核对渠道 Key 与租户
422参数校验失败检查 expiresSeconds 范围、sessionSummary.fields 数量、16KB 体积限制

Token 消费阶段(SDK / 服务端):

  • Token 过期、渠道不匹配、签发 Key 已被禁用或轮换 → 校验失败,需重新签发。
  • 完整错误语义以 {OpenDesk地址}/docs 为准。

安全与限制

  1. API Key 只保存在服务器,禁止写入前端 bundle、移动端或 Git 仓库。
  2. 生产与测试环境使用 不同 Key;定期 轮换,轮换后旧 Key 立即失效。
  3. 所有调用须走 HTTPS
  4. 在管理后台关注 Key 的 最近使用时间,异常立即禁用。
  5. 当前 API Key 无细粒度 scope,同一租户下任一启用 Key 均可调用本接口及知识库 Open API。

与其他功能的关系

  • API Key(管理后台):本接口的鉴权凭证,仅超管可创建与管理。
  • 渠道管理:提供 channelKey;渠道须与 SDK 嵌入配置一致。
  • 用户字段customer.fields 依赖后台字段定义。
  • 会话纪要sessionSummary.fields 依赖后台纪要字段配置。
  • Web SDK 接入文档:描述 initupdateContext 等前端 API。
  • 知识库 API:同属 Open API,复用同一套 API Key,见《知识库 API》。

对接示例

电商订单页咨询

角色与目标: 用户在订单详情页点击「联系客服」,坐席需立即看到订单号与会员等级。

系统配置:

  1. 管理后台创建 API Key,配置 Web SDK 渠道。
  2. 用户字段 中启用 vip_level;在 会话纪要 中启用 order_nocustomer_intent

对接步骤:

  1. 用户登录后,您的后端根据 userId 组装 customersessionSummary
  2. 调用 POST /open/context-token 获取 contextToken
  3. 页面加载 Web SDK 时传入 contextToken
  4. 坐席接听后,在工作台 客户资料会话纪要 区域查看同步结果。

场景效果: 访客无需重复报订单号;坐席打开会话即可看到业务上下文。