Amazon AlexaAWS

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などを用意する必要もなく実装できますので知っておくと便利です。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts