How to end session for custom Alexa skill?

2020-06-16 03:47发布

I am creating a custom skill for Alexa. I want to close the session on AMAZON.StopIntent. How can I achieve this with below code?

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条回答
Luminary・发光体
2楼-- · 2020-06-16 04:04

In your code snippet you would end the session just by removing the reprompt line:

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

so the suggested solution below works but it's redundant:

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

The code above is often used in the opposite scenario, when you want to keep the session open without a reprompt:

return handlerInput.responseBuilder
      .speak('bye!')
      .withShouldEndSession(false)
      .getResponse();
查看更多
迷人小祖宗
3楼-- · 2020-06-16 04:10

Alexa ends the session when shouldEndSession flag is set to true in the response JSON.

... 
"shouldEndSession": true
...

In your response builder can you try with the helper function withShouldEndSession(true)

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

Response builder helper functions are listed here

查看更多
登录 后发表回答