技能脚本

## 概述 技能脚本开放给开发者在不同时间点编写业务逻辑的能力,对话流程共开放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格式|