如何在Amazon Alexa SDK中返回Dialog.Delegate?

时间:2017-08-24 10:07:03

标签: java amazon alexa-skills-kit alexa-skill amazon-echo

我的Alexa应用程序的一些意图需要某些插槽。 Alexa技能构建器使这一切变得简单。我可以根据需要标记一个插槽,并设置Alexa应该询问的内容,以便用户提供插槽的信息。问题在于,作为一名开发人员,你必须告诉Alexa你的lambda,你希望Alexa处理插槽填充。

阅读文档,我接触到这一部分:

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/dialog-interface-reference#details

说明

  

如果对话框是IN_PROGRESS,则返回没有updatedIntent的Dialog.Delegate。

我该怎么做?在我的lambda中,我有

  @Override
  public SpeechletResponse onIntent(final IntentRequest request, final Session session)
      throws SpeechletException {

    Intent intent = request.getIntent();
    String intentName = (intent != null) ? intent.getName() : null;

    if ("AddTwoNumbers".equals(intentName)) {
      if (!request.getDialogState().equals("COMPLETED")) {
          return new DelegateDirective();
      } else {
       handleAdditionIntent();
      }
    } else { // handle other intents}
    }

他们的代码示例似乎也没有用。

} else if (intentRequest.dialogState != "COMPLETED"){
    // return a Dialog.Delegate directive with no updatedIntent property.
} else {

1 个答案:

答案 0 :(得分:1)

前几天我遇到了这个问题,我根据另一个post得到了解决方案。以下是Alexa Skill Kit版本1.5.0中适合我的略微修改版本。希望这可以帮助。如果要填充多个插槽,则可能需要以不同方式处理IN_PROGRESS状态。此处的代码仅适用于1个插槽。

     if (speechletRequestEnvelope.getRequest().getDialogState() != IntentRequest.DialogState.COMPLETED)
        // 1. Create DialogIntent based on your original intent
        DialogIntent dialogIntent = new DialogIntent(speechletRequestEnvelope.getRequest().getIntent());

        // 2. Create Directive
        DelegateDirective dd = new DelegateDirective();
        dd.setUpdatedIntent(dialogIntent);

        List<Directive> directiveList = new ArrayList<>();
        directiveList.add(dd);

        SpeechletResponse speechletResp = new SpeechletResponse();
        speechletResp.setDirectives(directiveList);
        // 3. return the response.
        speechletResp.setNullableShouldEndSession(false);
        return speechletResp;
    }