Как закончить сеанс для пользовательского навыка Alexa?

Я создаю собственный навык для Alexa. Я хочу закрыть сессию на AMAZON.StopIntent, Как я могу добиться этого с помощью кода ниже?

const ExitHandler = {
  canHandle(handlerInput) {
    const request = handlerInput.requestEnvelope.request;
    return request.type === 'IntentRequest'
      && (request.intent.name === 'AMAZON.StopIntent');
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak('bye!')
      .reprompt('bye!')
      .getResponse();
  },
};

2 ответа

Решение

Alexa завершает сеанс, когда в ответе JSON для флага shouldEndSession установлено значение true.

... 
"shouldEndSession": true
...

В своем построителе ответов вы можете попробовать с помощью вспомогательной функции withShouldEndSession(true)

 return handlerInput.responseBuilder
      .speak('bye!')
      .withShouldEndSession(true)
      .getResponse();

Вспомогательные функции построителя ответов перечислены здесь

В своем фрагменте кода вы можете завершить сеанс, просто удалив строку reprompt:

return handlerInput.responseBuilder
  .speak('bye!')
  .getResponse();

поэтому предлагаемое ниже решение работает, но оно избыточно:

return handlerInput.responseBuilder
      .speak('bye!')
      .withShouldEndSession(true)
      .getResponse();

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

return handlerInput.responseBuilder
      .speak('bye!')
      .withShouldEndSession(false)
      .getResponse();
Другие вопросы по тегам