DSK协议基本概念

一、定义

自定义技能接入协议(DSK)中,JSON格式的请求体主要包括三部分:requestsessioncontext
request是与当前请求相关的数据,session是与当前技能会话相关的数据,context是全局共享的数据。详细定义如下表:

对象 定义 生命周期
input 用户的一次输入,多次输入,经过DUI平台会形成一个请求,比如U: "导航" S: "去哪?" U: "北京" 用户一次输入
request dui对话服务对外部技能服务发起的一次请求, 分为开始请求、意图请求、结束请求 发起请求到收到响应
session 用户与某一个skill交互过程的会话,session是与skill对应的,请求不同skill的session id是不同的 用户请求被分派到某skill,到与该skill的交互结束,一个session期间有多个request
context 用户与dui客户端交互过程中保存的跨skill的交互上下文信息(slot-value等) 和系统级的共享信息(user id, product id, client type, device info等) 一直存在,但因存储空间有限和交互历史相关的字段有过期时间


生命周期长度:context > session > request > input

二、使用示例

2.1 skill yield&re-dispatch

适用场景:交互过程中skill 1发现不能处理的用户请求,主动yield, skill dispatcher将请求re-dispatchskill 2

  request response skill session context
U: 打电话 StartRequest({tel, session1, 电话意图}) {你要打给谁} tel session1 global shared context
S: 您要打给谁 N/A N/A tel session1 global shared context
U: 导航到北京 ContinueRequest({tel, session1, 空意图})
ContinueRequest({navi, session2, 导航意图, 北京})
{ yield: true }
{为您找到如下北京地点}
navi session1 global shared context
S: 为您找到如下北京地点... N/A N/A navi session1 global shared context
U: 第一个 ContinueRequest({navi, session2, 选择意图,1}) {准备导航到天安门, shouldEndSession:true} // 技能主动结束 navi session1 global shared context
S: 准备导航到天安门 N/A N/A navi session1 global shared context

 

2.2 获取客户端上传的自定义配置

适用场景:客户端上传系统级/技能级配置至DUI,自定义技能获取对应配置信息。客户端上传参考各客户端接入文档,如:《Android SDK集成:3.18 数据上传接口》、《websocket协议:2.6 上传自定义配置

以下示例与《Android SDK集成:3.18 数据上传接口》相对应

JSON格式的请求体格式如下所示:

{
    "version":"1.0",
    "session": {...},
"request": {...}, "context":{ "skill":{ "skillId":"this-is-skill-id", "settings":{ "status":{ "platform":"Android" } } }, "user":{ "userId":"this-is-user-id" }, "device":{ "deviceName":"this-is-device-name" }, "product":{ "productId":"this-is-product-id", "productVersion":"1" }, "system":{ "settings":{ "status":{ "platform":"Android" } } } } }