我正在尝试使用Java技能工具包创建自己的Alexa技能,并且我想使用对话框界面。我已经在Beta版中使用技能生成器创建了Dialog模型,但是现在我不明白为了委托对话框而需要通过Web服务返回的内容。
I'm trying to create my own Alexa's skill with the java skill kit, and I would like to use the Dialog Interface. I have created my Dialog model with the skill builder in beta, but now I don't understand what I need to return via my webservice in order to delegate my dialog.
我应该使用哪个类向Alexa发送命令以处理对话框中的下一轮? 而且,我在IntentRequest类中没有dialogState属性...
Which class should I use to send Alexa a command to handle the next turn in the dialog ? Moreover, I don't have the dialogState property in the IntentRequest class...
推荐答案首先 dialogState 属性位于 IntentRequest 中。我使用以下依赖项(maven)的1.3.1版本。要获取值,请使用 yourIntentRequestObject.getDialogState()。
First of all the dialogState property is in the IntentRequest. I use version 1.3.1 of the following dependency (maven). To get the value use yourIntentRequestObject.getDialogState().
<dependency> <groupId>com.amazon.alexa</groupId> <artifactId>alexa-skills-kit</artifactId> <version>1.3.1</version> </dependency>在下面,您可以看到 Speechlet 在 onIntent 方法中:
Below you see some sample usage from a Speechlet in the onIntent method:
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; } }
在SkillBuilder中选择您的Intent,它需要至少有一个标记为的插槽按要求。配置语音和提示。您也可以在提示中使用{slotNames}。
Within the SkillBuilder select your Intent, it needs to have at least one slot which is marked as required. Configure utterances and prompts. You can also use {slotNames} within prompts.
-Sal
更多推荐
如何在Alexa的Java SDK中使用Dialog Directives
发布评论