Lambdaのカスタマイズ
このガイドでは、Lambda関数でカスタマイズできる最も重要な部分を確認および更新する際に役立つタスクについて説明します。
- カタログ名の使用
- カタログコンテンツの使用
- データベース実装の使用
- 表示可能な新しいメタデータを検索結果に追加する方法
Handler
クラス- ランディングページのカテゴリー数のカスタマイズ
- 次のステップ
カタログ名の使用
カタログ名の更新は、スキルの作成前か、最初のデプロイ後に行うことができます。
ビデオスキルの作成前
ontv
ではなく独自のカタログを使用するには、以下の手順に従います。
-
./lambda/src/utils/constants.js
でCATALOG_NAME
を独自のカタログ名に変更します。次に例を示します。export const Constants = { ... // 独自のカタログを使用する場合は、独自のカタログ名に置き換えます。 CATALOG_NAME: 'mycatalog', ... }
./infrastructure/video-skill/skill.json
ファイルを編集して、スキルのマニフェストのカタログ名を変更します。具体的には、sourceId
の値を更新します。次に例を示します。"catalogInformation": [ { "type": "INGESTED_CONTENT_IDENTIFIER", "sourceId": "mycatalog" } ]
- 参照ビデオスキルのインストール、ビルド、デプロイの 手順3に進みます。
ビデオスキルの作成後
スキルが既に存在する場合は、以下の操作を行う必要があります。
- Alexa開発者コンソールを開きます(このリンクを使用して、既存のスキルを表示します)。
- スキルの [編集] をクリックします。
- 独自のカタログ名で [国固有の設定] を更新します。
- [保存] をクリックします。
- コンピューターで
--update --lambda
CLIコマンドを実行します。
カタログコンテンツの使用
./lambda/src/database/database.js
のvideoDatabase
を独自のビデオデータベースに置き換えます。
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'
}
videoUrl
およびurl
の値は、CLIツールによって生成された、S3バケットのcontent
フォルダの構造に関連しています。このデータベース構造は、Alexaの標準に準拠しています(たとえば、runTimeInMilliseconds
はASKで定義されているビデオの再生時間です)。この構造の定義に合わせて、独自のビデオコンテンツメタデータを更新します。
--update --lambda
を実行してください。データベース実装の使用
独自のデータベースへのアクセスや検索を有効にするには、./lambda/src/access/in-memory-db-access.js
のメソッドを独自の実装に置き換えます。独自の実装を適切に組み込むには、次のような.filter
メソッドをすべて更新します。
.filter(item => {
return this._commonIdentifierMatch(item.name, videoName)
})
表示可能な新しいメタデータを検索結果に追加する方法
検索を行う発話の結果に新しいメタデータを追加する場合は、次の手順に従う必要があります。
- 新しいメタデータを
database.js
ファイルに追加します(既存のメタデータは変更しないことを強くお勧めします)。 VideoData
クラスのコンストラクター(./lambda/src/models/database-models/video-metadata.js
にあります)に新しいメタデータを追加します。- 追加のメタデータの実装が検索結果に反映されるようにLambda関数を変更します。
また、ウェブプレーヤーが特別なトークンplaybackContextToken
を介して、新しく作成されたメタデータにアクセスできるようにする必要があります。このトークンは、Lambda関数からAlexaに返されます。playbackContextToken
にはメディアを表す値が含まれており、ハンドラーを介してウェブプレーヤーに渡されます。詳細については、次のガイドを参照してください。
例
各ビデオの制作会社を文字列の配列としてメタデータに追加する場合は、以下の手順に従います。
./lambda/src/database/database.js
ファイルを開きます。-
次のような新しい
production
プロパティをオブジェクトに追加します。{ id: 'MV009844570000', name: 'トレイン・ミッション', production: ['スタジオカナル', 'TF1フィルム・プロダクション', 'The Picture Company', 'Obra Films', 'Canal+', 'Cine +', 'TF1', 'Amazonプライム・ビデオ'], ... }
./lambda/src/models/database-models/video-metadata.js
ファイルのVideoData
クラスを開きます。- このクラスのコンストラクターに、次の行を追加します。
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.js
のNUM_CATEGORIES_ON_LANDING_PAGE
を変更することによって、デバイスの画面サイズに応じて、ランディングページに最大5つのカテゴリーを表示できます。
次のステップ
ウェブプレーヤーについてを参照してください。