技能脚本
## 概述
技能脚本开放给开发者在不同时间点编写业务逻辑的能力,对话流程共开放8个时序勾子。
技能函数需要按规范进行编写,每个函数使用固定命名,包含request, response两个参数。
技能中dialog_excute是业务函数,必须定义,其它不需要使用到的函数,可以不进行定义。
#### 技能脚本示例
``` js
exec.version = 'v1'
exec.dialog_slot_verify = function (request, response) {
return response;
}
exec.dialog_slot_fill = function (request, response) {
return response;
}
exec.dialog_slot_clarify = function (request, response) {
return response;
}
exec.dialog_excute = function (request, response) {
slot = request.slots["slot"];
await request(options)
.then(result => {
response.msg = `${slot.first()} <br/> ${result.xxx} <br/> ${result.xxx} `;
response.reply = true;
})
.catch(error => {
response.msg = `对不起,没有找到${slot[0]}的信息`;
response.reply = true;
});
return response;
}
```
# 版本号
>i version='v1'
# request 参数
>i 开发者可以使用`request`获取当前会话的各个业务属性。
|名称|类型|说明|
|-|-|-|
|user|object|当前用户|
|session|object|当前会话|
### request.user 属性
|名称|类型|说明|
|-|-|-|
|id|string|当前用户Id|
### request.session 属性
|名称|类型|说明|
|-|-|-|
|id|string|会话Id|
|channel|string|频道类型|
|skill|string|当前技能|
|intent|object|当前意图|
|data|dictionary|会话缓存数据|
|interactions|interaction[]|会话历史|
### request.session.intent 属性
|名称|类型|说明|
|-|-|-|
|id|string|意图英文名称|
|prev|string|上个入口意图英文名称,判断对话意图,技能切换时清空|
|slots|slot[]|词槽集合|
|slot|string|当前词槽英文名称,dialog_excute函数不包含本属性|
### request.session.intent.slots 属性
> 获取某一个命名词槽实体值集合,`request.session.intent.slots[slotname]`。
|名称|类型|说明|
|-|-|-|
|value|string|实体的值|
|resolution|dictionary|实体附加信息|
#### 词槽集合可以使用以下快速方法进行筛选:
|名称|返回|说明|
|-|-|-|
|slot[].where(string key,string value)|slot[]|按附加属性筛选集合|
|slot[].values()|string|返回实体value属性的值,英文逗号连接,示例:value1,value2|
|slot[].first()|string|返回第一个实体value属性的值,使用之前需要先判断undefined|
### request.session.interactions 属性
|名称|类型|说明|
|-|-|-|
|id|string|记录Id|
|request|request|请求对象|
|reponse|reponse|响应对象|
# reponse 参数
>i 开发者可以通过`reponse`设置当前会话业务属性及控制命令。
|名称|类型|说明|
|-|-|-|
|anwser|object|回答内容|
|card|object|网页频道输出卡片,json格式(未实现)|
|data|object|附加业务数据,json格式|
|command|object|控制命令,各函数控制命令有所不同,详见函数说明|
### reponse.anwser 属性
|名称|类型|说明|
|-|-|-|
|text|string|回答内容|
|type|string|内容类型,默认:text|
### reponse.command 属性
|名称|类型|说明|
|-|-|-|
|verify|bool|是否验证通过|
|end|bool|是否结束会话|
|solts|dictionary|填入词槽|
# 技能函数
>i 不同函数代表会话时序不同位置,开发者可以在不同时间点的脚本函数编写业务逻辑,以下为不同值对应的时间点说明。
|属性值|说明|
|-|-|-|
|dialog_slot_verify|当前处理词槽值的业务有效性验证|
|dialog_slot_fill|自动填充槽默认值|
|dialog_slot_clarify|自定义某个词槽的询问内容和交互方式|
|dialog_excute|获取到所有词槽后开始进行业务的数据加载或数据推送|
### dialog_slot_verify 函数
> 当前处理词槽值的业务有效性验证,输出参数列表如下
|名称|类型|说明|
|-|-|-|
|reponse.command.verify|bool|是否验证通过,默认:true|
### dialog_slot_fill 函数
> 自动填充槽默认值
|名称|类型|说明|
|-|-|-|
|reponse.data|object|附加业务数据,json格式|
|reponse.command.solts|dictionary|控制命令,填入词槽|
### dialog_slot_clarify 函数
> 自定义某个词槽的询问内容和交互方式
|名称|类型|说明|
|-|-|-|
|reponse.anwser|object|回答内容,结构reponse参数|
|reponse.data|object|附加业务数据,json格式|
|reponse.command.end|bool|控制命令,是否结束,默认:false|
### dialog_excute 函数
> 获取到所有词槽后开始进行业务的数据加载或数据推送
|名称|类型|说明|
|-|-|-|
|reponse.anwser|object|回答内容,结构reponse参数|
|reponse.data|object|附加业务数据,json格式|