リビングルームデバイス向けビデオスキル



リビングルームのエンターテイメントデバイス向けビデオスキル

リビングルームのエンターテイメントデバイスとは、セットトップボックス、ゲームコンソール、スマートTVのことを指します。ユーザーがこれらのタイプのデバイスを製作しているデバイスメーカーであれば、ビデオスキルを直接これらのデバイスに組み込んで、エンドユーザーがアプリを起動してチャンネルを切り替えるなどの動作ができるようにします。ここでは、開発者ポータルでのビデオスキルの作成、AWS Lambda関数の作成、スキルのコンフィギュレーションとテスト、認定の申請手順について説明します。

プロセスの概要

リビングルームのエンターテイメントデバイス用ビデオスキルを作成するには、まずAmazon開発者コンソールでビデオスキルを作成します。スキルの作成後、スキルの情報、コンフィギュレーション、AWS Lambda関数としてホストされたスキルコードを提供します。

AWS LambdaはビデオスキルAPIからのリクエストを処理するアマゾンウェブサービスの機能で、デバイスまたはビデオストリーミングサービスと通信します。Lambda関数からデバイスへの通信を有効にするには、クラウドやサービスがOAuth 2.0 authorization code grant種別に対応している必要があります。ビデオスキルの登録を完了するには、認証エンドポイント、クライアントID、クライアントシークレットの情報が必要です。

Amazon開発者として登録してスキルを作成する

新しいビデオスキルを作成するには、Alexa Skills Kit(ASK)開発者コンソールのアカウントが必要です。まだアカウントを作成していない場合は、開発者コンソールに移動して作成してください。登録は無料です。登録が完了したら、以下を実行します。

  1. ASK開発者コンソールを開いて、ログインします。
  2. スキルの作成ボタンをクリックします。
  3. スキル名を入力します。スキル名に、機能制限があることを示す文言は使用できません。たとえば、「基本」、「簡易版」、「簡単」などはスキルの名前には使わないでください。
  4. デフォルトの言語を選択します。
  5. スキルに追加するモデルを選択ページで、ビデオを選択します。ビデオスキルはプリビルドモデルです。
  6. スキルの作成をクリックします。
  7. スキルIDをクリップボードにコピーします。IDは次のような形式です。amzn1.ask.skill.1a2b55555-c325-1234-d56e-1f234d5e6a78

開発者コンソールの使用方法の詳細については、開発者コンソールを使用したスキルの管理を参照してください。

次に、ビデオスキルのサービスエンドポイントを設定できるよう、Lambda関数を作成します。

Lambda関数を作成する

AWSアカウントとAWSに関する基本的な知識が必要です。

ビデオスキルのコードは、AWSのLambda関数としてホストされます。AWS Lambdaとは、クラウドでコードを実行できるサービスで、サーバーを管理する必要がありません。ビデオスキルAPIはスキルにリクエストを送信します。コードはリクエストを解析し、必要なアクションを実行して応答します。

AWSLambdaBasicExecutionRoleポリシーを添付したAWSのIAMロールが必要です。お持ちでない場合、Lambda関数の作成手順を実施する前にIAMロールを作成するにはの手順を実施してください。このポリシーを添付したロールをお持ちの場合は、Lambda関数を作成するにはに進んでください。

IAMロールを作成するには

IAMコンソールを開きます。

  • ロールを選択し、ロールの作成をクリックします。
  • AWSサービスを選択し、次にLambdaを選択します。次のステップ: アクセス権限をクリックします。
  • フィルターのボックスで「basic」と入力し、AWSLambdaBasicExecutionRoleを選択します。次のステップ: タグをクリックします。
  • 次のステップ: 確認をクリックします。
  • このロールを確認するには、ロール名を入力してロールの作成を選択します。

Lambda関数を作成するには

