如何在Alexa Skill中实现多轮请求以补全后端必填参数
关于Alexa Skill多轮追问补全必填字段的实现方案
你提到的reprompt+shouldEndSession是实现需求的有效方案,除此之外还有官方更标准化的实现方式,两种方案的具体用法和适用场景如下:
方案1:手动控制会话(即你查询到的基础方案)
这是自定义程度最高的多轮交互实现方式,操作逻辑如下:
- 后端接收到用户的技能请求后,先校验当前意图对应的所有必填参数(槽位)是否齐全,比如用户查询温度但缺失
location槽位时,直接进入追问流程 - 构造响应报文时完成三个配置:
outputSpeech字段填写你要向用户发起的追问内容,比如*"请问你想查询哪个城市的温度?"*reprompt字段填写用户长时间未回应时的二次提示内容,避免会话直接关闭,比如*"你可以告知我需要查询的城市名称,我会为你返回对应的温度信息"*- 把
shouldEndSession字段明确设置为false,保持当前会话处于激活状态,用户后续的回复会直接发送到你的技能后端
- 收到用户的回复后,将用户提供的内容填充到对应槽位,再次校验所有必填槽位是否齐全,全部收集完成后再执行业务逻辑,返回最终结果即可。
方案2:官方槽位委托功能(更标准化的轻量方案)
如果你的追问逻辑没有特殊的自定义规则,官方提供了更省心的槽位委托方案,不需要手动控制会话状态,Alexa会自动完成必填槽位的收集:
- 在Alexa开发者控制台的意图配置页,将该意图需要的所有槽位标记为必填
- 为每个必填槽位预设对应的追问话术,比如位置槽的追问话术直接填写*"请问你想查询哪个城市的温度?"*
- 后端接收到请求后,先判断
dialogState字段的状态,如果不是COMPLETED,直接返回包含Dialog.Delegate指令的响应即可,Alexa会自动按照你预设的话术依次追问用户,直到所有必填槽位全部收集完成,才会把携带完整参数的请求发送到你的后端。
两种方案的选择建议
- 如果你的业务有复杂的槽位依赖逻辑,比如设置提醒时先要判断提醒类型,再追问对应的时间/位置参数,选择手动控制的方案灵活性更高
- 如果只是普通的无依赖必填槽收集,选择槽位委托方案可以减少代码量,同时交互逻辑更符合Alexa官方设计规范。
内容的提问来源于stack exchange,提问作者Braganca
相关产品推荐
相关产品推荐

