如何在 Amazon Alexa SDK 中 return Dialog.Delegate?
How to return Dialog.Delegate in Amazon Alexa SDK?
我的 Alexa 应用程序的一些 Intent 需要特定的插槽。 Alexa 技能构建器让这一切变得简单。我可以根据需要标记一个槽,并设置 Alexa 应该询问什么,以便用户提供槽的信息。问题是,作为开发人员,您必须使用 lambda 告诉 Alexa 您希望 Alexa 处理插槽填充。
阅读文档,我到了这一部分:
上面写着
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;
}
我的 Alexa 应用程序的一些 Intent 需要特定的插槽。 Alexa 技能构建器让这一切变得简单。我可以根据需要标记一个槽,并设置 Alexa 应该询问什么,以便用户提供槽的信息。问题是,作为开发人员,您必须使用 lambda 告诉 Alexa 您希望 Alexa 处理插槽填充。
阅读文档,我到了这一部分:
上面写着
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;
}