AWS Lambdaコンソールに移動します。

  1. コンソールの右上で、選択したリージョンが正しいかどうか確認します。

    • 英語(米国)のスキルの場合は米国東部(バージニア北部)
    • 英語(英国)またはドイツ語のスキルの場合はEU(アイルランド)

    正しいリージョンを選択することで、レイテンシーの問題が起こらないようにすることができます。

  2. 関数の作成を選択します。
  3. 一から作成を選択します。
  4. 基本的な情報
    1. 関数の名前を入力します。
    2. ランタイムでは、Python 2.7を選択します。次の例を考えてみましょう。
    3. 既存のロールを使用する場合、以前の手順で作成したロールを選択します。
    4. 関数の作成を選択します。
  5. 設定ページのDesignerで、Alexa Smart Homeを選択します。
  6. トリガーの設定アプリケーション IDボックスに、ユーザーのスキルIDをペーストします。
  7. 追加を選択してから保存します。
  8. AWS Lambdaコンソールの関数リストに戻ります。
  9. 作成した関数を選択します。
  10. 関数コードセクションまで下にスクロールします。
  11. 以下のPythonコードをコピーし、コードエディターに貼り付けます。このコードはビデオスキル実装の開始点となります。コードはメッセージヘッダーの名前空間と名前の値によってリクエストの種類を判断します。名前空間はリクエストがDiscoveryChannelControlかを示し、handleDiscovery関数またはhandleChannelControl関数が呼び出されます。ChannelControlリクエストの場合、nameプロパティはリクエストの種類を示します。このコード例では、検出された唯一のリクエストの種類はChangeChannelです。応答は完全には実装されていません。ユーザーがスキルに対して行う可能性のあるすべての種類のリクエストを処理し、適切な応答のヘッダーとペイロードを提供する必要があります。リクエストと応答のすべてのメッセージの詳細については、Alexa.DiscoveryAlexa.PlaybackControllerなどのインターフェースのリファレンスを参照してください。

    def lambda_handler(event,context):
        namespace = event['directive']['header']['namespace']
        if namespace == 'Alexa.Discovery':
            return handleDiscovery(context,event)
        elif namespace == 'Alexa.ChannelController':
            return handleChannelControl(context,event)
    
    def handleDiscovery(context, event):
        payload = {}
        header = {
            "messageId": event['directive']['header']['messageId'],
            "name": "Discover.Response",
            "namespace": "Alexa.Discovery",
            "payloadVersion": "3"
        }
        if event['directive']['header']['name'] == 'Discover':
            payload = {
                "endpoints": [
                    {
                        "capabilities": [
                            {
                                "interface": "Alexa.RemoteVideoPlayer",
                                "type": "AlexaInterface",
                                "version": "1.0"
                            },
                            {
                                "interface": "Alexa.ChannelController",
                                "type": "AlexaInterface",
                                "version": "1.0"
                            },
                            {
                                "interface": "Alexa.PlaybackController",
                                "version": "1.0",
                                "type": "AlexaInterface"
                            }
                        ],
                        "endpointId": "videoDevice-001",
                        "description": "ユーザーに表示されるデバイスの説明です",
                        "displayCategories": [],
                        "friendlyName": "Upstairs Amazon Player",
                        "manufacturerName": "Amazon"
                    }
                ]
            }
        response = {
            'header': header,
            'payload': payload
        }
        return {'event': response}
    
    def handleChannelControl(context, event):
        payload = {}
        header = {}
        messageId = event['directive']['header']['messageId']
        if event['directive']['header']['name'] == 'ChangeChannel':
            header = {
                "namespace":"Alexa.ChannelController",
                "name":"ChannelChanged",
                "payloadVersion":"3",
                "messageId": messageId
            }
        response = {
            'header': header,
            'payload': payload
        }
        return { 'event': response }
    

    コードをペーストしたら、保存をクリックします。

  12. コードエディターの上にあるハンドラでは、デフォルトの名前lambda_function.lambda_handlerのままにします。関数ハンドラーはLambda関数のメインのエントリポイントです。fileName.entryPointFunctionNameの形式で指定します。この例では、ファイル名がlambda_functionで、lambda_handler関数がこのコードのエントリポイントです。
  13. ページの一番上にあるARNをLambda関数にコピーします。この値は、Alexa Skills Kit 開発者コンソールでビデオスキルの設定を完了するのに使用します。ARNは次の形式になっています:arn:aws:lambda:us-east-1:123456789012:function:myVideoFunction

