我的Alexa应用程序的一些意图需要某些插槽。 Alexa技能构建器使这一切变得简单。我可以根据需要标记一个插槽,并设置Alexa应该询问的内容,以便用户提供插槽的信息。问题在于,作为一名开发人员,你必须告诉Alexa你的lambda,你希望Alexa处理插槽填充。
阅读文档,我接触到这一部分:
说明
如果对话框是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 {
答案 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;
}