Перечисление значений пользовательских слотов из Speechlet

Есть ли способ проверить или перечислить значения пользовательского слота, настроенные в вашем модель взаимодействия? Например, скажем, у вас есть схема намерения со следующим намерением:

{
  "intent": "MySuperCoolIntent",
  "slots":
  [
    {
      "name": "ShapesNSuch",
      "type": "LIST_OF_SHAPES"
    }
  ]
}    

Кроме того, вы определили пользовательский слот LIST_OF_SHAPES со следующими значениями:

SQUARE
TRIANGLE
CIRCLE
ICOSADECAHECKASPECKAHEDRON
ROUND
HUSKY

Вопрос: есть ли метод, который я могу вызвать из своего Speechlet или моего RequestStreamHandler, который даст мне перечисление этих значений пользовательских слотов??

Я просмотрел документацию SDK Alexa Skills Kit Javadocs , расположенную здесь

И я ничего не нахожу.

Я знаю, что могу получить значение слота, отправленное с намерением:

String slotValue = incomingIntentRequest.getIntent().getSlot("LIST_OF_SHAPES").getValue();  

Я даже могу перечислить ВСЕ входящие слоты (а вместе с ними и их значения):

Map<String, Slot> slotMap = IncomingIntentRequest.getIntent().getSlots();
for(Map.Entry<String, Slot> entry : slotMap.entrySet())
{
    String key = entry.getKey();
    Slot slot = (Slot)entry.getValue();
    String slotName = slot.getName();
    String slotValue = slot.getValue();
    //do something nifty with the current slot info....
}

Что бы я действительно хотел, так это что-то вроде:

String myAppId = "amzn1.echo-sdk-ams.app.<TheRestOfMyID>"; 

List<String> posibleSlotValues = SomeMagicAlexaAPI.getAllSlotValues(myAppId, "LIST_OF_SHAPES");

С этой информацией мне не пришлось бы поддерживать два отдельных «списка» или «перечисления»; Один в модели взаимодействия, а другой в моем обработчике запросов. Кажется, это должно быть правдой?


person Wil Conine    schedule 01.06.2016    source источник


Ответы (2)


Нет, API не позволяет вам это сделать.

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

Используя этот метод, вы можете получить доступ к своей модели взаимодействия во время выполнения. Вместо того, чтобы делать это автоматически через API, вы делаете это в соответствии с передовой практикой.

Вы можете увидеть несколько примеров этого в действии для Java в примерах TsaTsaTzu.

person Joseph Jaquinta    schedule 02.06.2016
comment
Мне нравится шаблон, используемый в коде TsaTsaTzu. По сути, у него есть плоский файл со всей информацией, необходимой ему для генерирования схемы намерений, примеров высказываний и пользовательских значений слотов. Эти сгенерированные файлы затем можно загрузить на Amazon, И их можно прочитать во время выполнения, чтобы перечислить возможные значения слотов. Я уже отслеживаю все эти файлы, поэтому чтение их во время выполнения — это NBD. Я думаю, этот обходной путь придется сделать. Спасибо. - person Wil Conine; 02.06.2016

Нет, в API нет ничего, что позволяло бы вам это сделать.

Вы можете увидеть полную структуру тела запроса, которую Alexa предоставляет вам для работы. Это очень просто и доступно здесь:

https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference#Request%20Format

Обратите внимание, что тело запроса не следует путать с запросом, который представляет собой структуру в теле запроса с двумя родственными элементами: версией и сеансом.

person John Wheeler    schedule 02.06.2016