AWSコンソールでLambda関数をテストする

AWS LambdaコンソールのDiscoveryリクエストに対してクイックテストを行うには、以下の手順に従います。

  1. AWS Lambdaコンソールの関数ページに移動します。
  2. 以前の手順で作成したビデオスキルの関数を選択します。
  3. テストを選択します。
  4. イベント名に、このテストイベントの名前を入力します。次に、コードエディターのテキストボックスのコンテンツ全体を以下のコードで置き換えます。

    {
      "directive": {
        "header": {
          "messageId": "12efe1cb-7a9c-4baf-9776-074d9166b5b8",
          "name": "Discover",
          "namespace": "Alexa.Discovery",
          "payloadVersion": "3"
        },
        "payload": {
          "scope": {
            "type": "BearerToken",
            "token": "some-access-token"
          }
        }
      }
    }
    
  5. 作成を選択して、テストを作成します。
  6. 再度テストを選択してテストを実行します。成功したら、実行結果は以下のようになります。

    {
      "event": {
        "header": {
          "payloadVersion": "3",
          "namespace": "Alexa.Discovery",
          "name": "Discover.Response",
          "messageId": "12efe1cb-7a9c-4baf-9776-074d9166b5b8"
        },
        "payload": {
          "endpoints": [
            {
              "endpointId": "videoDevice-001",
              "capabilities": [
                {
                  "interface": "Alexa.RemoteVideoPlayer",
                  "version": "1.0",
                  "type": "AlexaInterface"
                },
                {
                  "interface": "Alexa.ChannelController",
                  "version": "1.0",
                  "type": "AlexaInterface"
                },
                {
                  "interface": "Alexa.PlaybackController",
                  "version": "1.0",
                  "type": "AlexaInterface"
                }
              ],
              "manufacturerName": "Amazon",
              "friendlyName": "上の階のAmazonプレーヤー",
              "displayCategories": [],
              "description": "ユーザーに表示されるデバイスの説明です"
            }
          ]
        }
      }
    }
    

開発者コンソールでスキルの登録を完了する

  1. Alexa Skills Kit開発者コンソールに戻り、作成したビデオスキルを開きます。
  2. ビデオスキルサービスのエンドポイントデフォルトのエンドポイントボックスに、作成したLambda関数のARNをペーストし、 保存を選択します。

アカウントリンク情報を提供する

アカウントリンクページを選択します。このセクションでは、OAuth 2.0プロバイダーからのアカウント情報が必要です。ユーザーはこの情報を使用して、デバイス制御クラウドのアカウントとスマートホームスキルを関連付けることができます。このセクションでは、Login with Amazonまたは別のOAuthプロバイダーを利用できます。以下を指定します。

  • OAuthプロバイダーの認証画面のURI
  • OAuthプロバイダーのクライアントID
  • OAuthプロバイダーで必要な場合はスコープ
  • OAuthプロバイダーのアクセストークンのURI
  • クライアントIDに関連付けられたクライアントシークレット

必須フィールドの詳細と手順については、Authorization code grantを設定するを参照してください。ビデオスキルのアカウントリンクの概要については、以下を参照してください。

スキルをテストする

