思ってることってこんなもんだよ
Media responsesを使った長いオーディオコンテンツの提供

6月14日に、 Leon Nicholls は、 ko-KR を除く全ての Actions on Google の ロケール向けに、Media responses がサポートされたことを G+ 上でアナウンスしました。

Media Response Update: https://plus.google.com/u/0/+LeonNicholls/posts/cbATWnXx5cv

SSML では、オーディオの長さに制限がありました。その長さは、 120 秒以内です。しかし、”Media responses” を使うことで、 その制限を超えることができます。アナウンスの通り、Media responses 機能は、ほとんどの言語にて使用することができます。 素晴らしいことです!

本当に機能するかどうかを確認するために、実際に使ってみました。結果として、正常に機能しました。

僕は、以下のテストコードを使いました:

app.intent("input.media", conv => {
    if (!conv.surface.capabilities.has("actions.capability.MEDIA_RESPONSE_AUDIO")) {
        conv.ask("メディアレスポンスオーディオはサポートされていません。");
        return;
    }
    conv.ask(new SimpleResponse({
        speech: "これはメディアレスポンスでの返事です。",
        text: "これはメディアレスポンスでの返事です。"
    }));
    conv.ask(new MediaObject({
        name: 'Jazz in Paris',
        url: 'http://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
        description: 'A funky Jazz tune',
        icon: new Image({
            url: 'http://storage.googleapis.com/automotive-media/album_art.jpg',
            alt: 'Media icon',
        }),
    }));
    conv.ask(new Suggestions("次の機能のテスト"));
});

新しい actions.capability.MEDIA_RESPONSE_AUDIO サーフェスが導入されています。もし Media responses を送信する場合は、 ユーザのデバイスがそのサーフェスをサポートしているかどうかをチェックする必要があります。もしサポートされていれば、 Media responses を送信することが可能です。

Media responses を送信するために、 MediaObject クラスを使用します。このクラスの使い方はシンプルです。基本的に、 オーディオファイルの URL を渡すだけです。しかし、追加として、もしそのときに会話を続けたい場合は、以下も行わなければ なりません:

  • SimpleResponse を送信する。
  • サジェスチョンチップを提供するために、 Suggestions も送信する。

上記の Media responses の送信後、Google アシスタントからの以下の応答を目にすることでしょう:

Actions simulator にて、 Media responses をテストすることができます。特に、オーディオプレイヤーの UI を含む応答を 見ることができるでしょう。そのときに、指定されたオーディオが自動的に再生開始されます。

Media responses を送信した時に会話を終えたい場合は、以下のコードのように、サジェスチョンチップは必要ありません:

app.intent("input.media", conv => {
    if (!conv.surface.capabilities.has("actions.capability.MEDIA_RESPONSE_AUDIO")) {
        conv.ask("メディアレスポンスオーディオはサポートされていません。");
        return;
    }
    conv.close(new SimpleResponse({
        speech: "これはメディアレスポンスでの返事です。",
        text: "これはメディアレスポンスでの返事です。"
    }));
    conv.close(new MediaObject({
        name: 'Jazz in Paris',
        url: 'http://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
        description: 'A funky Jazz tune',
        icon: new Image({
            url: 'http://storage.googleapis.com/automotive-media/album_art.jpg',
            alt: 'Media icon',
        }),
    }));
});

再生の完了時に、コールバックを受けることができます。もし Dialogflow を使う場合は、再生が完了したことを知るために、 actions_intent_MEDIA_STATUS イベントを受け取ることが可能です。

より詳しい情報は、Actions on Google 開発者向けの 公式ドキュメント を参照ください。