Amazon AlexaAWS

Alexa Skill向けのLambdaを自分のAlexa Skill以外で使わせない様にする方法

この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の9日目の記事です。 Amazon Alexa + AWS Lambdaの組み合わせの場合、Alexa SK […]

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

この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の9日目の記事です。

Amazon Alexa + AWS Lambdaの組み合わせの場合、Alexa SKillの開発画面でAWS LambdaのARNを指定するだけで連携ができます。

ただしこの場合、該当するLambdaファンクションにアクセスできるアカウントであれば他のスキルからもLambdaを実行することが可能です。

複数人でスキル開発している場合に、誤って別のチームのLambdaのARNを指定してしまった場合などでしょうか。

個人情報を取り扱う様なスキルも作れることを考えると、特定のSkillからのみ起動できるようにしたくなります。

alexa-sdkなら1行で解決

で、この実装はalexa-sdkの場合1行コードを足すだけでOKです。

'use strict'
const Alexa = require('alexa-sdk')
const handlers = {
  'LaunchRequest': () => this.emit(':tell', 'Hello World')
}

module.exports.hello = (event, context, callback) => {
  alexa = Alexa.handler(event, context, callback)
  // 下の1行を追加する
  alexa.appId = 'amzn1.ask.skill.[unique-value-here]'
  alexa.registerHandlers(handlers)
  alexa.execute()
}

appIdはAlexa Skillの管理画面から確認することができます。

「スキルIDの表示」を押すとでます

これで指定したappIdと、Alexaから送られてくるevent.application.applicationIdの値が一致する場合のみスクリプトを実行できるようになります。

問題点

テストなどを実行してみるとわかるのですが、特にエラーハンドリングしてくれません。
バックエンド処理が失敗した場合のデフォルト応答がAlexaからは発話されます。

$ ./node_modules/mocha/bin/_mocha test/unit/*

LaunchRequest
The applicationIds don't match: amzn1.ask.skill.[unique-value-here] and hoge
Unexpected exception 'AssertionError: false == true':
AssertionError: false == true
  at Decorator._callFunc (/Users/alexa-examplealexa-hello-world/node_modules/empower-core/lib/decorator.js:110:20)
  at Decorator.concreteAssert (/Users/alexa-examplealexa-hello-world/node_modules/empower-core/lib/decorator.js:103:17)
  at Function.decoratedAssert [as ok] (/Users/alexa-examplealexa-hello-world/node_modules/empower-core/lib/decorate.js:51:30)
  at Object.fail (/Users/alexa-examplealexa-hello-wor

ちょっとソース追いかけていけそうならPR出してみようかなとは思っていますが、「このスキルでは利用できません」の様な応答をさせたいなと思った場合は自力で比較する実装を作られたほうが良さそうかなと思います。
「デフォルトのエラーメッセージでよくね?」で終わりそうな気もしますが・・・

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

WP Kyotoサポーター募集中

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

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

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

Related Category posts