【问题标题】: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>
    

    下面是SpeechletonIntent 方法中的一些示例用法:

            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并将其分配给updatedIntentproperty
    3. shoulEndSession 标志设置为 false,否则 Alexa 将终止会话

    在 SkillBuilder 中选择您的 Intent,它需要至少有一个标记为必需的插槽。配置话语和提示。您也可以在提示中使用 {slotNames}。

    -萨尔

    【讨论】:

      【解决方案2】:

      我想你可能想看看https://github.com/amzn/alexa-skills-kit-java/pull/45 上最新更新的工作示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多