How can I make Alexa prompt me (e.g. “You want weather for which city again?”) if I missed a parameter (slot i.e. city_name) in my utterance?
我正在制作一项技巧,告诉我一个城市的天气 . 我有话语并且工作正常,但是当我没有定义城市名称(city_name也是我意图中唯一的插槽)时,它会直接停止意图并给出我的信息“Alexa无法帮助你” .
在我的插槽(city_name)中,我甚至检查过“这个插槽是否需要满足意图?”并填写Alexa提示和用户话语,但仍然无法正常工作 .
2 回答
使用alexa dialogs . Dialog通过向用户重新提供他错过的插槽值来自动填充所有必需的插槽 . 对话框有3个状态,STARTED,IN_PROGRESS,COMPLETED . 只有填写了所有必需的插槽值,才能完成对话状态 . 观看教程here
您可以使用不同的Dialog interface指令向用户询问完成其请求所需的信息 . 当用户与您的技能进行交互时,您将使用映射的意图和填充(或未填充)的插槽 . 即使您使用对话框模型并填写了每个插槽的所有话语,您也必须使用适当的指令进行回复才能继续 .
您可以通过三种方式处理对话模型 .
1. Delegating to Alexa
您可以使用
Dialog.Delegate
指令让Alexa确定对话框中的下一步,并使用您在对话框模型中定义的提示来引出槽值,确认槽值或确认整个意图 .如果您有未填充的插槽只返回
delegate
指令,Alexa将使用交互模型中定义的提示来填充该插槽 . 只要dialogState
属性不是COMPLETE
,您就可以继续委托给Alexa .对话完成后,传入
IntentRequest
的dialogState
为COMPLETED
. 所有必需的信息现在都可以在intent的插槽值中找到 .Note: 使用
Dialog.Delegate
指令,您无法从代码中发送outputSpeech
或reprompt
. 而是将使用在交互模型中定义的那些 . 只有在使用Dialog.Delegate
时才能使用COMPLETED
状态 .2. Control the Dialog
在每次谈话中,您都可以控制并询问您需要什么,而不是将其委托给Alexa . 这非常有用,尤其是当您希望插槽填充特定订单或者您想要确定插槽时,或者插槽的"mandate"属性是动态的等等 .
您可以使用
Dialog.ElicitSlot
指令来请求特定的插槽,Dialog.ConfirmSlot
来确认特定的插槽,使用Dialog.ConfirmIntent
来确认意图本身 .3. Combining both
当您收到意向请求时,您可以根据需要返回
delegate
指令或任何其他指令 . 即使您委托,您也可以随时接管对话而不是继续委托给Alexa .更多关于不同的指令here
Sample Interactions:
1.使用
delegate
指令here2.使用
ElicitSlot
指令here3.使用
ConfirmSlot
指令here4.使用
ConfirmIntent
指令here