スマートホームスキルの作成手順

スマートホームスキルの作成手順

スマートホームスキルを作成するときは、Alexaがスキルを呼び出し、ユーザーのリクエストに対応してスマートホームデバイスを制御できるようにします。スマートホームスキルでは、プリビルドの音声対話モデルを使用します。発話セットはAlexaによって定義されます。Alexaスマートホームスキルは、ほとんどのデバイスタイプに対して作成できます。

スマートホームスキルの概要については、スマートホームスキルを理解するを参照してください。簡単なスマートホームスキルを作成するステップバイステップのチュートリアルについては、チュートリアル: スマートホームスキルの作成を参照してください。

スマートホームスキルを作成するには、以下の手順を実行します。

前提条件

スマートホームスキルを開発する際に必要なものは以下のとおりです。

  • Amazon開発者アカウント。日本語のスキルを開発してテストするには、Amazon.co.jpのアカウントを使用します。作成済みでない場合は、Amazon.co.jpにアクセスして新しいアカウントを作成してください。アカウントは無料です。
  • アマゾンウェブサービス(AWS)アカウント。AWSアカウントを使用すると、サービスの無料利用枠の一部としてリソースにアクセスできます。スキルコードはAWS Lambdaでホストします。
  • デバイス制御クラウドに接続するスマートデバイス(照明、サーモスタット、カメラ、ロックなど)。スキルは、デバイスでサポートされている通信チャネルを使用して、デバイスまたはデバイス制御クラウドと通信します。
  • Alexa搭載デバイス(Amazon Echoなど)。Echoへのサインインには、Alexa開発者アカウントと同じ認証情報を使用してください。
  • モバイルデバイスにインストールしたAmazon Alexaアプリ。Alexaアプリのダウンロード手順については、AmazonウェブサイトのAlexaアプリをダウンロードするを参照してください。モバイルデバイス上のAlexaアプリへのサインインには、Alexa開発者アカウントと同じ認証情報を使用してください。
  • JSONと、AWS Lambdaスキルコードでサポートされるプログラミング言語( Node.js、Java、Python、C#、Go、Ruby、PowerShellのいずれか)に関する知識。
  • アカウントリンクのためのOAuth 2.0プロバイダー。Amazon認可サーバーのLogin with Amazon(LWA)を使用するか、独自のOAuth 2.0プロバイダーを選択できます。
  • デバイスとやり取りし、ユーザーをデバイスに関連付けることができるデバイス制御クラウド。AWS IoT または独自のクラウドプロバイダーを使用できます。
  • スマートホームデバイスを制御するディレクティブを定義する、適切なスマートホームスキルAPI。スマートホームスキルAPIでサポートされるロケールと言語については、Alexaインターフェースとサポートしている言語の一覧を参照してください。
  • スキルの認定要件であるポリシーセキュリティに関する知識。

開発者コンソールでスキルを作成する

スマートホームスキルは、Alexa開発者コンソールで作成します。スキルに追加するモデルは、スマートホームモデルを選択します。

デフォルトの言語とリージョンとして日本語(日本)を選択することも、ほかの言語とリージョンでスキルを作成することもできます。スキルを提供する予定のリージョンを選択してください。サポートされる言語はインターフェースによって異なります。詳細については、Alexaインターフェースとサポートしている言語の一覧を参照してください。

スキルを作成したら、スキルIDを参照しやすい場所にコピーしておきます。Windowsではメモ帳、Macではテキストエディットなどを使用できます。スキルIDは、Lambdaでホストされるスキルコードにスキルを接続するために必要になります。

Lambda関数を作成する

スキルコードはLambda関数として実装し、その関数をスキルIDに接続します。すべてのLambda関数には、関数を呼び出すエンドポイントを定義するAmazonリソースネーム(ARN)があります。Alexaは、ARNを使用して関数にアクセスします。

この関数は、スキルコード、設定情報、Identity and Access Management(IAM)ロールで構成されます。IAMロールは、ユーザーに代わってスキルコードを実行する許可をLambdaに与えます。Lambda関数では、オプションでデータをAWS DynamoDBに保存したり、ログをAWS CloudWatchに書き込んだりできます。

Lambda関数を作成するには、AWS認証情報を使用してAWSマネジメントコンソールにサインインし、以下の手順を実行します。Lambda基本実行ポリシーがアタッチされたIAMロールが既にある場合は、最後のステップに進んでください。IAMロールとLambda関数を作成するステップバイステップのチュートリアルについては、スマートホームチュートリアル: ステップ2: スキルコードを実装するのサブステップa~cを参照してください。

Lambda関数を作成するには

  1. AWSマネジメントコンソールにサインインします。
  2. IAMポリシーを作成します。
    IAMダッシュボードポリシーページに移動し、ポリシーの作成をクリックします。Lambda関数からアクセスするAWSリソースへのアクセス権限を追加します。
  3. IAMロールを作成します。
    IAMダッシュボードのロールページに移動し、ロールを作成をクリックします。信頼されたエンティティタイプAWSのサービスを選択し、一般的なユースケースLambdaを選択します。先ほど作成したポリシーをロールに追加します。
  4. Lambda関数を作成します。
    Lambdaコンソールに移動し、Lambda関数を実行する適切なリージョンを選択します。スマートホームデバイスを検出するには、デバイスのある場所と同じリージョンで関数を作成します。後からほかの言語とリージョンを追加できます。
    • ランタイムで、使用するプログラミング言語を選択します。
    • アーキテクチャはデフォルトのままにします。
    • アクセス権限>デフォルトの実行ロールの変更で、既存のロールを使用するを選択し、先ほど作成したIAMロールを選択します。
    • トリガーを追加で、Alexa Smart Homeを選択します。
    • アプリケーションIDにスキルIDを貼り付けます。

      Lambda関数のARNをコピーします。サービスエンドポイントを設定するときに、このARNをリージョンごとに追加する必要があります。

AWS Lambdaリージョン

以下の表は、スキルをデプロイできるAlexaリージョンと、それぞれで使用する必要のあるAWS Lambdaリージョンを示しています。Lambda関数は適切なリージョンで作成してください。

エンドポイントのリージョン スキルの言語 AWS Lambdaのリージョン
北米 アラビア語(SA)、英語(CA)、英語(US)、フランス語(CA)、ポルトガル語(BR)、スペイン語(MX)、スペイン語(US) 米国東部(バージニア北部)
ヨーロッパ アラビア語(SA)、英語(UK)、フランス語(FR)、ドイツ語、イタリア語、スペイン語(ES) 欧州(アイルランド)
インド 英語(IN)、ヒンディー語(IN) 欧州(アイルランド)
極東 英語(AU)、日本語 米国西部(オレゴン)

スマートホームスキルは複数の言語で作成できます。詳細については、スマートホームスキルを複数の言語で開発するを参照してください。サポートされる言語はインターフェースによって異なります。詳細については、Alexaインターフェースとサポートしている言語の一覧を参照してください。

サービスエンドポイントを設定する

Alexaはユーザーの発話に応答して、Lambda関数のARNのスマートホームスキルにディレクティブを送信します。AlexaとLambda関数の間のリンクを確立するには、Alexa開発者コンソールのスキル設定でLambdaのARNを指定します。スマートホームページの2.スマートホームのサービスエンドポイントで、Lambda関数のARNを貼り付け、保存をクリックします。

サービスエンドポイントは、スキルの言語とリージョンに基づいて設定します。

  • スキルでサポートする言語とリージョンが1つだけの場合は、デフォルトのARNと選択したリージョンのARNに同じARNを指定します。
  • スキルが複数の言語とリージョンをサポートする場合は、リージョンごとにARNを指定する必要があります。リージョンARNの1つをデフォルトARNとして指定します。

スキルコードを実装する

Alexaは、ユーザーの発話を特定のJSON構造を持つディレクティブに変換します。次に、このディレクティブをスキルに送信します。スキルのLambdaコードがディレクティブを処理し、クラウド経由でデバイスと通信して、リクエストされたアクションを実行します。スキルコードは、リクエストの成功または失敗を示す応答をAlexaに返します。応答には、デバイスの現在の状態が含まれます。

スキルコードの作成には、Lambda関数でサポートされている言語( Node.js、Java、Python、C#、Go、Ruby、PowerShellのいずれか)を使用できます。非コンパイル型のプログラミング言語(PythonやNode.jsなど)の場合は、Lambdaコンソールのコードエディターでコードを記述できます。また、スキルの実装に使用するプログラミング言語に適した開発環境を使用することもできます。別の開発環境でコードを記述する場合は、そのコードをコピーしてLambdaコンソールのエディターに貼り付けるか、コードをzipファイルまたはjarファイルとしてアップロードします。詳細については、Lambdaの開始方法を参照してください。

スキルユーザーに最良のエクスペリエンスを提供するために、スキルコードでは次の機能をサポートする必要があります。

  • 検出 - ユーザーのAlexaアカウントに関連付けられたデバイスエンドポイントを識別します。
  • 機能ディレクティブ - デバイスを制御するディレクティブに応答します。
  • 状態レポート - デバイスの最新の状態をAlexaに通知します。

以下の図は、Alexaアプリ、Alexaサービス、スキルを使用するユーザーとデバイス間の最も一般的な通信フローを示しています。この例では、AlexaアプリのみのアカウントリンクのAuthorization code grantフローを使用します。詳細については、スキルを有効にする際のフローを参照してください。

クリックで拡大表示
  1. ユーザーがAlexaアプリでスキルを有効にします。
  2. Alexaサービスは、デバイス制御クラウドの認可サーバーのログインページにユーザーをリダイレクトして、アカウントリンクフローを開始します。アカウントリンクフロー全体は図に示されていません。
  3. 成功すると、システム内のユーザーアカウントにアクセスするためのアクセストークン(黒字で表示)をAlexaサービスが受け取ります。Alexaは、スキルに送信する後続のディレクティブにこのトークンを含めます。
    アカウントリンクが完了します。
  4. Alexaサービスは、スキルにAlexa.Authorization.AcceptGrantディレクティブを送信して、Alexaイベントゲートウェイの認可フローを開始します。スキルはこれに応答して、スキルとAmazon LWA認可サーバーとの間でAuthorization code grantフローを開始します。スキルは、Amazonユーザーのアクセストークン(青字で表示)を取得し、スキルのバックエンドに保存します。このトークンは、Alexaイベントゲートウェイにイベントを送信するときに必要になります。
  5. ユーザーが、スキルでユーザーのデバイスを検出するようにリクエストします。
  6. Alexaサービスは、スキルにAlexa.Discovery.Discoverディレクティブを送信して、ユーザーのデバイスアカウントに関連付けられているエンドポイントを識別します。スキルは各エンドポイントについて、デバイスのエンドポイント情報とエンドポイントの機能をDiscover.Responseに含めます。
  7. Alexaサービスは、Alexa.ReportStateディレクティブを送信してデバイスの現在の状態をリクエストします。
    スキルはキャッシュされた状態データで応答します。スキルがデバイスに照会する場合もあります。
  8. ユーザーがAlexaアプリでデバイスの電源をオンにします。
  9. Alexaは、スキルにAlexa.PowerController.TurnOnディレクティブを送信します。スキルは、デバイス制御クラウドでAPIを呼び出すか、デバイス上で直接APIを呼び出して、デバイスの電源をオンにします。
  10. ユーザーが手動でデバイスの電源をオフにします。デバイスはスキルに通知を送信します。
  11. これに対応して、スキルはAlexaサービスにAlexa.ChangeReportを送信し、状態の変更をAlexaに通知します。Alexaサービスは、Alexaアプリのデバイスの状態を更新します。

検出を実装する

検出を実装して、Alexaにユーザーのコネクテッドデバイスの機能について通知します。検出の詳細については、Alexa検出についてを参照してください。

検出応答には、ユーザーのデバイスアカウントに関連付けられている各エンドポイントの識別情報と機能を含めます。使用できるAlexa機能インターフェースについては、Alexaインターフェースとサポートしている言語の一覧を参照してください。機能インターフェースごとに、retrievableプロパティとproactivelyReportedプロパティをtrueに設定して、状態レポートのサポートを示します。デバイスで正常性の問題が発生した場合にAlexaがユーザーに通知できるように、必ずAlexa.EndpointHealthのサポートを含めてください。Alexa.EndpointHealthを使用して、OKまたはUNREACHABLEのいずれかのデバイス接続ステータスをAlexaにレポートします。バッテリーの健全性など、健全性状態をレポートすることもできます。また、すべてのエンドポイントにAlexaインターフェースを含める必要もあります。

検出応答の例については、サポートする各インターフェースのドキュメントを参照してください。

機能ディレクティブを実装する

検出応答に含めたエンドポイントの各機能には、デバイスを制御するユーザーリクエストに応答して、Alexaからディレクティブが送信されることがあります。ディレクティブに迅速に応答し、すべてのデバイス機能の状態を応答に含める必要があります。ディレクティブの詳細については、Alexaスキルでサポートする各インターフェースのドキュメントを参照してください。

状態レポートを実装する

デバイスの現在の状態をAlexaが把握できるように、状態レポートを実装します。状態レポートの詳細については、状態および変更レポートについてを参照してください。

Alexaに状態をレポートする方法は3つあります。

  • AlexaがAlexa.ReportStateディレクティブを使って状態をリクエストします。すべてのプロパティ値のスナップショットを含むAlexa.StateReport応答を返します。
  • ディレクティブのAlexa.Responseですべてのプロパティの状態をプロアクティブに送信します。たとえば、TurnOnディレクティブにすべてのプロパティ値のスナップショットを含めることができます。
  • 非同期のAlexa.ChangeReportイベントをプロアクティブに送信して、1つ以上のプロパティが変更されたことを知らせます。イベントには、ほかのすべてのプロパティ値のスナップショットも含めます。

Alexa.ChangeReportイベントおよび非同期のAlexa.Responseメッセージを、Alexaイベントゲートウェイに送信します。このメッセージフローでは、Alexa開発者コンソールでイベントを有効にし、各ユーザーのアクセストークンを取得する必要があります。詳細については、Alexaイベントゲートウェイにイベントを送信するを参照してください。

アカウントリンクを設定する

すべてのスマートホームスキルでは、アカウントリンクを有効にして、AlexaユーザーのIDをシステムのユーザーIDに関連付ける必要があります。たとえば、電球のシステムに、電球のモデルと機能(調光式かどうかなど)を格納するユーザーアカウントがあるとします。ユーザーがAlexaアプリでスキルを有効にすると、Alexaはアカウントリンクプロセスを開始し、システムからアクセストークンを受け取ります。その後、ユーザーがAlexaに電球を暗くするように指示すると、Alexaはスキルにアクセストークンを送信します。このトークンを使用することで、スキルはシステムのユーザーアカウントにアクセスして、電球が調光式かどうかを確認できます。

Alexaは、スマートホームスキルとビデオスキルにOAuth 2.0 Authorization code grant種別を使用します。アカウントリンクを設定するには、OAuthプロバイダーから以下の情報を取得する必要があります。これらのフィールドの詳細については、Authorization code grantを設定するを参照してください。

  • 認可サーバーのログインページのURI - ユーザーがAlexaアプリでスキルを有効にすると、AlexaはこのURIにユーザーをリダイレクトして、ログイン認証情報の入力を求めます。ログインに成功すると、サーバーからAlexaに認可コードが返されます。
  • アクセストークンサーバーのURI - 認可コードをアクセストークンに交換できる、認可サーバーのエンドポイントです。
  • クライアントID - スキルを識別する一意の文字列です。スキルは、Alexaユーザーに代わってリソースサーバーにリクエストを送信します。
  • クライアントシークレット - Alexaは、クライアントIDとクライアントシークレットを使用して、アクセストークンURIで認証を行います。これらの認証情報によってAlexaからのリクエストが識別されます。
  • 認証スキーム - Alexaがアクセストークンサーバーからアクセストークンと更新トークンをリクエストするために使用する、認証の種類を識別します。
  • スコープ - (オプション)ユーザーIDやパスワードなど、スキルユーザーに要求する認証情報のリストです。最大15個まで指定できます。
  • ドメイン - (オプション)認可サーバーがコンテンツをリクエストするドメインのリストです。最大30個まで指定できます。
  • デフォルトのアクセストークンの有効期限 - (オプション)サーバーがメッセージにアクセストークンの有効期限を指定しない場合は、アクセストークンの有効期間を示す秒数を提供する必要があります。

スキルの認可サーバーとセキュリティプロファイルの設定は、Alexa開発者コンソールで行います。スマートホームページで、左側のメニューからアカウントリンクをクリックします。必要な情報を入力し、保存をクリックします。Alexaのリダイレクト先のURLフィールドには、Alexaが使用するリダイレクト先のエンドポイントが表示されます。これらのリダイレクト先URLを認可サーバーに登録する必要があります。

Amazon OAuth認可サーバーのLogin with Amazon(LWA)を使用することも、独自のOAuth 2.0プロバイダーを使用することもできます。LWA認可サーバーとのアカウントリンクを設定する方法の詳細については、スマートホームチュートリアル: ステップ4: アカウントリンクを設定するを参照してください。

スキルに追加機能を実装する

デバイスが在庫センサーをサポートしている場合は、スマートホームデバイスにAmazon Dash replenishmentサービスを追加して、Alexaでデバイスの消耗品や交換部品の監視と再注文を行うことができます。詳しくは、Dash Replenishmentについてを参照してください。

スキルをテストする

スキルコードの開発中、Lambdaコンソールでテストケースを作成して、Alexaからのリクエストをテストできます。詳細については、スマートホームチュートリアル: ステップ2e: Lambda関数をテストするを参照してください。

実装が完了したら、スキルを有効にしてテストを開始できます。

スキルを有効にしてテストを開始するには

  1. Alexaアプリでスキルを有効にします。Alexaはアカウントリンクを実行し、スキルにAlexa.Authorization.AcceptGrantを送信して、スキルをユーザーのAmazonアカウントに接続します。次に、Alexa.Discoverリクエストをスキルに送信してデバイスを検出します。
  2. スキルが正常にデバイスを検出したら、開発者コンソールでスキルをテスト用に有効にする手順を完了します。
  3. 開発者コンソールのテストタブで、Alexaシミュレーターを使用してスキルをテストします。
    検出応答とAlexaアプリで確認できるフレンドリ名を使用して、Alexaにコマンドを伝えます。スキルがサポートしているデバイス機能に固有の発話を使用してください。また、有効な発話と無効な発話の両方でスキルをテストしてください。変更レポートとエンドポイントの正常性を確認するには、デバイスの電源をオフにしてからもう一度オンにします。

スキルコードを繰り返し実行し、テストを続けることができます。アカウントリンクの設定を変更する場合は、Alexaアプリでスキルを無効にしてから再度有効にして、変更後の設定をテストします。検出応答のコードを変更する場合も、Alexaアプリでスキルを無効にしてから再度有効にしてください。スキルのテストとデバッグのオプションについては、スマートホームスキルのデバッグを参照してください。

スキルが完成したら、スキルの公開情報を指定できます。

スキルを公開用に設定する

スキルをAmazon Alexaスキルストアに公開するには、開発者コンソールの公開タブで、スキルに必要なメタデータを入力する必要があります。

スキル情報を入力して保存したら、スキルをベータテスト用に公開するか、認定の申請をすることができます。詳細については、スマートホームスキル公開のガイドを参照してください。

スキルのベータテストを行う(任意)

必要に応じて、スキルのベータテストをセットアップできます。ベータテストでは一般公開はせず、個人的に選択した限定的なテストグループにスキルを公開します。詳細については、スキルのベータテストを参照してください。

スキルの認定を申請する

スキルを公開する準備が整ったら、認定の申請をします。スキルの認定の詳細については、スキルをテストして認定を申請するを参照してください。

  • 開発者コンソールの認定ページで、検証テストを実行します。これらのテストにより、スキルの認定を申請する前に修正する必要のある問題を特定できます。
  • スキルがAlexaのポリシーガイドラインを満たしていることを確認します。これらのガイドラインは、スキルがあらゆるユーザーに適していることを確認するために役立ちます。これらのガイドラインに従うことで、Alexaユーザーのプライバシーと公益を守ることができます。
  • スキルがAlexaのセキュリティ要件を満たしていることを確認します。ユーザーからの信頼は非常に重要です。ユーザーデータを保護するために、スキルはこれらのセキュリティ要件を満たしている必要があります。

公開後にスキルの修正やアップデートを行う

Amazonでスキルがエンドユーザーに公開されると、スキルステータスが「公開中」になります。スキル設定やLambda関数に変更を加えた場合は、そのつど再認定を受ける必要があります。スキルステータスが「公開中」になると、新しい「開発中」のバージョンが自動的に開発者コンソールに作成されます。このバージョンには、元の公開中のバージョンと同じ情報が登録されています。変更は、この開発中のバージョンに対して行います。更新したスキルを申請するときは、開発者コンソールのテストの手順に、すべての変更について詳細に説明した変更ログを追加します。詳細については、公開後にスキルの修正やアップデートを行うを参照してください。

Lambda関数を変更するには

  1. 新しいLambda関数と新しいARNを作成します。
  2. 公開中のLambda関数のスキルコードを、新しいLambda関数にコピーします。
  3. 新しいLambda関数でスキルコードを更新します。
  4. スキルの開発段階で、Lambda ARNの設定を更新して、新しいLambda関数のARNを指すようにします。

更新されたスキルがAmazonで認定されると、Alexaは新しいLambda ARNにリクエストを送信します。前のLambda関数は削除することも、将来の開発や更新のために使用することもできます。