アプリ屋になりたいブログ

アプリ屋になりたいブログ

アプリの開発と仕事の効率化について紹介するブログ

Amazon Alexaのスマートホームスキルを実装してみた

アイキャッチ

さて、以前カスタムスキルの作成方法を簡単に紹介しましたが、今回は「スマートホームスキル」の作成手順を紹介します。

www.apnari.com


スマートホームスキルは呼び出しがカスタムよりも簡単です。

カスタムスキル
 「○○(スキル名)でテレビをオンして」
スマートホームスキル
 「テレビをオンして」

作成方法もそこまで難しくないので、個人でも企業でもさっと作成してみてはいかがでしょうか。

Alexaとは

AlexaとはAmazonが出している音声アシスタントサービスの名称です。

「Amazon Echo」などのスマートスピーカーはマイクとスピーカーとインターネットに接続する能力を持っており、
音声データをクラウドとやり取りすることで、しゃべったりします。

スキルとは

スキルとは、Alexaサービス上で動作する「アプリ」のようなものです。

iPhoneがApp Storeからアプリをインストールして、いろいろ便利になるように、
Alexaもスキルを使うことでさらに便利になります!

そしてアプリ開発者がいるように、「スキルの開発者」もいる訳です。

Alexaは簡単に言うと以下のようなシステムで動作しています。

人がしゃべった音声データがAlexaクラウドに飛んでいき、テキスト変換され、テキストを解釈し、スキルを起動します。
スキルで「インテント(意図)」を判断し、そのインテントに対してLambda(AWSのサービス)で処理を行いレスポンスを返します。

開発者の作成部分は以下の通りです。

f:id:bocbocmm6:20191130182853j:plain

スキルは大きく分けると2種類あります。

「カスタムスキル」と「スマートホームスキル」です。

「カスタムスキル」と「スマートホームスキル」の違い

簡単に「カスタムスキル」と「スマートホームスキル」の違いをあげてみます。

項目 スマートホームスキル カスタムスキル
呼び出し方 スキル名いらず スキル名必要
音声UI Amazonが用意したもの 全部自分で設計
アカウントリンク 必須 任意

大きな違いだとこんな感じですかね。

エンドユーザーからすると、スキル名が不要というのが大きな利点ですね。

開発者からすると、音声UIの設計が不要です。
何がいいかというと、設計時間が圧倒的に短縮されるのと、音声UIがすべてAmazonの設計したものなので、簡単に全世界言語も対応してくれます。

スマートホーム作成手順

スキルの作成

まずはAlexaの開発者ポータルサイトに行きます。

Amazon開発者ポータル

f:id:bocbocmm6:20191207173731j:plain

Amazonのアカウントでログインします。

f:id:bocbocmm6:20191207173857j:plain

「Alexa」をクリックします。

f:id:bocbocmm6:20191207173940j:plain


「左上の開発者コンソール」をクリックします。

f:id:bocbocmm6:20191207174017j:plain


「スキルの作成」をクリックします。

f:id:bocbocmm6:20191207174209j:plain

スキル名と言語を入力します。

f:id:bocbocmm6:20191207174226j:plain

スキルの種類を選択します。

f:id:bocbocmm6:20191207174329j:plain

「スキルの作成」をクリックします。

f:id:bocbocmm6:20191207174306j:plain

「Lambda」の作成

AWSのLambdaを作成します。
「関数の作成」をクリックします。

リージョンは日本語対応したい場合は「オレゴン」限定ですので、注意してください。

f:id:bocbocmm6:20191207174502j:plain

関数名を入力し、「関数の作成」をクリックします。

f:id:bocbocmm6:20191207175426j:plain

出来上がったLambda関数のARNをコピーします。

f:id:bocbocmm6:20191207175601j:plain

エンドポイントの設定

Alexaのコンソールに移動し、先ほどコピーしたLambdaのARNを入力し「保存」します。

f:id:bocbocmm6:20191207175750j:plain

次に「スキルID」をコピーします。

f:id:bocbocmm6:20191207175843j:plain

AWSのLambdaの編集画面に移動し、「トリガーを追加」をクリックします。

f:id:bocbocmm6:20191207175945j:plain

「トリガー」を「Smart Home」にします。

f:id:bocbocmm6:20191207180104j:plain

「アプリケーションID」に先ほどコピーした「スキルID」を入力し、「追加」をクリックします。

f:id:bocbocmm6:20191207180311j:plain

f:id:bocbocmm6:20191207180149j:plain

Alexaのコンソールで「保存」をクリックします。

f:id:bocbocmm6:20191207180354j:plain

Cognitoの設定

CognitoとはAWSの提供する認証認可のサービスです。
スマートホームスキルではアカウントリンキングが必須で、oauth2.0の「authorization code flow」の仕組みを使用してアカウントリンキングを行います。
自分で認証認可のサーバを実装するのはめんどくさいので、今回はcognitoのユーザープールを使用します。

cognitoの画面にアクセスします。
「ユーザープールの管理」をクリックします。

f:id:bocbocmm6:20191207180625j:plain

「ユーザープールを作成する」をクリックします。
f:id:bocbocmm6:20191207180722j:plain

「プール名」を入力し、「ステップに従って設定」をクリックします。

f:id:bocbocmm6:20191207180850j:plain

