我如何告诉Alexa提示用户输入信息

问题描述 投票:0回答:1

我需要告诉alexa提示用户输入,然后将该输入存储在要在我的代码中使用的变量中。

InvocationName:发送邮件

Alexa:告诉我邮件主题

用户:测试电子邮件

Alexa:好的,请告诉我消息正文。

用户:这只是一个示例测试

Alexa,好的,告诉我接收者的电子邮件

用户:[email protected]

下面是我的意图模式:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "send mail",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.FallbackIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "SendMailIntent",
                    "slots": [
                        {
                            "name": "ReceiverEmail",
                            "type": "AMAZON.SearchQuery"
                        }
                    ],
                    "samples": [
                        "mail",
                        "send mail"
                    ]
                }
            ],
            "types": []
        },
        "dialog": {
            "intents": [
                {
                    "name": "SendMailIntent",
                    "confirmationRequired": false,
                    "prompts": {},
                    "slots": [
                        {
                            "name": "ReceiverEmail",
                            "type": "AMAZON.SearchQuery",
                            "confirmationRequired": false,
                            "elicitationRequired": true,
                            "prompts": {
                                "elicitation": "Elicit.Slot.838288524310.965699312002"
                            }
                        }
                    ]
                }
            ],
            "delegationStrategy": "ALWAYS"
        },
        "prompts": [
            {
                "id": "Elicit.Slot.838288524310.965699312002",
                "variations": [
                    {
                        "type": "PlainText",
                        "value": "Enter subject"
                    }
                ]
            }
        ]
    }
}


and below is the code I have been able to come up with:

// sets up dependencies
const Alexa = require('ask-sdk-core');
const i18n = require('i18next');
const languageStrings = require('./languageStrings');


const SendMailHandler = {
  canHandle(handlerInput) {
   const request = handlerInput.requestEnvelope.request;
   // var code = this.event.request.intent.slots.code.value;
    //console.log(code)

    // checks request type
    return request.type === 'LaunchRequest'
      || (request.type === 'IntentRequest'
        && request.intent.name === 'SendMailIntent');
  },
  handle(handlerInput) {
    const speechText = 'Ok. Tell me the mail subject'

    const response =  handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(speechText) // <--- Here is our reprompt
      .getResponse();
      console.log(response)
      return response;
  },
};

// Omitted default Alexa handlers
const skillBuilder = Alexa.SkillBuilders.custom();

exports.handler = skillBuilder
  .addRequestHandlers(
   SendMailHandler,
  )
  .lambda();
aws-lambda alexa alexa-skills-kit alexa-skill alexa-slot
1个回答
0
投票

您应该在两个插槽上使用dialog management

正如我目前所看到的,您只能通过对话框管理收集一个插槽(ReceiverEmail)。但是,您还需要为要发送的文本创建一个插槽。稍后在代码中,您需要检查对话框是否处于COMPLETED状态。

请参见示例https://github.com/alexa/skill-sample-nodejs-petmatch/或此视频:https://www.youtube.com/watch?v=u99WMljnQXI

© www.soinside.com 2019 - 2024. All rights reserved.