attributesを利用してalexa-sdkでAlexaの会話でデータをひきまわす
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の16日目の記事です。 クイズやガイドスキルなどで、ユーザーの発言を後々のレスポンスに利用したい場合が少なか […]
広告ここから
広告ここまで
目次
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の16日目の記事です。
クイズやガイドスキルなどで、ユーザーの発言を後々のレスポンスに利用したい場合が少なからずあります。
クイズスキルのソースなどを見るとわかるのですが、会話の中で引き継ぎさせたい値はthis.attributes
に保存されるようになっています。
一時保存するコードサンプル
LaunchRequest
でattributesに値がない場合は初期化しています。
SampleIntent
でattributesのcallAmount
の数をインクリメントさせてます。
'use strict'
const Alexa = require('alexa-sdk')
const handlers = {
'LaunchRequest': function () {
if (Object.keys(this.attributes).length === 0) {
this.attributes['callAmount'] = 0
}
this.emit(':tell', 'サンプルスキルへようこそ。')
},
'SampleIntent': function () {
this.attributes['callAmount'] += 1
this.emit(':tell', 'サンプルインテントがコールされました。')
}
}
module.exports.hello = (event, context, callback) => {
alexa = Alexa.handler(event, context, callback)
alexa.registerHandlers(handlers)
alexa.execute()
}
セッション情報はattributes
に保存する
取り出す場合は先ほどの逆にすることでとりだせます。
'COUNTIntent': function () {
const callAmount = this.attributes['callAmount']
this.emit(':tell', `${callAmount}回呼び出されました。`)
}
おわりに
もちろんこのやり方では、セッションが終了するタイミングで値は破棄されます。
ただし会話の中だけで保持したいデータであれば、わざわざDynamoDBなどを用意する必要もなく実装できますので知っておくと便利です。