我想用Alexa Skill模型创建一个简单的多轮对话。我的意图由3个插槽组成,每个插槽都必须满足该意图。我提示每个时段并定义了所有需要的语音。
现在,我想使用Lambda函数处理请求。这是我针对特定Intent的功能:
function getData(intentRequest, session, callback) {
if (intentRequest.dialogState != "COMPLETED"){
// return a Dialog.Delegate directive with no updatedIntent property.
} else {
// do my thing
}
}
那么我将如何继续使用Alexa文档中提到的Dialog.Delegate
指令来建立响应?
https://developer.amazon.com/docs/custom-skills/dialog-interface-reference.html#scenario-delegate
谢谢。
答案 0 :(得分:10)
使用Dialog.Delegate
指令,您无法从代码中发送outputSpeech
或reprompt
。而是将使用交互模型中定义的那些。
不要在Dialog.Directive中包含outputSpeech或重新提示。 Alexa使用对话框模型中定义的提示来询问用户 广告位值和确认。
这意味着您不能delegate
并提供自己的响应,但是可以使用任何其他Dialog
指令来提供您的outputSpeech
和reprompt
。
例如:Dialog.ElicitSlot
,Dialog.ConfirmSlot
和Dialog.ConfirmIntent
。
您随时可以接管对话框,而不必继续委派给Alexa。
...
const updatedIntent = handlerInput.requestEnvelope.request.intent;
if (intentRequest.dialogState != "COMPLETED"){
return handlerInput.responseBuilder
.addDelegateDirective(updatedIntent)
.getResponse();
} else {
// Once dialoState is completed, do your thing.
return handlerInput.responseBuilder
.speak(speechOutput)
.reprompt(reprompt)
.getResponse();
}
...
updatedIntent
中的addDelegateDirective()
参数是可选的。
这是一个意图对象,代表发送给您的技能的意图。您可以使用此属性集,也可以根据需要更改插槽值和确认状态。
有关对话框指令here
的更多信息答案 1 :(得分:5)
在nodejs中,您可以使用
if (this.event.request.dialogState != 'COMPLETED'){
//your logic
this.emit(':delegate');
} else {
this.response.speak(message);
this.emit(':responseReady');
}
答案 2 :(得分:4)
在nodeJS中,我们可以检查dialogState并采取相应的措施。
Properties prop;
@BeforeTest
public void beforeTest() throws IOException {
File src = new File("./resources/config.property");
FileInputStream fis = new FileInputStream(src);
prop = new Properties();
prop.load(fis);
String propValue = prop.getProperty("propKey");
}