需求分析 根据上述流程,我们可以分析出整个流程需要如下资源和配置: 表1 需求分析 步骤 资源 图元 节点属性设置 备注 开始 - - - 初始化语言 业务接口:初始化语言 变量名:GLOBAL.language 变量值:"zh_CN" 实际应用场景可通过使用真实的接口调用确认语言,本节的机器人配置演示使用该图元赋值,无需选择调用接口,直接添加缓存变量名,将其赋值来初始化语言。 例如英文对应的响应中属性名为: "en_US" 欢迎语 - 回复方式:回复文本 回复来源:回复变量 (
TTS 会根据变量返回的值动态播放语音) 回复变量:FLOW.welcome 回复模式:支持播放后再识别 添加流程变量,例如: 变量名称:welcome 数据类型:字符型 缺省值:欢迎使用自助挂号系统 获取客户回答 业务接口:缓存对话交互结果 变量名:FLOW.ask 变量值:IVRREQUEST.input 无需选择调用接口,直接添加变量。 添加流程变量,例如: 变量名称:ask 数据类型:字符型 缺省值:预约${FLOW.dateSlot}的${FLOW.timeSlot}的{FLOW.docSlot}的${FLOW.roomSlot}。 语义识别(含意图是否匹配) 意图模板:挂号 语义识别内容:FLOW.ask 设置变量: 获取意图匹配到的科室 变量名:FLOW.roomSlot 变量值:TOC.ChatBotroom 获取意图匹配到的医生 变量名:FLOW.docSlot 变量值:TOC.ChatBotdoctor 获取意图匹配到的日期 变量名:FLOW.dateSlot 变量值:TOC.ChatBotdate 获取意图匹配到的时间点 变量名:FLOW.timeSlot 变量值:TOC.ChatBottime 判断条件列表 匹配到了配置的挂号意图 条件名:finish 条件表达式:TOC.ChatBotIntentCode=='finish' 匹配到了配置的挂号意图的必选科室槽位的命令字 条件名:room 条件表达式:TOC.ChatBotIntentCode=='room' 匹配到了配置的挂号意图的必选医生槽位的命令字 条件名:doctor 条件表达式:TOC.ChatBotIntentCode=='doctor' 添加流程变量,例如: 变量名称:roomSlot 数据类型:字符型 变量名称:docSlot 数据类型:字符型 变量名称:dateSlot 数据类型:字符型 变量名称:timeSlot 数据类型:字符型 获取客户需要预约的科室 (匹配到条件名:room) 业务接口:调用查询科室的接口 变量名:FLOW.answer 变量值:FLOW.room + TOC.ChatBotRespContent 无需选择调用接口,直接添加变量。 添加流程变量,例如: 变量名称:answer 数据类型:字符型 变量名称:room 数据类型:字符型 缺省值:当前可以选择的科室为内科和外科 - 回复方式:回复文本 回复来源:回复变量 (TTS会根据变量返回的值动态播放语音) 回复变量:FLOW.answer 回复模式:支持播放后再识别 - 获取客户需要预约的医生 (匹配到条件名:doctor) 业务接口:调用查询对应科室医生的接口 变量名:FLOW.answer 变量值:FLOW.doctor + TOC.ChatBotRespContent 无需选择调用接口,直接添加变量。 添加流程变量,例如: 变量名称:answer 数据类型:字符型 变量名称:doctor 数据类型:字符型 缺省值:当前科室值班医生有刘医生和李医生 - 回复方式:回复文本 回复来源:回复变量 (TTS会根据变量返回的值动态播放语音) 回复变量:FLOW.answer 回复模式:支持播放后再识别 - 告知客户已预约的挂号信息 (匹配到条件名:finish) - 回复方式:回复文本 回复来源:回复变量 (TTS会根据变量返回的值动态播放语音) 回复变量:TOC.ChatBotRespContent 回复模式:只播放 - 默认应答 (未匹配到任何条件名) - 回复方式:回复文本 回复来源:回复变量 (TTS会根据变量返回的值动态播放语音) 回复变量:TOC.ChatBotRespContent 回复模式:只播放 说明: 连线上不匹配任何条件名,即为默认分支。 询问是否确认挂号信息 - 回复方式:回复文本 回复来源:回复变量 (TTS会根据变量返回的值动态播放语音) 回复变量:FLOW.check 回复模式:支持识别打断 添加流程变量,例如: 变量名称:check 数据类型:字符型 缺省值:确定上面的信息吗? 语义识别(含意图是否匹配) 意图模板:确认 判断条件列表 匹配到了确认的意图 条件名:yes 条件表达式:TOC.ChatBotconfirm=='是' 匹配到了不确认的意图 条件名:no 条件表达式:TOC.ChatBotconfirm=='否' 匹配到了日期错误 条件名:part 条件表达式:TOC.ChatBotconfirm=='日期错误' - 使用缓存变量缓存数据再进行语义识别确认客户挂号信息 (匹配到条件名:no) - 变量名:FLOW.ask 变量值:'预约挂号' 无需选择调用接口,直接添加变量。 再次确认客户是否要修改日期 (匹配到条件名:part) 回复模板:是否要修改日期 回复方式:回复文本 回复来源:回复模板 (TTS会根据变量返回的值动态播放语音) 回复模板:redate 回复模式:支持识别打断 需添加回复模板 意图模板:确认 判断条件列表 匹配到了确认不修改日期的意图 条件名:yes 条件表达式:TOC.ChatBotconfirm=='是' 匹配到了确认修改日期的意图 条件名:no 条件表达式:TOC.ChatBotconfirm=='否' - 询问修改日期,再进行语义识别确认挂号信息 (匹配到条件名:no) 变量名:FLOW.dateSlot 变量值:'' 变量名:FLOW.answer 变量值:'请问你要改为哪一天?' 无需选择调用接口,直接添加变量。 回复方式:回复文本 回复来源:回复变量 (TTS会根据变量返回的值动态播放语音) 回复变量:FLOW.answer 回复模式:支持识别打断 - 变量名:FLOW.dateSlot 变量值:IVRREQUEST.input 变量名:FLOW.ask 变量值:'预约挂号'+FLOW.dateSlot+'的'+FLOW.timeSlot +FLOW.docSlot +'的' +FLOW.roomSlot 无需选择调用接口,直接添加变量。 告知客户挂号信息并表示感谢 (匹配到条件名:yes) - 回复方式:回复文本 回复来源:回复变量 (TTS会根据变量返回的值动态播放语音) 回复变量:FLOW.thanks 回复模式:只播放 添加流程变量,例如: 变量名称:thanks 数据类型:字符型 缺省值:已经预订成功,谢谢您的使用,再见。 结束 - - - 为确保容错性,您还需要配置一个未知意图,用于识别意图匹配不到的情况。 其中涉及到意图的部分,还需要继续细化分析如下信息,此处以挂号这个意图为例介绍,其他方法类似。 客户回答预约挂号的时候有多种说法 (语料) 我想看个医生 挂号 预约挂号 我要挂一个明天下午16:00点李医生的内科 您需要尽量多的考虑回答场景,才能确保意图匹配的精确。 客户回答的信息中哪个是我们需要的信息?(槽位&实体) 例如客户回答挂号16.00点,那么16.00点是我们需要获取的槽位信息,您需要在意图中添加该槽位信息,而槽位信息需要有对应的实体关联,因此还需要确认实体配置中是否有类似的实体。本例中可以使用系统实体@system.time。 如果客户回答挂号李医生,那么李医生是我们需要获取的槽位信息,您需要在意图中添加该槽位信息,而槽位信息需要有对应的实体关联,系统实体中没有这个实体,那我们需手动添加医生这个实体。 意图匹配的命令字,即语义识别图元所需的TOC.ChatBotIntentCode的值。请全局保持唯一(响应) 由于意图中的响应是可以设置分支条件的,可以直接添加分支,回复不同的TOC.ChatBotIntentCode。