如何将Dialog.Delegate指令返回给Alexa Skill模型?

时间:2018-08-07 09:44:23

标签: node.js aws-lambda alexa alexa-skills-kit alexa-slot

我想用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

谢谢。

3 个答案:

答案 0 :(得分:10)

使用Dialog.Delegate指令,您无法从代码中发送outputSpeechreprompt。而是将使用交互模型中定义的那些。

  

不要在Dialog.Directive中包含outputSpeech或重新提示。   Alexa使用对话框模型中定义的提示来询问用户   广告位值和确认。

这意味着您不能delegate并提供自己的响应,但是可以使用任何其他Dialog指令来提供您的outputSpeechreprompt

例如:Dialog.ElicitSlotDialog.ConfirmSlotDialog.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");
}