传递客户上下文
通过 Open API 签发 contextToken,在 Web SDK 会话中将客户资料与会话摘要同步至客服工作台
简述
传递客户上下文 面向 技术对接人员:由您的业务后端携带租户 API Key,调用 OpenDesk Open API 签发短期 contextToken,再交给 Web SDK 使用。OpenDesk 在访客发起咨询后,将客户资料、自定义用户字段与会话纪要字段同步到客服工作台,无需坐席手工录入。
调用边界: API Key 仅用于 服务端(业务后端、BFF、定时任务等),禁止写入浏览器前端源码、移动 App 安装包或公开 Git 仓库。
适用场景
您的网站或 App 已嵌入 OpenDesk Web SDK,希望访客点击咨询时,客服工作台自动看到:
- 客户昵称、手机、邮箱等资料
- 业务侧预填的 会话摘要(咨询意图、订单号、产品型号等)
| 场景 | 说明 |
|---|---|
| PC 嵌入 SDK | 后端签发 Token,经 OpenDesk.init({ contextToken }) 交给嵌入页 |
| H5 / 独立 URL | 后端签发 Token,可拼接到聊天页 URL 的 contextToken 参数(见下文) |
| 会话中更新 | 客户信息变更时重新签发,SDK 调用 updateContext 增量同步 |
典型用途: 电商订单页咨询、会员中心售后、SaaS 控制台内嵌客服。
接入前准备
| 准备项 | 说明 | 获取方式 |
|---|---|---|
| OpenDesk 访问地址 | 租户部署根地址,下文记为 {OpenDesk地址} | 如 https://desk.example.com |
| API Key | 格式 sk-odk-... | 管理后台 → 全局设置 → API Key(仅超管);详见《API Key》 |
Web 渠道 Key channelKey | 与 SDK 初始化参数一致 | 管理后台 → 在线客服 → 渠道管理 → Web SDK 渠道详情 |
| HTTP 客户端 | 任意语言 | curl、Python、Java、Node.js 等,Body 为 JSON |
接口前缀:
{OpenDesk地址}/api/v1/open
鉴权 Header(每次请求必填):
Authorization: Bearer sk-odk-您的密钥
Content-Type: application/json
技术特性:
- 租户由 API Key 哈希解析,无需 在请求体中传
tenantId。 - Key 被禁用、删除或轮换后,旧 Key 立即 无法签发 Token。
- 成功调用会更新该 Key 的 最近使用时间。
- 当前 Key 无 scope 细分,启用 Key 亦可调用《知识库 API》等同套 Open API。
整体流程
您的业务后端 OpenDesk 网页 Web SDK
│ │ │
│ ① POST /open/context-token │ │
│ Authorization: Bearer Key │ │
│ ───────────────────────────────> │ │
│ ② 返回 contextToken + expiresIn │ │
│ <─────────────────────────────── │ │
│ │ │
│ ③ 将 contextToken 交给 SDK/URL │ │
│ ─────────────────────────────────────────────────────────────────> │
│ │ ④ SDK 建连时携带 Token │
│ │ <─────────────────────────────── │
│ │ ⑤ 校验并同步客户资料与会话纪要 │
│ │ 至客服工作台 │
要点:
contextToken由 您的服务器 调用 API 生成;PC 嵌入 SDK 场景经 SDK 初始化或updateContext传递,不应 硬编码在前端 bundle 中。- Token 为 JWT,绑定
tenant_id、channel_key、签发所用api_key_id与key_version;渠道或 Key 不匹配时校验失败。 - 默认有效期 1800 秒(30 分钟),可设 300~1800 秒(最短 5 分钟)。
如何使用
第一步:创建并保管 API Key
仅 超级管理员 可操作;普通管理员、客服账号 看不到 此菜单。
- 登录 管理后台 → 全局设置 → API Key。
- 点击 新建 API Key,填写名称(如「官网后端」)。
- 创建成功后 仅展示一次 完整 Key(
sk-odk-...),请立即复制到密钥管理系统。 - 关闭窗口后 无法再次查看 完整 Key;遗失须 轮换 或新建。
日常维护:
| 操作 | 何时使用 |
|---|---|
| 禁用 | 脚本停用、人员离职、怀疑泄露;禁用后接口立刻不可用 |
| 启用 | 恢复已禁用的 Key |
| 轮换 | 定期更换;轮换后旧 Key 立即失效,须更新所有调用方 |
| 删除 | 须先禁用再删除 |
列表可查看脱敏 Key、状态、创建时间、最近使用时间。

