開発者コンソール

Lambda関数のカスタマイズ


Lambda関数のカスタマイズ

このガイドでは、Lambda関数でカスタマイズできる最も重要な部分を確認および更新する際に役立つタスクについて説明します。

カタログ名の使用

カタログ名の更新は、スキルの作成前か、最初のデプロイ後に行うことができます。

ビデオスキルの作成前

ontvではなく独自のカタログを使用するには、以下の手順に従います。

  1. ./lambda/src/utils/constants.jsCATALOG_NAMEを独自のカタログ名に変更します。次に例を示します。

    export const Constants = {
      ...
      // 独自のカタログを使用する場合は、独自のカタログ名に置き換えます。
      CATALOG_NAME: 'mycatalog',
      ...
    }
    
  2. ./infrastructure/video-skill/skill.jsonファイルを編集して、スキルのマニフェストのカタログ名を変更します。具体的には、sourceIdの値を更新します。次に例を示します。
        "catalogInformation": [
          {
            "type": "INGESTED_CONTENT_IDENTIFIER",
            "sourceId": "mycatalog"
          }
        ]
    
  3. 参照ビデオスキルのインストール、ビルド、デプロイの 手順3に進みます。

ビデオスキルの作成後

スキルが既に存在する場合は、以下の操作を行う必要があります。

  1. Alexa開発者コンソールを開きます(このリンクを使用して、既存のスキルを表示します)。
  2. スキルの [編集] をクリックします。
  3. 独自のカタログ名で [国固有の設定] を更新します。
  4. [保存] をクリックします。
  5. コンピューターで--update --lambdaCLIコマンドを実行します。

カタログコンテンツの使用

./lambda/src/database/database.jsvideoDatabaseを独自のビデオデータベースに置き換えます。

Lambda関数では、./lambda/src/database/database.jsにメモリ内データベースが格納されます。このデータベースの目的は、すべてのビデオタイトルとS3ビデオパスを管理し、プッシュすることです。デフォルトでは、すべてのビデオパスはサンプルビデオ「ビッグバックバニー」につながっています。ただし、「アイアンマン2」は例外で、「エレファントドリーム」というビデオにマッピングされます。

一般的なビデオオブジェクトは次のようなものです。

{
  id: 'MV009844570000',
  name: 'トレイン・ミッション',
  contentType: 'ON_DEMAND',
  videoUrl: 'big-buck-bunny/Bug.Buck.Bunny.mp4',
  actors: ['リーアム・ニーソン', 'ヴェラ・ファーミガ', 'パトリック・ウィルソン'],
  genre: ['アクション', '人気', 'おすすめの映画'],
  thumbnailImageDescription: 'トレイン・ミッション',
  thumbnailImageSources: [
    {
      url: 'big-buck-bunny/Big.Buck.Bunny.thumbnail.png',
      size: 'SMALL',
      widthPixels: 720,
      heightPixels: 480
    }
  ],
  contentDescription: 'movie',
  parentalControl: 'NOT_REQUIRED',
  absoluteViewingPositionMilliseconds: '0',
  itemType: 'VIDEO',
  releaseYear: '2018',
  selectionAction: 'PLAY',
  runTimeInMilliseconds: 635000,
  runTimeDisplayString: '9分',
  closedCaptionStatus: 'AVAILABLE',
  closedCaptionDisplayString: '字幕',
  viewingDisplayString: '今すぐ再生',
  reviewsTotalReviewCount: '84823',
  reviewsType: 'FIVE_STAR',
  reviewsRatingDisplayString: '6.3',
  ratingCategory: 'G',
  webPlayerContentType: 'VIDEO'
}

このデータベース構造は、Alexaの標準に準拠しています(たとえば、runTimeInMilondsはASKで定義されているビデオの再生時間です)。この構造の定義に合わせて、独自のビデオコンテンツメタデータを更新します。

データベース実装の使用

独自のデータベースへのアクセスや検索を有効にするには、./lambda/src/access/in-memory-db-access.jsのメソッドを独自の実装に置き換えます。独自の実装を適切に組み込むには、次のような.filterメソッドをすべて更新します。

.filter(item => {
  return this._commonIdentifierMatch(item.name, videoName)
})

表示可能な新しいメタデータを検索結果に追加する方法

検索を行う発話の結果に新しいメタデータを追加する場合は、次の手順に従う必要があります。

  1. 新しいメタデータをdatabase.jsファイルに追加します(既存のメタデータは変更しないことを強くお勧めします)。
  2. VideoDataクラスのコンストラクター(./lambda/src/models/database-models/video-metadata.jsにあります)に新しいメタデータを追加します。
  3. 追加のメタデータの実装が検索結果に反映されるようにLambda関数を変更します。

また、ウェブプレーヤーが特別なトークンplaybackContextTokenを介して、新しく作成されたメタデータにアクセスできるようにする必要があります。このトークンは、Lambda関数からAlexaに返されます。playbackContextTokenにはメディアを表す値が含まれており、ハンドラーを介してウェブプレーヤーに渡されます。詳細については、次のガイドを参照してください。

各ビデオの制作会社を文字列の配列としてメタデータに追加する場合は、以下の手順に従います。

  1. ./lambda/src/database/database.jsファイルを開きます。
  2. 次のような新しいproductionプロパティをオブジェクトに追加します。

    {
      id: 'MV009844570000',
      name: 'トレイン・ミッション',
      production: ['スタジオカナル', 'TF1フィルム・プロダクション', 'The Picture Company', 'Obra Films', 'Canal+', 'Cine +', 'TF1', 'Amazonプライム・ビデオ'],
      ...
    }
    
  3. ./lambda/src/models/database-models/video-metadata.jsファイルのVideoDataクラスを開きます。
  4. このクラスのコンストラクターに、次の行を追加します。
    this.production = options.production
    

Handlerクラス

このセクションでは、Lambda関数とウェブプレーヤーの間で行われるやり取りを理解できるよう、このクラスの概要を説明します。この時点では、このクラスをカスタマイズする必要はありません。

Handlerは、Alexaからリクエストディレクティブを受け取るメインクラスです(.lambda/src/handler/handler.jsにあります)。ディレクティブの種類に応じて、このクラスはディレクティブ固有のハンドラーにリクエストを渡します。すべてのディレクティブがサポートされています。

Handlerクラスには、参照プロジェクトに固有のディレクティブが追加されています。デバイスでの実行中にウェブプレーヤーがLambda関数を再度呼び出す可能性があるため、次のディレクティブもサポートされています。

  • UPDATE_VIDEO_PROGRESSは、既知の最終タイムスタンプを更新し、ビデオストリーミングをサポートする働きをします。これにより、ユーザーがビデオの視聴を途中で終了し、後で同じビデオの視聴を再開した場合、ユーザーは中断した場所からビデオを再生できます。
  • REFRESH_WEB_PLAYER_CREDENTIALSを使用すると、ウェブプレーヤーのセキュリティIAM認証情報の有効期限が切れる前に、認証情報を更新できます。

ランディングページのカテゴリー数のカスタマイズ

./lambda/utils/constants.jsNUM_CATEGORIES_ON_LANDING_PAGEを変更することによって、デバイスの画面サイズに応じて、ランディングページに最大5つのカテゴリーを表示できます。

次のステップ

ウェブプレーヤーについてを参照してください。