알렉사에서 주사위를 던지기
처음 알렉사 스킬
마침내 Amazon echo의 초대가 왔기 때문에 조속히 「Alexa 스킬을 만들어 보자」라고 생각했다. 주사위를 흔드는 기술은 쉽습니다. 어떨까요? …
"Alexa, 주사위 흔들어""네, 1이 나왔습니다!"
「Alexa, 주사위 2개 흔들어」 「네, 10이 나왔습니다!」
어? ! Echo, 할 수 있는 아이…
「Alexa, 주사위 3개 체고」 「미안해…
좋아, 주사위 몇 개라도 던져 주면!
대화 모델 만들기
첫 번째 교환에서 주사위의 개수가 지정되면 그 이후에는 주사위의 개수를 지정하지 않아도 되도록 세션을 유지해 보자.
발화
사용자는 주사위의 수를 지정하고 주사위를 던질 뿐이므로 모든 발화는 CastDiceIntent에 매핑됩니다.
CastDiceIntent さいころ振って
CastDiceIntent {Number} 個振って
CastDiceIntent 振って
CastDiceIntent さいころ投げて
CastDiceIntent {Number} 個投げて
CastDiceIntent 投げて
Intent Schema
CastDiceIntent에는 주사위의 개수를 나타내는 Number 슬롯을 설정한다.
{
"intents": [
{
"slots": [
{
"name": "Number",
"type": "AMAZON.NUMBER"
}
],
"intent": "CastDiceIntent"
},
{
"intent": "AMAZON.HelpIntent"
},
{
"intent": "AMAZON.StopIntent"
},
{
"intent": "AMAZON.CancelIntent"
}
]
}
람다
CastDiceIntent 중에서는 주사위의 개수를 나타내는 Slot을 참조한다. 둘 이상의 주사위가 지정되면 두 번째 투표 이후에는 다시 주사위의 수를 지정할 필요가 없도록 세션 속성을 사용하여 세션을 유지합니다.
var number = this.event.request.intent.slots.Number.value; // サイコロの個数
if (!number) {
number = 1; // slotに値がなければ1個
}
this.attributes['number'] = number;
둘 이상의 주사위가 지정되면 상태를 REPEATMODE로 전환하고 주사위 던지기를 반복합니다.
주사위가 하나라면 세션을 유지할 필요가 없으므로 응답을 반환하여 세션을 종료합니다. 쓸데없이 주사위를 많이 지정했을 때도 세션을 종료한다.
if (number == 1 || number > 10) {
this.emit(':tell', message); // レスポンスの生成
} else {
this.handler.state = states.REPEATMODE;
Lambda의 전체 코드는 다음과 같습니다.
index.js"use strict";
const Alexa = require('alexa-sdk');
const states = {
REPEATMODE: '_REPEAT'
};
// Lambda関数のメイン処理
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context); // Alexa SDKのインスタンス生成
//alexa.appId = process.env.APP_ID;
alexa.registerHandlers(handlers, stateHandlers); // ハンドラの登録
alexa.execute(); // インスタンスの実行
};
var handlers = {
// インテントに紐付かないリクエスト
'LaunchRequest': function () {
this.emit('AMAZON.HelpIntent'); // AMAZON.HelpIntentの呼び出し
},
// ヘルプインテント
'AMAZON.HelpIntent': function () {
this.emit(':tell', 'サイコロを振ります' +
'たとえば、サイコロ振ってと言って下さい');
},
// さいころを投げるインテント
'CastDiceIntent': function () {
var number = this.event.request.intent.slots.Number.value; // サイコロの個数
if (!number) {
number = 1; // slotに値がなければ1個
}
this.attributes['number'] = number;
var message;
if (number > 10) {
message = 'そんなにたくさんサイコロ持てないですよ';
} else {
message = rollDice(number);
}
if (number == 1 || number > 10) {
this.emit(':tell', message); // レスポンスの生成
} else {
this.handler.state = states.REPEATMODE;
this.emit(':ask', message); // レスポンスの生成
}
console.log(message);
}
};
var stateHandlers = Alexa.CreateStateHandler(states.REPEATMODE, {
'CastDiceIntent': function() {
var number = this.attributes['number']; // セッションアトリビュート参照
var message = rollDice(number);
this.emit(':ask', message);
console.log(message);
},
'Unhandled': function() {
this.handler.state = '';
this.attributes['STATE'] = '';
var message = '終了します';
this.emit(':tell', message);
console.log(message);
}
});
function rollDice(number) {
var message = '目は';
for (var i = 0; i < number; i++) {
var dice = Math.floor(Math.random()*6) + 1;
if (i > 0) {
message = message + 'と';
}
message = message + dice;
}
message = message + 'です';
return message;
}
주사위 던졌다
이제 원하는 수만큼 주사위를 던질 수 있습니다! Alexa 표준 기능의 주사위와 달리 조로 눈인지 알 수 있어요.
Reference
이 문제에 관하여(알렉사에서 주사위를 던지기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/f_nishio/items/23d5563c1adb365cfc18
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
첫 번째 교환에서 주사위의 개수가 지정되면 그 이후에는 주사위의 개수를 지정하지 않아도 되도록 세션을 유지해 보자.
발화
사용자는 주사위의 수를 지정하고 주사위를 던질 뿐이므로 모든 발화는 CastDiceIntent에 매핑됩니다.
CastDiceIntent さいころ振って
CastDiceIntent {Number} 個振って
CastDiceIntent 振って
CastDiceIntent さいころ投げて
CastDiceIntent {Number} 個投げて
CastDiceIntent 投げて
Intent Schema
CastDiceIntent에는 주사위의 개수를 나타내는 Number 슬롯을 설정한다.
{
"intents": [
{
"slots": [
{
"name": "Number",
"type": "AMAZON.NUMBER"
}
],
"intent": "CastDiceIntent"
},
{
"intent": "AMAZON.HelpIntent"
},
{
"intent": "AMAZON.StopIntent"
},
{
"intent": "AMAZON.CancelIntent"
}
]
}
람다
CastDiceIntent 중에서는 주사위의 개수를 나타내는 Slot을 참조한다. 둘 이상의 주사위가 지정되면 두 번째 투표 이후에는 다시 주사위의 수를 지정할 필요가 없도록 세션 속성을 사용하여 세션을 유지합니다.
var number = this.event.request.intent.slots.Number.value; // サイコロの個数
if (!number) {
number = 1; // slotに値がなければ1個
}
this.attributes['number'] = number;
둘 이상의 주사위가 지정되면 상태를 REPEATMODE로 전환하고 주사위 던지기를 반복합니다.
주사위가 하나라면 세션을 유지할 필요가 없으므로 응답을 반환하여 세션을 종료합니다. 쓸데없이 주사위를 많이 지정했을 때도 세션을 종료한다.
if (number == 1 || number > 10) {
this.emit(':tell', message); // レスポンスの生成
} else {
this.handler.state = states.REPEATMODE;
Lambda의 전체 코드는 다음과 같습니다.
index.js"use strict";
const Alexa = require('alexa-sdk');
const states = {
REPEATMODE: '_REPEAT'
};
// Lambda関数のメイン処理
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context); // Alexa SDKのインスタンス生成
//alexa.appId = process.env.APP_ID;
alexa.registerHandlers(handlers, stateHandlers); // ハンドラの登録
alexa.execute(); // インスタンスの実行
};
var handlers = {
// インテントに紐付かないリクエスト
'LaunchRequest': function () {
this.emit('AMAZON.HelpIntent'); // AMAZON.HelpIntentの呼び出し
},
// ヘルプインテント
'AMAZON.HelpIntent': function () {
this.emit(':tell', 'サイコロを振ります' +
'たとえば、サイコロ振ってと言って下さい');
},
// さいころを投げるインテント
'CastDiceIntent': function () {
var number = this.event.request.intent.slots.Number.value; // サイコロの個数
if (!number) {
number = 1; // slotに値がなければ1個
}
this.attributes['number'] = number;
var message;
if (number > 10) {
message = 'そんなにたくさんサイコロ持てないですよ';
} else {
message = rollDice(number);
}
if (number == 1 || number > 10) {
this.emit(':tell', message); // レスポンスの生成
} else {
this.handler.state = states.REPEATMODE;
this.emit(':ask', message); // レスポンスの生成
}
console.log(message);
}
};
var stateHandlers = Alexa.CreateStateHandler(states.REPEATMODE, {
'CastDiceIntent': function() {
var number = this.attributes['number']; // セッションアトリビュート参照
var message = rollDice(number);
this.emit(':ask', message);
console.log(message);
},
'Unhandled': function() {
this.handler.state = '';
this.attributes['STATE'] = '';
var message = '終了します';
this.emit(':tell', message);
console.log(message);
}
});
function rollDice(number) {
var message = '目は';
for (var i = 0; i < number; i++) {
var dice = Math.floor(Math.random()*6) + 1;
if (i > 0) {
message = message + 'と';
}
message = message + dice;
}
message = message + 'です';
return message;
}
주사위 던졌다
이제 원하는 수만큼 주사위를 던질 수 있습니다! Alexa 표준 기능의 주사위와 달리 조로 눈인지 알 수 있어요.
Reference
이 문제에 관하여(알렉사에서 주사위를 던지기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/f_nishio/items/23d5563c1adb365cfc18
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var number = this.event.request.intent.slots.Number.value; // サイコロの個数
if (!number) {
number = 1; // slotに値がなければ1個
}
this.attributes['number'] = number;
if (number == 1 || number > 10) {
this.emit(':tell', message); // レスポンスの生成
} else {
this.handler.state = states.REPEATMODE;
"use strict";
const Alexa = require('alexa-sdk');
const states = {
REPEATMODE: '_REPEAT'
};
// Lambda関数のメイン処理
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context); // Alexa SDKのインスタンス生成
//alexa.appId = process.env.APP_ID;
alexa.registerHandlers(handlers, stateHandlers); // ハンドラの登録
alexa.execute(); // インスタンスの実行
};
var handlers = {
// インテントに紐付かないリクエスト
'LaunchRequest': function () {
this.emit('AMAZON.HelpIntent'); // AMAZON.HelpIntentの呼び出し
},
// ヘルプインテント
'AMAZON.HelpIntent': function () {
this.emit(':tell', 'サイコロを振ります' +
'たとえば、サイコロ振ってと言って下さい');
},
// さいころを投げるインテント
'CastDiceIntent': function () {
var number = this.event.request.intent.slots.Number.value; // サイコロの個数
if (!number) {
number = 1; // slotに値がなければ1個
}
this.attributes['number'] = number;
var message;
if (number > 10) {
message = 'そんなにたくさんサイコロ持てないですよ';
} else {
message = rollDice(number);
}
if (number == 1 || number > 10) {
this.emit(':tell', message); // レスポンスの生成
} else {
this.handler.state = states.REPEATMODE;
this.emit(':ask', message); // レスポンスの生成
}
console.log(message);
}
};
var stateHandlers = Alexa.CreateStateHandler(states.REPEATMODE, {
'CastDiceIntent': function() {
var number = this.attributes['number']; // セッションアトリビュート参照
var message = rollDice(number);
this.emit(':ask', message);
console.log(message);
},
'Unhandled': function() {
this.handler.state = '';
this.attributes['STATE'] = '';
var message = '終了します';
this.emit(':tell', message);
console.log(message);
}
});
function rollDice(number) {
var message = '目は';
for (var i = 0; i < number; i++) {
var dice = Math.floor(Math.random()*6) + 1;
if (i > 0) {
message = message + 'と';
}
message = message + dice;
}
message = message + 'です';
return message;
}
이제 원하는 수만큼 주사위를 던질 수 있습니다! Alexa 표준 기능의 주사위와 달리 조로 눈인지 알 수 있어요.
Reference
이 문제에 관하여(알렉사에서 주사위를 던지기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/f_nishio/items/23d5563c1adb365cfc18텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)