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



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

Alexa-hostedスキルを作成すると、AlexaはコードとリソースをAWSに保存します。Alexa-hostedスキルの詳細については、Alexa-hostedスキルを使用してスキルをエンドツーエンドで作成するを参照してください。

Alexa-hostedスキルを作成すると、メディアストレージ用のAmazon S3バケットにアクセスできます。Amazon S3の使用は無料利用枠内に制限されています。 月あたり、5 GBのストレージ、20,000件のGETリクエスト、2,000件のPUTリクエスト、15 GBのデータ転送を利用できます。Alexa-hostedスキルは、メディアファイルにAWSでサポートされている暗号方式を使用します。次のS3アクションを使用できます:GetObject、PutObject、DeleteObject、ListBucket、ListAllMyBuckets

ファイルにパブリック読み取りアクセスが必要な場合は、このトピックで後述する例のように、署名付きURLを使用します。

Amazon S3バケットを表示する

Alexa-hostedスキルのAmazon S3バケットを確認するには

  1. Alexa開発者コンソールを開いて、ログインします。
  2. スキル一覧で、表示するスキルの名前をクリックします。
  3. コードエディタタブをクリックします。
  4. 左下隅にあるメディアストレージ: S3リンクをクリックします。AWSコンソールの限定ビューが開き、S3バケットが表示されます。バケット名とフォルダがamzn1-ask-skill-xxxxxxx-xxxx-buildsnapshotbucket-xxxxx/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
    )