Как мне сообщить Alexa, чтобы предложить пользователю для ввода - PullRequest
0 голосов
/ 20 февраля 2020

Мне нужно попросить Алексу запросить ввод данных у пользователя, а затем сохранить этот ввод в переменной, которая будет использоваться в моем коде.

InvocationName: отправить письмо

Alexa: Скажите мне тему письма

Пользователь: тестовое письмо

Алекса: Хорошо, скажите мне тело сообщения.

Пользователь: Это всего лишь пример теста

Алекса, хорошо, скажите мне получатель электронной почты

Пользователь: test@gmail.com

Ниже приведена схема моего намерения:

{
    "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();

1 Ответ

0 голосов
/ 20 февраля 2020

Вы должны использовать диалоговое управление с 2 слотами.

Как я сейчас вижу, вы можете собрать только один слот (ReceiverEmail) с управлением диалогами. Но вам также нужно создать слот для текста, который вы хотите отправить. Позже в вашем коде вам нужно проверить, находится ли диалог в состоянии ЗАВЕРШЕНО.

См. Пример https://github.com/alexa/skill-sample-nodejs-petmatch/ или это видео: https://www.youtube.com/watch?v=u99WMljnQXI

...