Alexa-hostedスキルでメディアファイルを使用する
Alexa-hostedスキルを作成すると、AlexaはコードとリソースをAWSに保存します。Alexa-hostedスキルの詳細については、Alexa-hostedスキルを使用してスキルをエンドツーエンドで作成するを参照してください。
Alexa-hostedスキルを作成すると、メディアストレージ用のAmazon S3バケットにアクセスできます。DynamoDBテーブルは、使用制限内で無料でストレージを提供するAWS無料利用枠の一部です。S3バケットに保存されたすべてのメディアファイルは、AWS Key Management Service(KMS)が管理する暗号化キーを使って、保管時に完全に暗号化されます。詳細については、Protecting S3 data using server-side encryption with AWS KMSを参照してください。
次のS3アクションを使用できます: GetObject、PutObject、DeleteObject、ListBucket、ListAllMyBuckets。ファイルにパブリック読み取りアクセスが必要な場合は、このトピックで後述する例のように、署名付きURLを使用します。
Amazon S3バケットを表示する
Alexa-hostedスキルのAmazon S3バケットを確認するには
- Alexa開発者コンソールを開いて、ログインします。
- スキル一覧で、表示するスキルの名前をクリックします。
- コードエディタタブをクリックします。
- ツールバーで、S3 StorageアイコンをクリックしてAWS S3コンソールを開きます。
Amazon S3バケット名とMedia/フォルダが表示されます。
Node.jsでメディアファイルを使用する
スキルのindex.js
からAmazon S3上のファイルにアクセスするには、util.js
を読み込み、ユーティリティ関数getS3PreSignedUrl()
を使用して署名付きURLを取得する必要があります。URLの有効期間は60秒です。また、ユーティリティ関数から有効期間を上書きすることはできません。
画像ファイルの例
次のコード例では、ファイルpicture.jpg
を取得します。
const Util = require('./util.js');
handle(handlerInput)
{
const pictureUrl = Util.getS3PreSignedUrl("Media/picture.jpg");
return handlerInput.responseBuilder
.speak('画像付きのハローワールドです')
.withStandardCard('カードタイトル', 'カードテキスト', pictureUrl)
.getResponse();
}
音声ファイルの例
次のコード例では、ファイルaudio.mp3
を取得します。
const Util = require('./util.js');
handle(handlerInput)
{
const audioUrl = Util.getS3PreSignedUrl("Media/audio.mp3").replace(/&/g,'&');
return handlerInput.responseBuilder
.speak(`音声ファイルを再生します。<audio src="${audioUrl}"/>`)
.getResponse();
}
Pythonでメディアファイルを使用する
画像ファイルの例
次のコード例では、image.jpg
ファイルを取得します。
from ask_sdk_model import ui
from utils import create_presigned_url
def handle(self, handler_input):
# type: (HandlerInput) -> Response
image_url = create_presigned_url("Media/image.png")
return (
handler_input.response_builder
.speak("画像付きのハローワールドです")
.set_card(ui.StandardCard(title="Card Title",
text="これはサンプルカードです",
image=ui.Image(small_image_url=image_url, large_image_url=image_url)))
.response
)
音声ファイルの例
次のコード例では、ファイルaudio.m4a
を取得します。
PlayDirective
の詳細については、Alexa Skills Kit SDK for Pythonを参照してください。
from ask_sdk_model.interfaces.audioplayer import AudioItem, Stream, PlayDirective, PlayBehavior
from utils import create_presigned_url
def handle(self, handler_input):
# type: (HandlerInput) -> Response
audio_url = create_presigned_url("Media/audio.m4a")
handler_input.response_builder
.add_directive(PlayDirective(play_behavior=PlayBehavior.REPLACE_ALL,
audio_item=AudioItem(stream=Stream(token="1234AAAABBBBCCCCCDDDDEEEEEFFFF",
url=audio_url, offset_in_milliseconds=10, expected_previous_token=None))))
return (
handler_input.response_builder.response
)
関連トピック
最終更新日: 2022 年 08 月 25 日