「次へ」をクリックします。

f:id:bocbocmm6:20191207180940j:plain

「次のステップ」をクリックします。

f:id:bocbocmm6:20191207181018j:plain

「次のステップ」をクリックします。

f:id:bocbocmm6:20191207181050j:plain

「次のステップ」をクリックします。

f:id:bocbocmm6:20191207181124j:plain

「次のステップ」をクリックします。

f:id:bocbocmm6:20191207181224j:plain

「次のステップ」をクリックします。

f:id:bocbocmm6:20191207181257j:plain

「アプリクライアントの追加」をクリックします。

f:id:bocbocmm6:20191207181318j:plain

「アプリクライアント名」を入力して、「アプリクライアントの作成」をクリックします。

f:id:bocbocmm6:20191207181444j:plain

「次のステップ」をクリックします。

f:id:bocbocmm6:20191207181522j:plain

「次のステップ」をクリックします。

f:id:bocbocmm6:20191207181550j:plain

「プールの作成」をクリックします。


f:id:bocbocmm6:20191207181609j:plain


cognitoにドメインを追加します。

f:id:bocbocmm6:20191207181816j:plain

アプリクライアントの設定を以下のように設定します。

f:id:bocbocmm6:20191207181943j:plain

上記のコールバックURLには、Alexaスキルのコンソールに表示されているものをそのままコピペして貼り付けます。
3個のURLが表示されているので、それをそのままカンマで区切ってコピペします。

以下がAlexaのコンソール画面で、下のほうにリダイレクト先のURLが載っているのでそれをコピーします。

f:id:bocbocmm6:20191207182253j:plain

Alexaのリンキングを設定

以下のように設定をします。

f:id:bocbocmm6:20191207182429j:plain


認証画面のURIにはCognitoの認可エンドポイントを設定します。
認可エンドポイント - Amazon Cognito

https://自分で設定したcognitoのドメイン名.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=cognitoのアプリクライアントID&
redirect_uri=Alexaコンソールのしたのほうに書いてあるURLの一つをURLエンコードしたもの&
state=STATE

例としてはこんな感じ。
https://○○○○.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=tjwt59tr48hr86hr6hre6ther6&
redirect_uri=https%3A%2F%2Falexa.amazon.co.jp%2Fapi%2Fskill%2Flink%254re456gr546&
state=STATE

アクセストークンのURIは以下のように設定します。

トークンエンドポイント - Amazon Cognito

https://自分で設定したcognitoのドメイン名.auth.ap-northeast-1.amazoncognito.com/oauth2/token

ユーザーのクライアントIDはcognitoのアプリクライアントIDを入力します。

ユーザーのシークレットはcognitoのアプリクライアントシークレットを入力します。

スコープには「aws.cognito.signin.user.admin」を入力します。

アカウントリンキングの確認

さて、先ほど設定したアカウントリンキングが成功しているか、確認してみましょう。

以下のURLにアクセスします。

Amazonログイン

スキルボタンをクリックします。
f:id:bocbocmm6:20191207183317j:plain

右上の「有効なスキル」をクリックします。

f:id:bocbocmm6:20191207183407j:plain

「開発スキル」のメニューをクリックして、今回作成したスキルをクリックします。

f:id:bocbocmm6:20191207183442j:plain

「有効にする」をクリックします。

f:id:bocbocmm6:20191207183529j:plain

Cognitoの認証画面が表示されます。
テストユーザーを作るために「Sign Up」をクリックします。

f:id:bocbocmm6:20191207183608j:plain

f:id:bocbocmm6:20191207183659j:plain

認証コードを入力します。

f:id:bocbocmm6:20191207183727j:plain

認証が成功します。

f:id:bocbocmm6:20191207183750j:plain

Lambdaを実装する

Lambdaを実装していきます。
以下のAmazonのサイトにサンプルコードが載っています。

スマートホームスキルの作成手順 | Alexa Skills Kit


f:id:bocbocmm6:20191207183900j:plain

このサンプルコードでは、寝室のコンセントというものが検出できるようになっています。

さて、実際に動作するか確認してみましょう。

スマートスキルの動作の確認

以下のURLで「デバイスの検出」を行いましょう。

Amazonログイン

f:id:bocbocmm6:20191207184253j:plain

デバイスの検出は20秒ほどかかります。
この間にLambdaヘのDiscovery命令が飛んでいます。

f:id:bocbocmm6:20191207184309j:plain


無事「寝室のコンセント」が検出されました。

f:id:bocbocmm6:20191207184429j:plain

最後にAlexaのDeveloper consoleのテストで、動作を確認します。

f:id:bocbocmm6:20191207184508j:plain

f:id:bocbocmm6:20191207184541j:plain

一通り動作しましたね。

実際はLambdaにさらに実装して、自分の会社の機器を操作するAPIなどを呼び出して、実際の機器を操作するように設定していきます。

まとめ

今回はスマートホームスキルの実装をしてみました。

基本的にはcognitoなどを用いれば、かなり簡単に実装ができます。

Lambdaもサンプルコードがあり、後はapiの呼び出しなどを実装していくだけなので、相当簡単ですね。

Alexaもどんどん日本になじんできているので、早いこと機器をスマートホームスキルに対応して、市場に乗り遅れないようにしましょう