如何在Alexa的Java SDK中使用Dialog Directives [英] How to use Dialog Directives with Alexa's java SDK

查看:94
本文介绍了如何在Alexa的Java SDK中使用Dialog Directives的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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;
            }
        }




  1. 创建新的 DialogIntent

  2. 创建一个 DelegateDirective 并将其分配给 updatedIntent 属性

  3. shoulEndSession 标志设置为 false ,否则Alexa终止会话

  1. Create a new DialogIntent
  2. Create a DelegateDirectiveand assign it to the updatedIntentproperty
  3. Set the shoulEndSession flag to false, otherwise Alexa terminates the session

在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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