【问题标题】:How to use Dialog Directives with Alexa's java SDK如何在 Alexa 的 java SDK 中使用对话指令
【发布时间】:2017-05-02 11:14:23
【问题描述】:
我正在尝试使用 java 技能包创建我自己的 Alexa 技能,并且我想使用对话界面。我已经使用 beta 中的技能构建器创建了我的对话模型,但现在我不明白我需要通过我的网络服务返回什么才能委派我的对话。
我应该使用哪个类向 Alexa 发送命令以处理对话中的下一个回合?
此外,我在 IntentRequest 类中没有 dialogState 属性...
【问题讨论】:
标签:
java
alexa-skills-kit
alexa-skill
【解决方案1】:
首先dialogState 属性在IntentRequest 中。我使用以下依赖项(maven)的 1.3.1 版本。要获取值,请使用yourIntentRequestObject.getDialogState()。
<dependency>
<groupId>com.amazon.alexa</groupId>
<artifactId>alexa-skills-kit</artifactId>
<version>1.3.1</version>
</dependency>
下面是Speechlet 在onIntent 方法中的一些示例用法:
if ("DoSomethingSpecialIntent".equals(intentName))
{
// If the IntentRequest dialog state is STARTED
// This is where you can pre-fill slot values with defaults
if (dialogueState == IntentRequest.DialogState.STARTED)
{
// 1.
DialogIntent dialogIntent = new DialogIntent(intent);
// 2.
DelegateDirective dd = new DelegateDirective();
dd.setUpdatedIntent(dialogIntent);
List<Directive> directiveList = new ArrayList<Directive>();
directiveList.add(dd);
SpeechletResponse speechletResp = new SpeechletResponse();
speechletResp.setDirectives(directiveList);
// 3.
speechletResp.setShouldEndSession(false);
return speechletResp;
}
else if (dialogueState == IntentRequest.DialogState.COMPLETED)
{
String sampleSlotValue = intent.getSlot("sampleSlotName").getValue();
String speechText = "found " + sampleSlotValue;
// Create the Simple card content.
SimpleCard card = new SimpleCard();
card.setTitle("HelloWorld");
card.setContent(speechText);
// Create the plain text output.
PlainTextOutputSpeech speech = new PlainTextOutputSpeech();
speech.setText(speechText);
return SpeechletResponse.newTellResponse(speech, card);
}
else
{
// This is executed when the dialog is in state e.g. IN_PROGESS. If there is only one slot this shouldn't be called
DelegateDirective dd = new DelegateDirective();
List<Directive> directiveList = new ArrayList<Directive>();
directiveList.add(dd);
SpeechletResponse speechletResp = new SpeechletResponse();
speechletResp.setDirectives(directiveList);
speechletResp.setShouldEndSession(false);
return speechletResp;
}
}
- 创建一个新的
DialogIntent
- 创建一个
DelegateDirective并将其分配给updatedIntentproperty
- 将
shoulEndSession 标志设置为 false,否则 Alexa 将终止会话
在 SkillBuilder 中选择您的 Intent,它需要至少有一个标记为必需的插槽。配置话语和提示。您也可以在提示中使用 {slotNames}。
-萨尔