Описание тега alexa-slot
Источник: https://developer.amazon.com/docs/custom-skills/slot-type-reference.html.
Набор Alexa Skills поддерживает слоты, которые в основном представляют собой контейнеры, которые помогают получать определенные данные, которые пользователь предоставил в любом формате для навыка. Эти входные данные полезны для разработчика, чтобы вернуть необходимый ответ.
Например: представьте, что вы создаете навык, который сообщает вам день определенной даты. Точнее, вы даете Alexa дату, и она возвращает вам день недели.
Слоты были бы полезны для получения входных данных Date
который указал пользователь, и, используя некоторую логику, мы можем определить день для этой даты.
Рассмотрим этот разговор:
Пользователь: "Дни запуска Alexa в нашей жизни"
Алекса: "Добро пожаловать в дни нашей жизни". // "дни нашей жизни" - это имя вызова этого гипотетического навыка.
Пользователь: "Какой был день {1 мая 1996 г.}" // {1 мая 1996 г.} - это значение, полученное слотом
{Date}
Алекса: "Это была среда".
Тип слотов
Набор Alexa Skills Kit поддерживает несколько типов слотов, которые определяют, как данные в слоте распознаются и обрабатываются. Есть встроенный слот ( список типов слотов), а также разработчик может указать свой собственный слот. При создании своих пользовательских слотов они должны указать некоторые значения слотов в разделе сборки конструктора навыков Alexa. Когда навык Alexa обнаруживает такие значения, он будет знать, что это значения слота пользовательского слота сборки.
Поскольку навык может быть опубликован на нескольких языках (см. Языки, поддерживаемые Alexa), встроенные слоты также поддерживаются на нескольких языках.
Определение слотов
Слоты можно определить в разделе " Сборка " нового конструктора навыков Alexa или с помощью редактора JSON для редактирования схемы намерений.
Так слоты Query
а также CityList
определены в схеме намерений.
{
"intents": [
{
"name": "SearchIntent",
"slots": [
{
"name": "Query",
"type": "AMAZON.SearchQuery"
},
{
"name": "CityList",
"type": "AMAZON.US_CITY"
}
],
"samples": [
"search for {Query} near me",
"find out {Query}",
"search for {Query}",
"give me details about {CityList}"
]
}
]
}
Синонимы к слову значения слота
Значения слотов, определенные в конструкторе навыков Alexa, также могут иметь синонимы. Например, если вы работаете с навыком, который запрашивает город, в котором живет пользователь, то такие места, как Мумбаи и Банглор, могут иметь синонимы Бомбей и Бангалор соответственно.
https://stackru.com/images/3d2b89428139883bdce8480b29fb8fb34932ce5e.png
Заполнение слота
Для заполнения слотов есть два случая, которые разработчик должен понимать.
- Значение слота требуется всегда.
- Иногда требуется значение слота, т.е. умение будет работать, если этот слот отсутствует.
Если значение слота требуется всегда, тогда Директива Dialog.Delegate
может быть использовано. Чтобы использовать эту директиву, в конструкторе навыков Alexa должны быть определены подсказки (то есть, что Alexa скажет, чтобы запросить значение этого слота) и высказывания (то есть, что пользователь будет говорить в ответ на эти подсказки).
Как это: Здесь подсказки и высказывания даны для пользовательского слота CITY
который требуется намерением GetMoviesNowShowing
. (Это встроенный слот типаAMAZON.City
)
https://stackru.com/images/35de4ef1ce9a64b54b302cf548460469b809da6a.png
И если слот нужен не всегда, то Директива Dialog.ElicitSlot
может быть использовано. Для этой директивы не требуется никаких подсказок и высказываний, разработчик должен предоставить явныеoutputSpeech
, который используется Alexa как подсказка для заполнения слота.
Доступ к значениям слотов
Доступ к значениям слотов можно получить в лямбда-функции. Когда вызывается намерение, лямбда-функции передается ввод JSON. Разработчик может получить доступ к этому входу JSON, чтобы получить введенное пользователем значение слота. Это выглядит примерно так:
"intent": {
"name": "GetAntonymsIntent",
"confirmationStatus": "NONE",
"slots": {
"LANGUAGE": {
"name": "LANGUAGE",
"confirmationStatus": "NONE",
"value" : "english"
},
"WORD": {
"name": "WORD",
"value": "ace",
"resolutions": {
"resolutionsPerAuthority": [
{
"authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.c4a5d570-8455-4496-825b-07864b4acfec.WORD",
"status": {
"code": "ER_SUCCESS_MATCH"
},
"values": [
{
"value": {
"name": "ace",
"id": "360e2ece07507675dced80ba867d6dcd"
}
}
]
}
]
},
"confirmationStatus": "NONE"
}
}
}
Это всего лишь часть ввода JSON. Это не полный ввод. Полный ввод / событие выглядит как это.
Здесь слоты LANGUAGE
а также WORD
имеют значения english и ace соответственно.
Слотов может быть столько, сколько пожелает разработчик, но их большое количество увеличивает сложность навыка.
Вопросы, относящиеся к любой теме, обсужденной выше, должны иметь этот тег вместе с такими тегами, как Alexa
а также Alexa-skills-kit
.