はじめに
せっかくEcho Show 5を買ったわけなので画面を生かすスキルを練習がてらつくってみました。導入はとても簡単でした。
セットアップ
せっかく前回自分用のテンプレートをつくってみたわけなので、それを使います。
ask new --url https://asktemplatesstack-bucket83908e77-x9vhv4xdr8m4.s3-ap-northeast-1.amazonaws.com/templates.json
上記を実行したらテンプレートの選択画面に移るので、「Hello TS」を選びます。今回は多言語対応はしないので余計なファイルは鬱陶しいので消します(本当はどっちでもいいですが)。
ビデオテスト再生を有効化する
カスタムスキルでビデオ再生をするにはスキルマニフェストで**CustomInterface**というインターフェースの列挙値を定義します。テンプレートをベースにこんな感じで書き換えました。
{
"manifest": {
"publishingInformation": {
"locales": {
"ja-JP": {
"name": "ビデオテスト",
"summary": "ビデオテスト",
"description": "ビデオテスト",
"examplePhrases": [
"アレクサ、ビデオテストを開いて",
"再生",
"ヘルプ"
],
"keywords": []
}
},
"isAvailableWorldwide": false,
"testingInstructions": "Sample Testing Instructions.",
"category": "KNOWLEDGE_AND_TRIVIA",
"distributionCountries": []
},
"apis": {
"custom": {
"endpoint": {
"sourceDir": "lambda/custom",
"uri": "ask-custom-video-skill-test-default"
},
"interfaces": [
{
"type": "VIDEO_APP"
}
]
}
},
"manifestVersion": "1.0"
}
}
下の方にinterfaces
の中にVIDEO_APP
が呼び出されています。この宣言によってカスタムスキルでビデオ再生を有効化することができます。
動画を再生するAPIを呼び出す
コーディングのところですが、これが一番簡単でした。addVideoAppLaunchDirective(url, title)
という関数を呼び出すだけです。この関数を用いたPlayVideoIntentHandler
をこんな感じで実装すれば最低限の動画再生程度を行うことができます。
const PlayVideoIntentHandler: Alexa.RequestHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'PlayVideoIntent'
)
},
handle(handlerInput) {
const speakOutput = '動画を再生します。'
return handlerInput.responseBuilder
.speak(speakOutput)
.addVideoAppLaunchDirective('https://example.mp4', 'title')
.getResponse()
},
}
ビデオの形式など詳しい情報はこちらに記載されています。
さいごに
全体的なコードはここで公開しています。ただ、このビデオAPIの問題点として、画面がない端末でビデオを再生するAPIを実装すると**「ターゲットの端末では、指定されたディレクティブがサポートされていません。」**という音声を返します。本格的に開発するのであれば、このへんの対策が必要になりそうです。