Amazon Alexa Advent Calendar 2017 - Adventarの23日目の記事です。
はじめに
先日からAlexaの記事を書き続けています。
そして、どうせ記事を書くなら審査に出してみようということで簡単なスキルを作って審査に出してみました。。。しかし結果はリジェクトです。
何が足りなかったのか?どうすればよいのか?を書いていきたいと思います。
Alexaのリクエストを外部のエンドポイントで処理する場合には注意が必要
Alexaの作り方としてAWSのLambdaを使う方法と外部の別サーバーで処理する方法の2パターンがあります。
そして、普段はRuby on Railsで開発していることもあり、僕はエンドポイントをHerokuに向けています。
4. Amazon AlexaからHerokuのRailsにつなぐ - Qiita
ただ外部サーバーで処理する場合には注意が必要でした。
公式ドキュメントにも書かれていますが、「Alexaから送信されたリクエストを検証する」と「リクエストの署名を確認する」が必要です。
カスタムスキルをウェブサービスとしてホスティングする | Custom Skills
これはオレオレスキルで手元のEchoで動かす時には特に気にすることはありません。ただ、誰でも使えるスキルとして公開する場合には検証や署名あたりをちゃんと処理をしていないと審査でリジェクトされるようです。
AWSのLambdaであればこの辺りをいい感じにしてくるんだと思います。
Ruby on Railsで署名の確認などを行う
では、Ruby on RailsでAlexaの処理を行うにはどうすれば良いかを調べました。
gemがありました。ありがたい。
sidoh/alexa_verifier: Rubygem to verify requests sent to an Alexa skill are sent from Amazon
gem 'alexa_verifier'
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :verify_alexa_request
private
def verify_alexa_request
AlexaVerifier.valid!(request)
end
end
簡単これだけです。
まとめ
まだ審査に通ってないので本当にこれで良いのかはわかりません。審査を通ったらもしくはリジェクトされたらここに追記したいと思います。