交互流程
什么是交互流程
交互流程是用户对话的一个场景,我们将原本抽象、难理解的交互过程通过流程图表示,开发者可以通过绘制流程图的方式,来进行复杂业务流程的处理。
举例,常见的银行存款引导业务场景:
客户:"我要存款"
引导员:"请问您是个人账户还是对公账户"
客户:"个人账户"
引导员:"请问您是否携带银行卡"
客户:"带卡了"
引导员:"请问您存款金额超过五千元吗"
客户:"不超过五千"
引导员:"好的,请您跟我到自助服务区操作"
在这个场景里,用户明确表达了存款意图,但是缺少账户类型信息,所以需要询问用户账户类型,当收集到账户类型信息后,会引导用户去办理业务。
详细流程如下图:
在对话中,我们可以抽象出构成整个交互流程的基本元素,并捋清元素间的关联关系,从而将复杂的交互转化为清晰的图解表示,这就是我们设计交互流程图的初衷。在整个图中,用意图和槽位做原料,用节点和连线来组装,生成定制化和个性化的交互流程。
节点介绍
在交互流程设计中,会涉及以下几个节点的使用,具体介绍如下:
根节点
进入交互流程的入口,这个节点本身不会配置判断条件,与根节点连接的判断节点作为进入判断。
节点显示为:
具体内容为:
判断节点
触发交互流程某个环节的节点,当满足该节点包含的条件,就可以触发该节点对应的交互环节。
节点显示为:
具体内容为:
处理节点
处理节点允许开发者编写代码来进行复杂逻辑的处理,进而提供更智能的对话体验。如词槽值校验、查询API获取业务系统结果等。目前,开发者可以在页面上通过代码编辑的形式,编写自己的逻辑代码,并返回相应处理结果。
节点显示为:
具体内容为:
下面这个代码编辑的例子中,我们以航班查询为例,涉及槽位值(原始值、归一化值)引用、结果返回、以及已有槽位值(原始值、归一化值)赋值。
Node.js
exports.handle = (event, context, callback) => {
try {
// 返回正常结果
var slotInfo = JSON.parse(event.Payload.slotInfos);
var departure = slotInfo['FLIGHT_FROM_TO.filghdeparture'];
var arrival = slotInfo['FLIGHT_FROM_TO.filgharrival'];
if (departure == null) {
departure = "北京";
}
var time = slotInfo['FLIGHT_FROM_TO.flight_time'];
if (time == null) {
time = "今天";
}
var response = {
"functionResponse": JSON.stringify(
{
"departure": departure,
"time": time,
"arrival": arrival
}
),
"overrideResponse": JSON.stringify(
{
"FLIGHT_FROM_TO.filghtdeparture.origin":"北京"
}
)
};
callback(null, response);
} catch(e) {
// 将异常错误信息返回
callback(e, null);
}
};
填槽节点
填槽节点是为某个意图统一收集槽位的节点,当满足触发条件的意图缺失槽位,会根据填槽节点的反问配置进行反问,直至收集齐。
根据槽位值进行流程分支:对于需要在交互流程中通过词槽的值进行分支的场景,可以在填槽节点中只选择一个槽位,并在填槽节点后连接多个判断节点,判断具体槽位值后,进行交互流程的分支。
节点显示为:
具体内容为:
交互节点
交互节点主要用来将交互的结果回复给客户端,同时支持等待客户端下一轮输入。交互的内容目前支持文本类型和自定义指令类型,自定义指令类型中支持按照平台的协议格式来返回多种类型的结果,如图片、列表等。
节点显示为:
具体内容为:
怎样使用变量
什么是变量
在整个交互流程中可以使用的字段,我们称之为变量,比如意图的槽位、处理节点返回结果等。变量可以在交互节点、判断节点等被引用,来实现动态的内容回复,或根据变量值来进行具体的业务流程处理。
变量引用
变量 | 引用方式 | 说明 |
---|---|---|
槽位归一化值 | ${intentName.slotName} | 例如,${FLIGHT_FROM_TO.flightdeparture} |
槽位原始值 | ${intentName.slotName.origin} | 例如,${FLIGHT_FROM_TO.flightdeparture.origin} |
处理节点返回值 | ${functionResponse.处理节点名称.字段名} | 例如,${functionResponse.处理多航班查询.time} |
变量路径 | 处理节点判断条件,直接引用变量的path | 判断节点使用处理节点返回值做判断条件时,变量路径可以直接引用,例如:返回值为 {"functionResponse":{"var1":{"var2":"value1"}},"var3":"value2"},引用var2时使用var1.var2,引用var3时使用var3。 |
已有变量赋值
在返回值中添加overrideResponse字段,数据类型是JSON,每个字段的KEY是已有变量名,VALUE是将要赋值的具体值,例如:
"overrideResponse":{
"FLIGHT_FROM_TO.filghtdeparture.origin":"北京"
}