DSK协议基本概念
一、定义
在自定义技能接入协议(DSK)中,JSON格式的请求体主要包括三部分:request, session, context。
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-dispatch到skill 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"
}
}
}
}
}