Контейнер, используемый Alexa, способный хранить полезную информацию, предоставляемую пользователем, такую ​​как дата, время, город, страна, вымышленный персонаж, автор, фильмы и т. Д.

Источник : https://developer.amazon.com/docs/custom-skills/slot-type-reference.html#list-slot-types

Набор Alexa Skills поддерживает слот , которые в основном являются контейнерами, которые полезны для получения конкретных данных, которые пользователь предоставил навыку в любом формате. Эти входные данные полезны для разработчика, чтобы вернуть необходимый ответ.

Например : представьте, что вы делаете навык, который сообщает вам день определенной даты. Точнее, вы даете Алексе дату, и она возвращает вам день недели.

Слоты были бы полезны для получения входных данных Date, которые указал пользователь, и используя некоторую логику, мы можем вычислить день для этой даты.

Рассмотрим этот разговор:

Пользователь: «Alexa запускает дни нашей жизни»

Alexa: «Добро пожаловать в дни нашей жизни» . // «дни нашей жизни» - это название этого гипотетического навыка.

Пользователь: «Какой был день {1 мая 1996 г.}» // {1 мая 1996 г.} - это значение, полученное в слоте {Date}

Alexa: «Это была среда» .

Тип слотов

Набор навыков Alexa поддерживает несколько типов слотов, которые определяют, как данные в слоте распознаются и обрабатываются. Существуют встроенные слоты (, список типов слотов ), а также разработчик может указать свой собственный слот. При создании своих пользовательских слотов они должны указать некоторые значения слотов в разделе сборки построителя навыков Alexa. Когда навык Alexa сталкивается с такими значениями, он знает, что это значения слотов пользовательского слота сборки.

Поскольку навык может быть опубликован на нескольких языках (см. языки, поддерживаемые Alexa ), встроенные слоты также поддерживаются на нескольких языках.

Определение слотов

Слоты можно определить в разделе Build нового построителя навыков 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, также могут иметь синонимы. Например, если вы работаете с навыком, который запрашивает город , в котором живет пользователь, то такие места, как Мумбаи и Банглор, могут иметь синонимы Бомбей и Бангалор соответственно.

Custom Slot Example

Заполнение слотов

Для заполнения слотов есть два случая, которые должен понять разработчик.

  1. Значение слота всегда требуется.
  2. Иногда требуется значение слота, то есть умение все еще будет работать, если этот слот отсутствует.

Если значение слота всегда требуется, то можно использовать Директиву Dialog.Delegate . Чтобы использовать эту директиву, должны быть определены подсказки (то есть, что Alexa скажет, чтобы запросить значение этого слота) и высказывания (то есть, что пользователь будет говорить в ответ на эти подсказки) в построителе навыков Alexa.

Примерно так: здесь подсказки и высказывания приведены для пользовательского слота CITY, который требуется для Intent GetMoviesNowShowing. (Это встроенный слот типа AMAZON.City)

Prompts and Utterances for custom slot - CITY

И если слот не всегда требуется, тогда Директива 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.