実装が完了し、Lambda関数のテストが完了したら、スマートホームスキルの機能をテストできます。

  1. スマートホームのトリガーを追加し、有効にしていることを確認してください。Lambdaコンソールでスキルを選択すると、Alexa Smart Homeトリガーが表示されます。
  2. Alexaアプリ(Android、iOS、ウェブ(https://alexa.amazon.com)で利用可能)に、開発者アカウントと同じアカウントでサインインします。
  3. Alexaアプリでスキルを検索します。スキルに移動し、すべてのスキルページ右上隅の有効なスキルをタップします。開発スキルまでスクロールして、スキルを見つけます。
  4. 有効にするボタンをクリックしてスキルを有効にすると、スキルをデバイス制御クラウドにアカウントリンクするページにリダイレクトされます。アカウントリンクを完了できない場合、デバイス制御クラウドの有効な認証情報を使用していることを確認します。それでも完了できない場合、開発者コンソールで提供したアカウントリンク情報に問題がある可能性があります。ヘルプが必要な場合、開発者フォーラムのAlexa: Debugging account linkingを参照してください。後でアカウントリンクを削除する場合、スキルタブでスキルを無効にする必要があります。
  5. 開発者コンソールに戻り、スキルを開いてテストページのスライダーをはいに動かします。Alexaシミュレーターを使用して、スキルがサポートする機能を使った発話でAlexaにコマンドを伝えます。スキルを有効な発話と無効な発話、ターゲットデバイスが電源オフの状態など、さまざまな条件でテストします。発話のリストと推奨のテストケースについては、テストガイドを参照してください。提供されるテストケースには、スキル認定のテスト中に使用するものによく似ているものもあります。認定の申請前にこれらのテストを実行して問題を解決して、スキルをすみやかにユーザーに公開することが重要です。セルフテスト中に問題が見つかっても、通常は簡単に修正できるので、1回目の認定で合格する可能性が高くなります。
  6. スマートホームスキルのパフォーマンステストで満足できる結果が出たら、ベータテストまたは認定の申請を行うことができます。

公開情報を提供する

次に公開ページに移動します。ここで指定する情報はAlexaアプリのスキルで表示されます。オプションと明記されていない限り、入力が必須です。

  • 公開を選択し、日本語(日本)ストアでのプレビューページで、以下を指定します。

    • 公開名
    • 説明
    • 詳細な説明
    • サンプルフレーズ
    • 小さなスキルアイコン
    • 大きなスキルアイコン
    • キーワード
    • プライバシーポリシーのURL
    • 利用規約のURL
  • 保存して続行をクリックします。

プライバシーとコンプライアンスページの質問に答えます。テストの手順に、テストアカウントの認証情報を提供します。

  • 保存して続行をクリックします。
  • 公開範囲ページで、公開、Alexa for Businessに参入している企業のいずれかにチェックします。
  • スキルが利用できる国と地域を選択します。
  • 保存して続行をクリックします。

オプションのベータテストを実施する

この時点で、ベータテストボタンが有効になっています。すべての情報を入力してベータテストを開始できます。詳細については、スキルのベータテストを行うを参照してください。

スキルの認定を申請する

すべてのフィールドの入力が完了し、大きな緑色のチェックマークが表示されたら、スキルの認定を申請できます。

  • ページの下の審査を申請をクリックします。

お疲れさまでした。 ビデオスキルが完成し、認定の申請も完了しました。数日中に認定チームからスキルのステータスについて、合格または修正すべき問題がある旨、連絡が入ります。スキルが認定に合格しユーザーに公開されると、開発者コンソールのステータスが公開中に変わります。

公開中のスキルの変更を申請する

スキルのステータス公開中になると、それ以降の変更には認定が必要になります。たとえば、スキルのメタデータやAWS Lambda関数を変更した場合、スキルは再度審査を受ける必要があります。認定の審査は変更内容によって異なります。Lambda関数を更新した場合は追加の審査が必要になる場合があります。

新しい開発中のバージョンが自動的に開発者コンソールに作成され、公開中のスキルのすぐ下に表示されます。このバージョンには、元の公開中のバージョンと同じ情報が登録されています。このバージョンを使用してスキルの開発を続け、改良を加えたり、新しい機能を追加することができます。

更新したスキルの認定を申請するときには、テストの手順フィールドに変更内容の詳細を記載した変更履歴を追加します。

Lambda関数を更新する

AWS Lambda関数を更新するには、以下を実施します。

  1. 新しいARNでLambda関数を新規作成し、コードを公開中のLambda関数から新しいLambda関数にコピーします。
  2. 新しいLambda関数を更新します。公開中のスキルをサポートしているLambda関数を更新しないでください。また、Lambdaのエイリアスとバージョニングはしないでください。スキルを更新すると正しく動作しなくなるためです。
  3. 開発中のスキルで、Lambda ARNのコンフィギュレーションを、を新しいLambda ARNを指定するように更新します。

スキルが再認定されて公開中になると、スキルは新しいLambda ARNを使用するようになります。前のLambda関数は削除することもできますし、将来の開発や更新のために使用することもできます。