第二步:获取 Web 渠道 Key
- 进入 管理后台 → 在线客服 → 渠道管理。
- 打开目标 Web SDK 渠道详情。
- 复制 渠道 Key(请求体中的
channelKey)。 - 确认渠道已启用,且与站点嵌入/链接使用的渠道一致。

第三步:配置后台字段(可选但推荐)
传递自定义内容前,请先在管理后台完成字段定义:
| 数据 | 配置位置 |
|---|---|
| 自定义用户字段 | 管理后台 → 用户与组织 → 用户字段 |
| 会话摘要字段 | 管理后台 → 在线客服 → 会话纪要 |


第四步:后端调用签发接口
接口: 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
}
响应字段为 camelCase(contextToken、expiresIn),与 Web SDK 参数名一致。
第五步:将 Token 交给 Web SDK
方式 A:PC 嵌入 SDK(推荐)
在网页初始化 SDK 时传入 contextToken:
OpenDesk.init({
channelKey: '您的Web渠道Key',
contextToken: '从上一步接口返回的 contextToken',
// ... 其他 SDK 配置
});
Token 由您的 后端下发给前端(如页面渲染时注入、或前端请求自家 BFF 获取),不要 将 API Key 放在前端。
方式 B:H5 / 独立 URL
适用于直接打开聊天页链接的场景。将 Token 拼接到 URL:
{OpenDesk地址}/chat/{channelKey}?contextToken=从接口返回的contextToken
- 访客打开后,系统读取
contextToken并完成同步,随后 自动从地址栏移除 该参数,降低泄露风险。 - 移动端通过 SDK 打开独立 URL 时,也会按同样方式传递该参数。
会话中更新
若客户信息在会话进行中发生变化:
- 后端重新调用
POST /open/context-token获取新 Token; - 前端调用 SDK
updateContext({ contextToken: '...' })更新(详见 Web SDK 接入文档)。
效果: 客服在工作台 客户资料 与 会话纪要 区域看到传入内容。

