![見出し画像](https://assets.st-note.com/production/uploads/images/91262638/rectangle_large_type_2_618429edb990dbcd604c314694bb9d75.png?width=1200)
アレクサスキル サンプルコード 数当てゲーム100
What's 数当てゲーム100
「アレクサが思い浮かべた10~100の数字をヒントを頼りに当てるミニゲームです
工夫ポイント
ユーザーの回答した回数をカウントして、何回目で当てたかを教えてくれます
サンプルコード
200行ほどのコードです。
コードエディタにコピペした後、以下の値を変えた派生のスキルをつくってみてください。
let correctAnswer = Math.floor(Math.random() * 90 + 10) ;
/* *
* 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');
//初期設定
let CountAnswer = 1;
let correctAnswer = Math.floor(Math.random() * 90 + 10) ;
const soundCorrect ="<audio src='https://alexa-iizawa-acl.s3.ap-northeast-1.amazonaws.com/sound_effect/se-answer-correct.mp3' />";
const soundWrong ="<audio src='https://alexa-iizawa-acl.s3.ap-northeast-1.amazonaws.com/sound_effect/se-answer-wrong.mp3' />";
const LaunchRequestHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
},
handle(handlerInput) {
const speakOutput = ''+
"<audio src='https://alexa-iizawa-acl.s3.ap-northeast-1.amazonaws.com/sound_effect/%E5%92%8C%E5%A4%AA%E9%BC%93%E3%81%A6%E3%82%99%E3%83%88%E3%82%99%E3%83%88%E3%82%99%E3%83%B3.mp3' />"
+ '一から百までの数を思い浮かべました。さて、いくつでしょうか。当ててみてください。'
const reprompt ='一から百までの数を、答えてください。';
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(reprompt)
.getResponse();
}
};
const AnswerIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'AnswerIntent';
},
handle(handlerInput) {
//get user's answer of number
let receivedNumber = handlerInput.requestEnvelope.request.intent.slots.number.value;
let speakOutput = '';
if (receivedNumber == correctAnswer){
speakOutput = soundCorrect + '<amazon:emotion name="excited" intensity="low">' +
'正解。答えは' + correctAnswer + 'でした。' +
CountAnswer + '回目で当てることができました。また、遊んでください。 </amazon:emotion>';
return handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();
}
if (receivedNumber > correctAnswer){
speakOutput = soundWrong +
'<amazon:emotion name="disappointed" intensity="low"> 残念。 </amazon:emotion>' +
receivedNumber +
'よりも、小さい数です。さて何でしょうか。'
}
if (receivedNumber < correctAnswer){
speakOutput = soundWrong +
'<amazon:emotion name="disappointed" intensity="low"> 残念。 </amazon:emotion>' +
receivedNumber +
'よりも、大きい数です。さて何でしょうか。'
}
CountAnswer += 1;
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt('一から百までの数を、答えてください。')
.getResponse();
}
};
const HelpIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.HelpIntent';
},
handle(handlerInput) {
const speakOutput = '一から百までの数を思い浮かべました。さて、いくつでしょうか?当ててみてください。';
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.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 = 'また、数当てゲームで遊んでください。';
return handlerInput.responseBuilder
.speak(speakOutput)
.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';
},
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) {
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 = {
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)}`);
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(speakOutput)
.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()
.addRequestHandlers(
LaunchRequestHandler,
AnswerIntentHandler,
HelpIntentHandler,
CancelAndStopIntentHandler,
FallbackIntentHandler,
SessionEndedRequestHandler,
IntentReflectorHandler)
.addErrorHandlers(
ErrorHandler)
.withCustomUserAgent('sample/hello-world/v1.2')
.lambda();
AnswerIntent
ユーザーの回答した数字を取得するインテントです。
slotにはビルトインスロッAMAZON.NUMBERを使用しました。
![](https://assets.st-note.com/img/1668003804530-i50nybhBsW.png?width=1200)
![](https://assets.st-note.com/img/1668003951552-qhEf4zlREU.png?width=1200)