Alexaのアカウントリンクをやろうとして以下のページを見て練習していたのですが、
Alexaスキル開発トレーニングシリーズ 第5回 アカウントリンクとホームカード機能
この通りやっても上手くいかなかった点がいくつかありましたので、備忘録がてら解決策をメモしていこうと思います。
ちなみにアカウントリンクとは、OAuth2.0を用いて、他社サービスとAlexaスキルを連携して、 Alexaスキルが目的のWebサービスにアクセスすることを許可するよう設定する仕組みのことです。
以下はちょっと古い動画ですが、アカウントリンクとは何ぞや?というのが、この動画を見ればなんとなくわかります。Amazon Alexaの公式動画です。
第13回Alexa道場:アカウントリンクで既存のサービスと連携するスキルを作ろう
そしてこの動画では、Amazonアカウントとアカウントリンクをするサンプルデモの解説をしてくれています。
・・・そう思ったのですが、最初のlamdbaの部分の導入が端折られていたので、どう書いていいか分からず、色々ググっているうちに、冒頭のページにたどり着きました。
私はlambdaも全くの初心者だったので、この記事が私と同じような初心者の方の参考になれば幸いです!
目次
アカウントリンクを「Alexaスキル開発トレーニングシリーズ 第5回」の通りにやってみる
「alexa アカウントリンク oauth2.0」でググると、3番目にトレーニングのページが出てきました。
アドレスがamazon.comなので、おそらく公式ページでしょう。
Alexaスキル開発トレーニングシリーズ 第5回 アカウントリンクとホームカード機能
ここを開くと、丁寧な解説ページが出てきて、この通りにやれば実装できそうです。
冒頭で紹介した動画と併せて見ながらやってみます。
しかしちょっとここで気になったのが・・・
“[2019.4.5]本トレーニングシリーズは一部の内容が古くなっておりますので、2019年作成のトレーニングシリーズをご覧ください。“と記載があります。
早速リンク先を探してみたのですが、アカウントリンクに関する新しいページが見当たりませんでした。
なので、このページのまま進めてみます。
チュートリアルの通り進めてみる
では実際にやってみます。このチュートリアルでは、Amazonのログイン画面でAmazonアカウントを入力すれば、ユーザの情報が取れるということができるみたいです。
OAuth 2に対応するWebサービスとしてLogin with Amazonと連携し、Amazonアカウントの氏名を取得するスキルを作成します。
ユーザー : 「アレクサ、リンクテストで名前を教えて」
Alexa : 「山田太郎(Amazonアカウントに登録している氏名)さん、こんにちは。」このスキルを次のようなステップで作成します。
- Login with Amazonの設定
- スキルの作成と構成
- AWS Lambda関数の構成
- Alexaアプリのアカウントリンク設定
- 動作確認
引用元:Alexaスキル開発トレーニングシリーズ 第5回 アカウントリンクとホームカード機能
まずは”ステップ1 Login with Amazonの設定”ですが、これは読んだままできました。
リンク先へ飛んで、ログインします。
Amazonのアカウントを持ってない場合は、まずアカウントを作りますが、絶対に上記のページから新規アカウントの作成はしないでください。
Amazon.co.jp(ショッピングのページ)に行って、こちらでアカウントを新規作成してから、上記ページでログインします。
なぜこうするのかと言いますと、詳しくは以下のページで解説されているのですが
要するに、
日本語のAlexaスキルを作るには日本のAmazonアカウント(Amazon.co.jp)が必要なのですが、上記リンク先のログイン画面でAmazonアカウントを新規作成すると、Amazon.co.jpではなくAmazon.comのアカウントが作られてしまうんです。
ログインしたらいきなり”Login with Amazon”があるので、それをクリックします。
あとは手順の通りセキュリティプロファイルを作ります。
セキュリティプロファイル作成画面では、以下を入力します。
- Security Profile Nameは「Alexa Account Linking Test」と入力
- Security Profile Descriptionは「Alexa Account Linking Test profile」と入力
- Consent Privacy Notice URLは「http://example.com/privacy.html」と入力(今回はダミーURLを入力しておきます)。
- [Save]ボタンをクリックします
引用元:Alexaスキル開発トレーニングシリーズ 第5回 アカウントリンクとホームカード機能
こんな感じで手順の通り入力します。
そしてSaveすると、
え???
何このエラー・・・エラーメッセージも意味不明です。
詰まった点その1:「無効なセキュリティプロファイル」というエラーが発生
ここから色々試行錯誤が始まります。名前付けが悪いのかと思ってスペース抜いたり・・・そして・・・
最終的に、「セキュリティプロファイル名」と「セキュリティプロファイルの説明」から「Alexa」を抜いてみました。すると・・・
えええええー!
気を取り直して、ここからまたチュートリアルの手順通りに設定していきます。
ちなみに、ここの流れは冒頭で紹介したYoutubeの動画見たほうが分かりやすいです。16分あたりから見て、そのまま設定していけばOKです。
次は、AWSの設定です。
AWSのアカウントを持ってない人はまず作る必要があります。クレジットカードが必要なのでちょっと登録を躊躇しますが、1年間は利用が無償なので課金される心配はありませんよ。
作成の手順は以下の公式ページに丁寧に記載されていますので、こちらをご覧ください。
なお、AWSは不正にログインされて不正利用されると高額請求される恐れがあるので、二段階認証をしておきましょう。今のご時世どんな不正をされるか分からないので、できる限りの防御はしておいたほうが良いです。
AWSの二段階認証の仕方は以下の記事にまとめましたので参考にしてください。(二段階認証は今すぐにやらなくても、あとからでも大丈夫です。)
さて、トレーニングページに戻って、トレーニングページに記載の通りの手順でlambdaの設定をやっていきます。
3. 「関数の作成」ボタンをクリックします。
4. 「一から作成」を選択し、[名前]に「AccountLinkingTestSkill」、[ランタイム]は「Node.js8.10」、[ロール]は「既存のロールを選択」のまま、[既存のロール]は第1回の実習で作成した「lambda_basic_execution」を選択します。次に[関数の作成]ボタンをクリックしLambda 関数を作成します。
引用元:Alexaスキル開発トレーニングシリーズ 第5回 アカウントリンクとホームカード機能
んんんんん?既存のロールにlambda_basic_execution???
詰まった点その2:[既存のロール]に「lambda_basic_execution」を選択しようとしても出てこない
“第1回の実習で作成した”と記載があるので、第1回の実習とやらを見てみたんですけどよく分からない。どうすればいいか書いてないんですよね・・・。
めっちゃ調べた結果、自分でロールを作らないといけないらしいです。(汗)
まずは「IAMコンソール」に移動して、「ロールの作成」から「lambda」を選びます。
次に、アクセス権限ポリシーを選択するので、ここでようやく”lambda_basic_execution”とやらの出番です。検索窓でlambdaで検索し、「AWSLambdaBasicExecutionRole」にチェックを入れます。
タグの設定はただの説明文の記載なので、省略してOKです。
最後に、ロールに名前を付けて完了です。名前は何でもいいですよ。
このように、ダッシュボードに今作ったロールが表示されていたらOKです。
このロールを、先ほどのlambdaの設定画面から選択しましょう。
関数を作成すると、このような画面に移行します。
あとはトレーニング記載の手順通りに淡々と進めていきます。
10. 「アカウントリンク」をクリックして、「ユーザーがアカウントや既存アカウントへのリンクを作成することを許可しますか?」、「ユーザーがアカウントリンクなしでスキルを有効にすることを許可してください」のスイッチをONにし、各入力フィールドに以下の情報を入力します。
- [Authorization Grant種別]は「Auth Code Grant」を選択
- [認証画面のURI]は「https://www.amazon.com/ap/oa」(全ユーザー共通)
- [アクセストークンURI]は「https://api.amazon.com/auth/o2/token」(全ユーザー共通)
引用元:Alexaスキル開発トレーニングシリーズ 第5回 アカウントリンクとホームカード機能
ここの流れは冒頭のYoutube動画を見たほうが分かりやすいです。18分20秒あたりから見て、動画と同じように設定していきます。
ちなみに、設定するURIに関する情報は以下のドキュメントに記載されています。
ここまでで必要な設定は完了です。あとはAlexaアプリから動作確認します。
Alexaアプリを起動し、「有効なスキル」から今作った「AccountLinkTest」スキルを探します。
AccountLinkTestを選択すると、「アカウントリンク可能」と表示されているのが分かります。「設定」をタップしてスキルを有効化します。
「アカウントをリンク」を選択します。
Amazonのログイン画面が表示されますので、自分のAmazonアカウントを入力してログインします。
上記まで問題なく進めれば、アカウントリンク完了です。
スキルの設定画面で「リンク済み」になっていればアカウントリンク成功です。
あとはチュートリアルに記載の通りAlexaシミュレーターで試してもいいですし、実機で試してもいいので、「アレクサ、リンクテストを開いて、名前を教えて」と発話すればAmazonアカウントに登録された名前が返ってきますよ。
まとめ
今回は、「Alexaスキル開発トレーニングシリーズ 第5回 アカウントリンクとホームカード機能」を参考にAlexaのアカウントリンクをやろうとした際に、詰まった点とその解決策について記載しました。
結局、私がハマったのは以下2点でした。
- 「無効なセキュリティプロファイル」というエラーが出る
- 「既定のロール」って何を設定すればいいのか分からない
この備忘録が誰かの助けになれば幸いです。