Alexa-hostedスキルでメディアファイルを使用する


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バケットを確認するには

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキル一覧で、表示するスキルの名前をクリックします。
  3. コードエディタタブをクリックします。
  4. ツールバーで、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を取得します。

クリップボードにコピーされました。

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 日