From f5f09f0b136215f80d835e57a8523ad881635e3c Mon Sep 17 00:00:00 2001 From: rca Date: Tue, 16 Jul 2024 03:12:11 +0900 Subject: [PATCH] replace with sample --- src/index.ts | 197 +++++++++++++++++---------------------------------- 1 file changed, 65 insertions(+), 132 deletions(-) diff --git a/src/index.ts b/src/index.ts index f32fca3..509839a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,156 +1,89 @@ -/* * - * This sample demonstrates handling intents from an Alexa skill using the Alexa Skills Kit SDK (v2). - * Please visit https://alexa.design/cookbook for additional examples on implementing slots, dialog management, - * session persistence, api calls, and more. - * */ -const Alexa = require('ask-sdk-core'); - -const LaunchRequestHandler = { - canHandle(handlerInput) { - return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest'; +import { HandlerInput, RequestHandler, ErrorHandler, SkillBuilders } from 'ask-sdk-core'; +import { SessionEndedRequest } from 'ask-sdk-model'; +const launchRequestHandler: RequestHandler = { + canHandle(handlerInput: HandlerInput) { + return handlerInput.requestEnvelope.request.type === 'LaunchRequest'; }, - handle(handlerInput) { - const speakOutput = 'Welcome, you can say Hello or Help. Which would you like to try?'; - + handle(handlerInput: HandlerInput) { + const speechText = 'Welcome to the Alexa Skills Kit, you can say hello!'; return handlerInput.responseBuilder - .speak(speakOutput) - .reprompt(speakOutput) + .speak(speechText) + .reprompt(speechText) + .withSimpleCard('Hello World', speechText) .getResponse(); - } -}; - -const HelloWorldIntentHandler = { - canHandle(handlerInput) { - return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' - && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'; }, - handle(handlerInput) { - const speakOutput = 'Hello World!'; - +}; +const helloWorldIntentHandler: RequestHandler = { + canHandle(handlerInput: HandlerInput) { + return handlerInput.requestEnvelope.request.type === 'IntentRequest' + && handlerInput.requestEnvelope.request.intent.name === 'HelloWorldIntent'; + }, + handle(handlerInput: HandlerInput) { + const speechText = 'Hello World!'; return handlerInput.responseBuilder - .speak(speakOutput) - //.reprompt('add a reprompt if you want to keep the session open for the user to respond') + .speak(speechText) + .withSimpleCard('Hello World', speechText) .getResponse(); - } -}; - -const HelpIntentHandler = { - canHandle(handlerInput) { - return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' - && Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.HelpIntent'; }, - handle(handlerInput) { - const speakOutput = 'You can say hello to me! How can I help?'; - +}; +const helpIntentHandler: RequestHandler = { + canHandle(handlerInput: HandlerInput) { + return handlerInput.requestEnvelope.request.type === 'IntentRequest' + && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent'; + }, + handle(handlerInput: HandlerInput) { + const speechText = 'You can say hello to me!'; return handlerInput.responseBuilder - .speak(speakOutput) - .reprompt(speakOutput) + .speak(speechText) + .reprompt(speechText) + .withSimpleCard('Hello World', speechText) .getResponse(); - } -}; - -const CancelAndStopIntentHandler = { - canHandle(handlerInput) { - return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' - && (Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.CancelIntent' - || Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.StopIntent'); }, - handle(handlerInput) { - const speakOutput = 'Goodbye!'; - +}; +const cancelAndStopIntentHandler: RequestHandler = { + canHandle(handlerInput: HandlerInput) { + return handlerInput.requestEnvelope.request.type === 'IntentRequest' + && (handlerInput.requestEnvelope.request.intent.name === 'AMAZON.CancelIntent' + || handlerInput.requestEnvelope.request.intent.name === 'AMAZON.StopIntent'); + }, + handle(handlerInput: HandlerInput) { + const speechText = 'Goodbye!'; return handlerInput.responseBuilder - .speak(speakOutput) + .speak(speechText) + .withSimpleCard('Hello World', speechText) .getResponse(); - } -}; -/* * - * FallbackIntent triggers when a customer says something that doesn’t map to any intents in your skill - * It must also be defined in the language model (if the locale supports it) - * This handler can be safely added but will be ingnored in locales that do not support it yet - * */ -const FallbackIntentHandler = { - canHandle(handlerInput) { - return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' - && Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.FallbackIntent'; }, - handle(handlerInput) { - const speakOutput = 'Sorry, I don\'t know about that. Please try again.'; - - return handlerInput.responseBuilder - .speak(speakOutput) - .reprompt(speakOutput) - .getResponse(); - } }; -/* * - * SessionEndedRequest notifies that a session was ended. This handler will be triggered when a currently open - * session is closed for one of the following reasons: 1) The user says "exit" or "quit". 2) The user does not - * respond or says something that does not match an intent defined in your voice model. 3) An error occurs - * */ -const SessionEndedRequestHandler = { - canHandle(handlerInput) { - return Alexa.getRequestType(handlerInput.requestEnvelope) === 'SessionEndedRequest'; +const sessionEndedRequestHandler: RequestHandler = { + canHandle(handlerInput: HandlerInput) { + return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest'; }, - handle(handlerInput) { - console.log(`~~~~ Session ended: ${JSON.stringify(handlerInput.requestEnvelope)}`); - // Any cleanup logic goes here. - return handlerInput.responseBuilder.getResponse(); // notice we send an empty response - } -}; -/* * - * The intent reflector is used for interaction model testing and debugging. - * It will simply repeat the intent the user said. You can create custom handlers for your intents - * by defining them above, then also adding them to the request handler chain below - * */ -const IntentReflectorHandler = { - canHandle(handlerInput) { - return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'; + handle(handlerInput: HandlerInput) { + const { reason } = handlerInput.requestEnvelope.request as SessionEndedRequest; + console.log(`Session ended with reason: ${reason}`); + return handlerInput.responseBuilder.getResponse(); }, - handle(handlerInput) { - const intentName = Alexa.getIntentName(handlerInput.requestEnvelope); - const speakOutput = `You just triggered ${intentName}`; - - return handlerInput.responseBuilder - .speak(speakOutput) - //.reprompt('add a reprompt if you want to keep the session open for the user to respond') - .getResponse(); - } }; -/** - * Generic error handling to capture any syntax or routing errors. If you receive an error - * stating the request handler chain is not found, you have not implemented a handler for - * the intent being invoked or included it in the skill builder below - * */ -const ErrorHandler = { +const errorHandler: ErrorHandler = { canHandle() { return true; }, - handle(handlerInput, error) { - const speakOutput = 'Sorry, I had trouble doing what you asked. Please try again.'; - console.log(`~~~~ Error handled: ${JSON.stringify(error)}`); - + handle(handlerInput: HandlerInput, error: Error) { + console.log(`Error handled: ${error.message}`); return handlerInput.responseBuilder - .speak(speakOutput) - .reprompt(speakOutput) + .speak('Sorry, I can\'t understand the command. Please say again.') + .reprompt('Sorry, I can\'t understand the command. Please say again.') .getResponse(); - } + }, }; - -/** - * This handler acts as the entry point for your skill, routing all request and response - * payloads to the handlers above. Make sure any new handlers or interceptors you've - * defined are included below. The order matters - they're processed top to bottom - * */ -exports.handler = Alexa.SkillBuilders.custom() +const skillBuilder = SkillBuilders.custom(); +exports.handler = skillBuilder .addRequestHandlers( - LaunchRequestHandler, - HelloWorldIntentHandler, - HelpIntentHandler, - CancelAndStopIntentHandler, - FallbackIntentHandler, - SessionEndedRequestHandler, - IntentReflectorHandler) - .addErrorHandlers( - ErrorHandler) - .withCustomUserAgent('sample/hello-world/v1.2') - .lambda(); \ No newline at end of file + launchRequestHandler, + helloWorldIntentHandler, + helpIntentHandler, + cancelAndStopIntentHandler, + sessionEndedRequestHandler, + ) + .addErrorHandlers(errorHandler) + .lambda();