Alexa Skills - как вернуть намерение со значениями слотов из другого намерения? - PullRequest
0 голосов
/ 03 февраля 2019

Как вернуть намерение со значениями слотов из другого намерения?

Я хочу вызвать намерение, возвращая его значение слота в другом намерении.

Вот пример моего JSONfile:

{
  "interactionModel": {
    "languageModel": {
      "invocationName": "movie antakshari",
      "intents": [
        {
          "name": "SchoolIntent",
          "slots": [
            {
              "name": "Subject",
              "type": "subjects"
            }
          ],
          "samples": ["{subjects}"]
        },
        {
          "name": "teachersIntent",
          "slots": [],
          "samples": ["teachers"]
        },
      ],
      "types": [
        {
          "name": "subjects",
          "values": [
            {
              "name": {"value": "maths"}
            },
            {
              "name": {"value": "english"}
            }
          ]
        }
      ]
    }
  }
}

Вот мой файл index.js:

const teacherIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'teacherIntent';
    },

    handle(handlerInput) {
        if (some condition) {
            // Here I want to return the schoolIntentHandler with a slot value maths
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вызов намерения определяется высказыванием пользователя.Пользователь должен что-то сказать, чтобы служба Alexa могла сопоставить то, что пользователь сказал с намерением в вашей модели.

В вашем случае вам нужно заставить пользователя вызывать schoolIntent, направляя его правильно.т. е. Вы должны вернуть отсюда речь, которая заставит пользователя произнести что-то, что соответствует schoolIntent

handle(handlerInput) {
    if (some condition) {
        // Here I want to return the schoolIntentHandler with a slot value maths
        //
        // You need to return a speech from here that will make user to utter something that matches schoolIntent.
    }
}
0 голосов
/ 04 февраля 2019

Вы можете достичь этого с помощью ElicitIntent .Но когда вы обнаружите свое намерение, ваши слоты для конкретного намерения станут чистыми (сброс на ноль)Чтобы преодолеть это, прежде чем вызывать намерение, поместите значение вашего слота в атрибут сеанса уникальным способом, чтобы идентифицировать его как слот, такой как SLOT_key .И когда он входит в желаемое намерение, получите значение слота из атрибута сеанса и используйте его для своей логики.

...