如何在 Amazon Alexa SDK 中 return Dialog.Delegate?

How to return Dialog.Delegate in Amazon Alexa SDK?

我的 Alexa 应用程序的一些 Intent 需要特定的插槽。 Alexa 技能构建器让这一切变得简单。我可以根据需要标记一个槽,并设置 Alexa 应该询问什么,以便用户提供槽的信息。问题是,作为开发人员,您必须使用 lambda 告诉 Alexa 您希望 Alexa 处理插槽填充。

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

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

上面写着

If the dialog is IN_PROGRESS, return Dialog.Delegate with no updatedIntent.

我该怎么做?在我的 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 {

前几天我 运行 遇到了这个问题,我得到了基于另一个 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;
    }