接口说明
| 项目 | 说明 |
|---|---|
| Method | POST |
| Path | /api/v1/open/context-token |
| Content-Type | application/json |
| 鉴权 | Authorization: Bearer <API_KEY> |
| 成功响应 | 200,Body 为 ContextTokenResponse |
| 在线调试 | 访问 {OpenDesk地址}/docs,在 OpenAPI 页面试调(需有效 Key) |
请求参数
| 参数 | JSON 字段 | 必填 | 说明 |
|---|---|---|---|
| 渠道 Key | channelKey | 是 | 当前租户下已启用的 Web SDK 渠道 Key |
| 客户信息 | 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)
除系统字段外,可传入已在 用户字段 中配置并 启用 的自定义字段:
"customer": {
"externalUserId": "user-10001",
"nickname": "张三",
"fields": {
"vip_level": "gold",
"member_no": "M20260001"
}
}
| 规则 | 说明 |
|---|---|
| 字段须预先存在 | 未配置或未启用的字段被忽略,同步结果可能含 UNKNOWN_CUSTOMER_FIELD:字段标识 |
| 字段标识格式 | 小写字母、数字、下划线,以字母或下划线开头 |
| 值类型 | 须与字段类型匹配;否则 INVALID_CUSTOMER_FIELD:字段标识 |
| 空字符串 | 传 "" 表示跳过,不更新该字段 |
| 部分失败 | 单个字段失败 不会 导致整次 HTTP 请求失败 |
sessionSummary.fields:
- 字段标识须与 会话纪要 中已配置字段一致。
- 最多 50 个字段。
customer与sessionSummary各自 JSON 序列化后不超过 16KB。
错误与排查
| HTTP 状态 | 常见原因 | 处理建议 |
|---|---|---|
| 401 | 未带 Key、格式错误、Key 无效或已删除 | 检查 Authorization: Bearer sk-odk-... |
| 403 | API Key 已禁用 | 启用 Key 或创建新 Key 并更新调用方 |
| 404 | channelKey 不存在或不属于当前租户 | 核对渠道 Key |
| 400 / 422 | 参数校验失败 | 检查 expiresSeconds 范围、字段数量、16KB 限制 |
context-token 专项:
channelKey须与当前租户下 Web SDK 渠道一致。- Token 消费阶段:过期、渠道不匹配、签发 Key 已禁用或轮换 → 须重新签发。
Token 消费阶段(SDK / 服务端): 完整错误语义以 {OpenDesk地址}/docs 为准。
安全与限制
- API Key 只保存在服务器;生产与测试使用 不同 Key。
- 定期 轮换 Key;关注 最近使用时间,异常立即禁用。
- 所有调用须走 HTTPS。
- PC 嵌入 场景勿将 Token 长期暴露在可分享的 URL 中;独立 URL 场景系统会在读取后移除地址栏参数,但仍应由后端按需签发短期 Token。
暂不支持通过本接口实现
以下须使用 员工登录态 在管理后台或工作台操作,不能 用 API Key 代替:
- 创建 / 删除 API Key 本身
- 修改渠道、路由、角色、员工等系统配置
- 客服接单、发消息、处理工单等日常作业
- 呼叫中心、报表、监控类能力
与其他功能的关系
- API Key(管理后台):本接口鉴权凭证;详见《API Key》。
- 渠道管理:提供
channelKey。 - 用户字段 / 会话纪要:
customer.fields与sessionSummary.fields的数据来源。 - Web SDK 接入文档:
init、updateContext、嵌入与独立 URL 模式。 - 知识库 API:同属 Open API,复用同一套 Key。
需要更多帮助
- 在线接口文档:
{OpenDesk地址}/docs— 完整 Schema 与在线试调。 - 字段配置: 传递自定义字段前,请先在管理后台完成 用户字段、会话纪要 配置。
- 后续新增接口以
{OpenDesk地址}/docs公布为准。
对接示例
电商订单页咨询(PC 嵌入)
角色与目标: 用户在订单详情页点击「联系客服」,坐席需立即看到订单号与会员等级。
系统配置: 创建 API Key;配置 Web SDK 渠道;在 用户字段 启用 vip_level,在 会话纪要 启用 order_no、customer_intent。
对接步骤:
- 用户登录后,后端组装
customer与sessionSummary。 - 调用
POST /open/context-token获取contextToken。 - 页面
OpenDesk.init({ contextToken })加载 SDK。 - 坐席在工作台查看同步结果。
场景效果: 访客无需重复报订单号;坐席打开会话即可看到业务上下文。
H5 会员中心跳转聊天(独立 URL)
角色与目标: App 内 H5 打开独立聊天链接,并带入会员 ID 与等级。
对接步骤:
- App 服务端调用
POST /open/context-token签发 Token。 - 拼接链接:
{OpenDesk地址}/chat/{channelKey}?contextToken=...并在 WebView 中打开。 - 页面加载后 Token 被消费并从地址栏移除;坐席侧看到会员资料。
接口速查
| 功能 | Method | Path |
|---|---|---|
| 签发客户上下文 Token | POST | /api/v1/open/context-token |
