Использование sessionAttributes в Alexa Skill - PullRequest
0 голосов
/ 04 июня 2018

Я создаю навык Alexa и не совсем уверен, правильно ли я использую sessionAtrributes.Я знаю, sessionAttributes используются для переноса данных сеанса к следующему вызову.Таким образом, у меня есть эти два намерения

1) ListToDoItem

  • В этом намерении мой навык будет просматривать базу данных и перечислять список дел, хранящихся в базе данных.После перечисления элементов Alexa продолжит: «Вы хотите, чтобы я перечислил подробную информацию об этих элементах дел?», Чтобы справиться с этим, я передам элементы, полученные в предыдущей сессии, как sessionAttributes.Когда меня попросят перечислить подробную информацию об элементах, я извлечу ранее переадресованный sessionAtrributes и составлю подробный речевой ответ.
  • Так что для этого намерения я должен сделать выборку высказываний
    • перечислить мои-do items
    • yes

Будет использовано высказывание 'yes', чтобы можно было извлечь sessionAttributes для создания подробного речевого ответа.

2) ListDoneItems

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

Для этого намерения будет иметь 2 примера высказываний

  • список моих завершенных предметов
  • yes

Как и прежде, у него есть 'yes' для генерации подробного речевого ответа на основе атрибутов session.

Но проблема в том, что когда я отвечаю 'да 'к ListDoneItems намерению' Вы хотите, чтобы я перечислял завершенные элементы??, следующий сгенерированный запрос намерения имеет тип ListToDoItems вместо ListDoneItems, хотя я установил shouldEndSession в falseв моем ответе навыка.Это происходит потому, что между моими намерениями есть пересечение между образцами высказываний.Так неправильно ли иметь одинаковые намерения в разных?Как спроектировать модель взаимодействия для создания многооборотного диалога для использования в sessionAttributes?

1 Ответ

0 голосов
/ 04 июня 2018

Я думаю, что это будет полезно для тех, кто ищет ответ.

По сути, в примере высказывания не следует включать фразы для повторных подсказок;т.е. в моем случае я не должен добавлять «да» в качестве высказывания.Вместо этого я должен использовать Amazon.YesIntent.

При использовании Amazon.YesIntent вы должны поддерживать конечный автомат в вашем SessionAttributes, указывая на последнее вызванное намерение.Например, если два или более ваших намерений имеют возможный случай, когда пользовательский ответ может вызвать YesIntent, вы должны сохранить имя последнего вызванного намерения и связанные данные сеанса в SessionAttributes.Таким образом, в функции, которая обрабатывает YesIntent, вы должны проверить состояние ваших предыдущих вызовов и делегировать управление соответствующему обработчику намерений.

В моем случае я буду хранить ранее вызванное имя намерения в качестве ключа и егосвязанные данные как их значение в session.attributes;

   "session": {
        "new":"false",
        "sessionId": "sessionId",
        "application": {
          "applicationId": "applicationId"
        },
        "attributes": {
          "PreviousIntent": {
             "PreviousIntentData"
        }
    }

В функции, которая обрабатывает YesIntent, проверьте предыдущее состояние (session.attributes.PreviousIntent) и делегируйте элемент управления функции, которая обрабатывает этонамерение.

...