kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

2020年8月振り返り

f:id:kun432:20200904003756p:plain

8月の振り返りです。最近はちょっと気持ちの面でフラットな日々になってきました。

資格を取る

ここは進捗なし。

毎月スキルを作る

ここも進捗なし。

公開済15個
申請中0個
開発中7個

アウトプット

勉強会は以下に参加させてもらいました。ありがとうございました。

ちょっと少なめ。オンラインの勉強会も普通になってきてるんですが、やっぱりオフライン特有のその場の空気感とか雰囲気とか、そういうのが欲しいなぁと思う今日このごろ。ネタ的にも興味を引くものが少ないっていうのもあります。インフラはちょっと食傷気味・・・

ちょうどβテストが始まった、VoiceflowのAPL for Audioの話は面白かったです。スピーカーは玩具メーカーの人だったのですが、子供向けのおもちゃの世界にAlexaを入れるとインタラクティブなものができるので相性いいかもしれないなぁと思いました。その中で紹介されていたこれ、妙に欲しくなってしまいました。

ブログは13本。

今月はやっぱり、Alexa Liveで発表されたAPL for AudioのVoiceflow βテストですね。まだ誰でもお手軽に、というわけには行かないですが、とても良い機能だと思うので、正式リリースが楽しみです。Voiceflowはそれ以外にもアップデート記事をいくつかまとめました。Directive/Event Blockといった面白い新機能(まだβ)も出てきそうだし、目立たないところでバグや改善も行われているので、今後も随時ご紹介していきたいと思ってます。

Alexa Live絡みだとAlexa Conversationsも少し試してみました。Alexa Liveの中でも紹介されていましたが、Voiceflowもどうやら対応していく雰囲気があります。日本にはまだ当分来なさそうですが、ちょっと早めに見ておこうというところ。少し複雑な気もしますが、なんとなく思ったのはシチュエーショナルデザインのワークフローには向いているんじゃないかなという気がします。

コミュニティ

今月もLTなしです。その代わり、ちょっと動画コンテンツを作ってみようかなと思ってます。


ブログは書いてるけど、もうちょっとアウトプットの形は工夫したいなと思ってます。9月もボチボチがんばります。

Voicceflow Updates: 謎のEvent Blockを使ってみた〜Alexaのディレクティブとイベント〜

f:id:kun432:20200823170652p:plain

前回の最後に少しだけ触れましたが、APL for Audio のβテストであらたにDirective Blockが追加されましたが、もう一つ、Event Blockというのも追加されています。

f:id:kun432:20200823170644p:plain

で、これは何でしょうか?ということなのですが、今回のβテストでも詳細は明かされていません(今は無視しろみたいな感じっぽい)。

そこで、今回は勝手に推測していろいろやってみたというお話です。また、Event Blockを使うにあたり、Alexaの「ディレクティブ」と「イベント」を知っておくと理解がしやすいので、その点についてもご紹介します。

ということで、今回のお話は完全無保証です。詳細について公式のアナウンスもないし、いつリリースされるかもわからないので、あくまでも「こういうことがいつかできるようになったらいいなー」ぐらいのゆるい気持ちで見ていただけると幸いです。

あと今回は少しコード寄りの話含みます。ask-sdkでコードを書いている人ならわかるのではないかなと思います。

目次

ディレクティブとイベント

そもそもAlexaにおいてディレクティブとイベントとはなんでしょうか?それを知るために、まず、Alexaがどういうデータのやり取りを行うかをお話します。

通常、ユーザとAlexaのやり取りは音声のやりとりになります。

  • ユーザからの発話を受け取る
  • Alexaに喋らせる

というのが基本ですね。こんな感じです。

f:id:kun432:20200827233153p:plain

やや技術的な内容になっちゃいますが、これをもう少し詳細に書くと、概ねこういう感じになります。

f:id:kun432:20200828001237p:plain

ユーザとAlexa(というかEchoデバイス)のやり取りは音声ですが、実際には

  • ユーザから送られてきた音声をテキストに変換
  • テキストを解釈して、インテントにマッピング、そこからスロットを抽出
  • インテントやスロットから、スキルが何らかの処理を行う。
  • スキルの処理結果をテキストで返し、ユーザに届ける際に音声に変換する。

ということになります。実は結構複雑なのですが、ここでいちばん大事なことは、

「Alexaスキルは、基本的には、文字のやりとりで成り立っている」

ということなんです。

ちなみに、これをVoiceflowで表すとこうなります。

f:id:kun432:20200827233844p:plain

物凄くかんたんでわかりやすいですね。上で書いたような複雑なやり取りを意識しなくていいのはVoiceflowのよいところなのですが、これだけだと今回のDirective Block/Event Blockを理解するのは難しいと思います。もうしばらくお付き合いください。

で、音声とテキストのやりとりでも十分スキルは作れるのですが、いかんせん非常に表現の幅が狭かったり、機能的に物足りない場合もあります。例えば以下のような機能もありますよね。

  • ビジュアル(画面付きデバイス向けのAPL)
  • オーディオ(環境音スキルとかのオーディオデータ)
  • スキル内課金(スキル内商品の購入とか)

こういった「音声・テキスト」のやりとりに「機能を追加」するためのものが「ディレクティブ」と「イベント」だと思って貰えればいいかと思います。

ディレクティブ

「ディレクティブ」は、スキルからAlexaにレスポンスを返す際に「音声・テキスト」以外の機能を追加するために使用します。一番わかりやすいのは「APL」です。

f:id:kun432:20200828005009p:plain

APLは、通常の音声・テキストレスポンスに、APLドキュメントをディレクティブとして追加して返します。これにより、Alexaの発話とともに、画面付きデバイスの場合はビジュアルが表示されるという仕組みです。

違いを理解するために以下のサンプルのスキルを見てください。

f:id:kun432:20200828005608p:plain

f:id:kun432:20200828010008p:plain

「今日はいいお天気ですね。」ということをしゃべるだけのシンプルなスキルです。このスキルを起動して、返ってくるレスポンスのデータはこうなっています。

{
    "body": {
        "version": "1.0",
        "response": {
            "outputSpeech": {
                "type": "SSML",
                "ssml": "<speak>今日はいいお天気ですね。</speak>"
            },
            "reprompt": {
                "outputSpeech": {
                    "type": "SSML",
                    "ssml": "<speak>今日はいいお天気ですね。</speak>"
                }
            },
            "shouldEndSession": true,
            "type": "_DEFAULT_RESPONSE"
        },
        "sessionAttributes": {},
        "userAgent": "ask-node/X.X.X Node/vX.X.X"
    }
}

細かいところは置いといて、なんとなくAlexaの発話だけが返ってきているなということはわかりますよね。

これにDisplay Blockを追加してみます。

f:id:kun432:20200828010451p:plain

f:id:kun432:20200828010756p:plain

※画像はpixabayから使用させていただきました。https://pixabay.com/ja/photos/garden-flower-5000586/

Display Blockを追加したあとで返ってくるレスポンスのデータはこんな感じになります。(長いのでちょっと省略+わかりやすさを踏まえて修正しています)

{
    "body": {
        "version": "1.0",
        "response": {
            "outputSpeech": {
                "type": "SSML",
                "ssml": "<speak>今日はいいお天気ですね。</speak>"
            },
            "reprompt": {
                "outputSpeech": {
                    "type": "SSML",
                    "ssml": "<speak>今日はいいお天気ですね。</speak>"
                }
            },
            "directives": [
                {
                    "type": "Alexa.Presentation.APL.RenderDocument",
                    "token": "xxxxxxxxxx",
                    "document": {
                        "type": "APL",
                        "version": "1.1",
                        "settings": {},
                        "theme": "dark",
                        〜〜〜 省略 〜〜〜
                    },
                    "datasources": {
                        "bodyTemplate7Data": {
                            "type": "object",
                            "objectId": "bt7Sample",
                            "title": "今日の天気は晴れ",
                            "backgroundImage": {
                            〜〜〜 省略 〜〜〜
                            },
                            "image": {
                                "contentDescription": null,
                                "smallSourceUrl": null,
                                "largeSourceUrl": null,
                                "sources": [
                                    {
                                        "url": "https://xxxxxxxx.com/images/garden.jpg",
                                        "size": "small",
                                        "widthPixels": 0,
                                        "heightPixels": 0
                                    },
                        〜〜〜 省略 〜〜〜
                        }
                    },
                    "timeoutType": "SHORT"
                }
            ],
            "shouldEndSession": true,
            "type": "_DEFAULT_RESPONSE"
        },
        "sessionAttributes": {},
        "userAgent": "ask-node/X.X.X Node/vX.X.X"
    }
}

重要なのは以下の部分です。最初のSpeak Blockだけ、だった場合のレスポンスに、"directives"というのが追加されていて、中に何やらAPLに関連するようなものが含まれているんだなぁということがわかるでしょうか?

           〜〜〜 省略 〜〜〜
            "reprompt": {
                "outputSpeech": {
                    "type": "SSML",
                    "ssml": "<speak>今日はいいお天気ですね。</speak>"
                }
            },
            "directives": [
                {
                    "type": "Alexa.Presentation.APL.RenderDocument",
                    "token": "xxxxxxxxxx",
                    "document": {
                        "type": "APL",
                        "version": "1.1",
            〜〜〜 省略 〜〜〜

はい、これが「ディレクティブ」です。通常の発話に加えて、この部分で画面表示に必要な情報を追加しているわけですね。

APL以外にも「ディレクティブ」を使ってできることは他にもあります。例えば、前回ご紹介したAPL for Audioもディレクティブを使っています。

f:id:kun432:20200823151416p:plain

そして、Voiceflowでこのディレクティブを実現するのが前回ご紹介した「Directive Block」です。

イベント

次に今回のテーマである「イベント」です。「イベント」は、「ディレクティブ」とは逆で、Alexaからスキルに対して「音声」以外のリクエストを受け付けるために使います。でこれが一番わかりやすいのも「APL」です。以下のデモをご覧ください。

ちなみにこのサンプルスキルは、日本のAlexa Championの一人である「がおまる」さんのハンズオンを流用させていただきました。この場を借りてお礼を申し上げます。ハンズオンに興味のある方は以下を御覧ください。

懐かしの「へぇボタン」ですね。「へぇボタン」というとAlexaが「へぇ」と言うと同時に、画面下部のカウンターがカウントアップされます。が、それだけではなく、画面をタッチした場合にも同じように動きますよね。「画面タッチ」はまさに「音声以外のリクエスト」ですよね。これが「イベント」です。

わかりやすく図で書いてみましょう。まずは音声で受け付ける場合。

f:id:kun432:20200828030928p:plain

はい、APLなのでディレクティブが追加されていますね。

次にタッチで受け付ける場合です。

f:id:kun432:20200828025450p:plain

このサンプルでは音声の場合と最終的な結果は同じにしてありますが、音声とタッチでは入り口が異なります。音声の場合はインテントから起動されるのに対して、タッチの場合はイベントから起動されます。したがって、イベントを受け付ける場合は入り口を別に作って上げる必要があるわけです。

そして、Voiceflowでこのイベントを実現するのが今回ご紹介した「Event Block」なのではないかと思っています。

Event Blockを使ってみよう。

ということで、実際にEvent Blockを使って、さきほどご紹介した「へぇボタン」を作ってみましょう。

まず、最初に音声だけでカウントアップしていくスキルを作りましょう。

f:id:kun432:20200830165356p:plain

ポイントだけかいつまんで説明します。

最初にカウンターとして使う"count"変数を初期化しておきます。

f:id:kun432:20200830165510p:plain

Speak Blockで「へぇボタン、と言うか、画面のボタンをタッチしてください。」と話させると同時に、Display Blockで画面にボタンを表示します。

f:id:kun432:20200830165630p:plain

Display BlockにアップロードするAPLのJSONファイルはこんな感じです。

APLドキュメントの詳細は後で説明しますが、プレビューだとこういう感じで、ボタンとカウンターが表示されています。

f:id:kun432:20200830191304p:plain

カウンターの部分は、データソースで指定されているmyCountが表示されるようになっています。

f:id:kun432:20200830191429p:plain

以下のように修正すると、Voiceflowの変数"count"を表示されるようになります。

f:id:kun432:20200830191858p:plain

そのあと、インテントで「へぇボタン」という発話を受けます。

f:id:kun432:20200830192213p:plain

「へぇボタン」と発話されたら、count変数をカウントアップ、「へぇ」と言ったあとに再度待ち受けます。

f:id:kun432:20200830192322p:plain

これで声だけで動く「へぇボタン」ができました。テストしてみるとこんな感じです。

f:id:kun432:20200830192620p:plain

これをタッチ対応にしていきます。タッチ対応を行うには2つの対応が必要です。

  1. APLドキュメントで、ボタンがタッチされたらイベントを送信するようにする
  2. スキル側でそのイベントを受け取れるようにする

1については、すでにAPLドキュメントに実装してあります。その部分を抜粋します。

          "items": [
            {
              "type": "Pager",
              "width": "100vw",
              "height": "100vh",
              "id": "myPager",
              "initialPage": 0,
              "items": [
                {
                  "type": "TouchWrapper",
                  "onPress": [
                    {
                      "type": "SendEvent",
                      "arguments": [
                        "touch"
                      ]
                    }
                  ],
                  "item": {
                    "type": "pushLayout",
                    "imageUrl": "${payload.push.button_off}"
                  }
                },

APLコンポーネント、ここではボタンになりますが、これを"TouchWrapper"コンポーネントでラップしてあげます。"OnPress"でボタンをタッチしたことを認識します。ボタンが押されると"SentEvent"でargumentsに指定された値を送信します。今回は特に値のやり取りをする必要はない(押されたらイベントが送られればそれでよい)ので、"touch"というのはダミーです。

ちなみに、厳密にはここはPagerコンポーネントの一つ目の子コンポーネントに対してTouchWrapperを設定しています。Pagerを使ってボタンが押されたらAPL Pagerコマンドでボタン画像を切り替えて「ボタンが押された」という感じを出すためなのですが、そこは今回やりませんので動きません。あしからず。

次にこのイベントをスキル側で受け取れるようにしましょう。ここでやっとEvent Blockの出番です!Event Blockをドラッグ&ドロップして、カウンターをカウントアップしているブロックにつなげます。

f:id:kun432:20200830195218p:plain

Event Blockの設定です。APLのイベントはAlexa.Presentation.APL.UserEventというリクエストが送信されてきますので、これをリクエスト名に指定します。値を受け取る場合は下のところでイベントから送られてきた値をVoiceflowの変数とマッピングすることで受け取れますが、今回は使いません。例えばボタンが複数あるような場合にどのボタンが押されたかを判定するようなケースではこれを使います。

f:id:kun432:20200830195630p:plain

はい、これで完成です。テストして、最初のご紹介した動画のようになればOKです!

まとめ

いかがだったでしょうか?ディレクティブとイベントを使うと、Voiceflowでは長らくできなかったAPLのタッチ操作に対応することができるというのがわかると思います。タッチ以外にもディレクティブやイベントを使うとできるようになることがたくさんありますので、これはとても楽しみですね!

ただ、逆にいうと、

  • Alexaのいろんな機能やその仕組みを知る必要がある。
  • ディレクティブやイベントはコードを書いている感覚に近い。つまり、コード的な知識があったほうが理解しやすい。

というところで、現状のDirective/Event Blockは、どうしても技術的な知識が必要な印象で、誰でもかんたんに使えるというものにはなっていません。実際にリリースされる際には、そのあたりがもう少しわかりやすくなっていることを期待したいです!

Voiceflow で APL for Audio βテスト先行レポ

f:id:kun432:20200822122608p:plain

VoiceflowのAPL for Audioのβテストが始まりました!待ちに待っていた機能なのでとても楽しみにしていました!ということで、早速レポート!

VoiceflowのAPL for Audioはまだβテスト中です。正式リリース時には変更されている可能性があります。ご注意ください。

VoiceflowのDirective Stepが2021/2/10に正式にリリースされました。ということで、APL for Audioも使えます(ただしAPL for Audio自体がAmazonではまだβですが)

目次

APL for Audioとは?

APL for Audioをご存じない方もいらっしゃると思うので、Alexaスキルでのオーディオ再生について簡単に説明します。そのあと、APL for Audioが加わったことで何がよいのか?をまとめます。

オーディオの基本はわかっている、手っ取り早くAPL for Audioの話が知りたい、という方は、Directive Blockまでスキップしてください。

Alexaスキルでのオーディオ再生

Alexaスキルでオーディオを再生させたい場合、方法は2つあります。

  1. SSMLを使う
  2. AudioPlayerを使う

AudioPlayerはちょっと使い方が変わるので詳細は割愛します。

SSMLを使う

SSML(Speech Synthesis Markup Language)とは、「音声合成マークアップ言語」と呼ばれるもので、通常はAlexaの発話を制御するために使用されます。例えば、Alexaの公式ドキュメントで紹介されている以下のSSMLをAlexa開発者コンソールのテストシミュレータで再生してみましょう。

<speak>
    最初の文は通常の音量です。
    <prosody volume="x-loud">2つめの文はより大きい音量です</prosody>。
    起きたときは <prosody rate="x-slow">とてもゆっくり話します</prosody>。
    普通の高さで話すこともできますが、
    <prosody pitch="x-high"> もっと高い声で話すこともできますし</prosody>、
    <prosody pitch="low">低い声も出せます</prosody>。
</speak>

どのスキルでも良いので選択して、テストシミュレータを開いて以下の通りテストシミュレータのタブで「音声と語調」をクリック、上記のSSMLをマルっと上書き、言語に「日本語」を選択して、再生ボタンを押します。

f:id:kun432:20200822131235p:plain

再生してみるとこんな感じです。

発話の前後にあるタグの指定の仕方で、Alexaの発話のスピードや声の高さなどが変わるのがわかりましたよね。

そして、SSMLにはAudioタグというものがあり、これを使うとオーディオの再生ができます。

<speak>
    それでは第一問。<audio src="https://example.com/question.mp3"/>
    この鳴き声はなんの鳴き声でしょうか?<audio src="https://example.com/lion.mp3" />
    回答時間は30秒。どうぞ。
     <audio src="soundbank://soundlibrary/ui/gameshow/amzn_ui_sfx_gameshow_countdown_loop_32s_full_01" />
</speak>

※一部URLを伏せています。

同じようにテストシミュレータで再生してみるとこんな感じになります。

効果音ラボ様の効果音を使用させていただきました。

こういった感じで、Alexaの発話の合間に効果音やサウンド的なものを差し込めるのですね。スキルをにぎやかで楽しいものにするには必須のテクニックですね!

Voiceflowでやる場合はSpeak Blockを使います。

f:id:kun432:20200822195222p:plain

オーディオはmp3ファイルをドラッグ&ドロップでアップロードするだけです。Alexaの公式サウンドライブラリもテキストをコピペで貼るだけですね。とてもかんたんです。

SSMLでオーディオ再生する場合の制限

ただし、SSMLでオーディオ再生する場合にはいろいろな要件があります。詳細は以下にあります。

かんたんに説明するとこういうことです。

  • 1回のAlexaの発話で、オーディオファイルは5個まで
  • かつ、1回のAlexaの発話で、オーディオファイルの合計再生時間が240秒以内

この制限は結構厳しいです・・・

この制限を超えるにはAudioPlayerを使う必要があります。VoiceflowだとStream Blockでできます。ただしその場合は、音楽を聞くということが目的の「mp3プレイヤー」っぽいスキルになりますので、Alexaとの対話を楽しむようなスキルとは異なったユーザ体験になってしまいます。

そしてもう一つ「Alexaの発話やオーディオの並列再生はできない」ということがあります。つまり、Alexaの発話の後ろでBGM的にオーディオを再生させたり、AlexaとMizuki/Takumiを同時に喋らせたりということができないのですね・・・

ということで、表現力にちょっと限界があるのが実情です。

APL for Audioでできること

そこでAPL for Audioです!APL for Audioでは以下が実現できます。

  • 1回の発話で使えるオーディオファイルの数が15個に増えました!
  • Alexaの発話とオーディオが同時に並列で再生できるようになりました!もちろん、発話同士・オーディオ同士の同時再生も可能です!
  • フィルター設定により、オーディオのフェードイン・フェードアウト、再生時間の調整、ボリュームの調整ができるようになりました!
  • より高音質で、かつ、多彩なフォーマットに対応!

素晴らしいですね!これにより表現豊かな音声コンテンツが期待できます!詳細については以下でもまとめていますので、よろしければご覧ください。

Directive Block

前フリが長くなりましたが、ではVoiceflowのAPL for Audioについて見ていきましょう。今回、APL for Audioのために新しいブロックが増えました。「Directive Block」です。

f:id:kun432:20200822124204p:plain

もう一つ「Event Block」というのが増えていますが、ここはちょっと置いときましょう(こちらも詳細がわかればご紹介したいと思います。)

こんな感じでサンプルスキルを作ってみました。

f:id:kun432:20200822233939p:plain

最初にユーザの名前を聞いて、そのユーザを主人公としたお話を話すという「物語」的なサンプルスキルをイメージしています。

ここまでの部分でテストした感じはこんな感じです。

f:id:kun432:20200822234313p:plain

ではここにDirective Blockをつなげましょう。

f:id:kun432:20200823011512p:plain

Directive Blockをクリックして、どういう設定ができるのかを見てみましょう・・・っと、大きなテキスト入力欄だけですね。

f:id:kun432:20200823011729p:plain

ここに試しに以下のコードをコピペしてみてください。

こんな感じになればOKです。

f:id:kun432:20200823151416p:plain

ではアップロードしてテストシミュレータで確かめてみましょう。

f:id:kun432:20200823151701p:plain

せっかくなので音声付きで試したものをお聞きいただきましょう。

SHW様のフリー音源を使用させていただきました。

BGM付きでいろんな効果音とともに発話が流れていますね!VoiceflowでもAPL for Audioが実現できました!

APLAドキュメントとは?

さきほどコピペしてもらったコードは、「APLAドキュメント」といい、APL for Audioで発話や音声を定義するために使用します。

ちなみに、画面付きデバイス向けにビジュアル表示をする場合にも同様のコードが必要になり、こちらは「APLドキュメント」と言います。細かいところは違いますが、似たような構造になっています。

APLAドキュメントは、Alexa開発者コンソールにAPL/APL-Aオーサリングツールというものがあり、それを使って作成します。かんたんに流れを説明しておきます。

Alexa開発者コンソールにログインして、Voiceflowで作成しているスキルを開きます。

f:id:kun432:20200823155112p:plain

左のメニューから「マルチモーダル」をクリックします。

f:id:kun432:20200823155308p:plain

新しいタブで以下のような画面が開きます。これがAPLのオーサリングツールです。

f:id:kun432:20200823155701p:plain

オーサリングツールは、APL for Audioだけでなく、画面付きデバイス向けのAPLにも対応しています。このタブの部分をクリックすることで、APL for Audio用・APL用を選択できます。今回はAPL for Audio用のドキュメントを作成しますので、"Audio"が選択されていればOKです。

f:id:kun432:20200823160014p:plain

ではAPLAドキュメントを作成します。"Create Audio Response"をクリックします。2つありますがどちらでもよいです。

f:id:kun432:20200823160331p:plain

APLAドキュメントのエディター画面が開きます。ここでドキュメントを修正していくわけですね。

f:id:kun432:20200823160644p:plain

APLAドキュメントそのものの書き方についてはそれだけで結構なボリュームになるので割愛します。[公式のドキュメント](https://developer.amazon.com/ja-JP/docs/alexa/alexa-presentation-language/apl-for-audio-reference.html)を見ていただければと思いますが、まだ英語だけなんですよね。。。

修正した内容は左下の「再生」をクリックすると確認ができます。

f:id:kun432:20200823160822p:plain

こんな感じで波形が表示されて再生されれば動作しています。

f:id:kun432:20200823161415p:plain

エラーの場合は右下に以下のようなメッセージが表示されて再生されません。エラー箇所を探して修正します(どこが間違ってるかは教えてくれない・・・)

f:id:kun432:20200823161935p:plain

完成したら、右上のダウンロードアイコンをクリックして、ファイルをダウンロードします。

f:id:kun432:20200823165937p:plain

ファイルをエディタで開きます。

f:id:kun432:20200823163433p:plain

で、あとはVoiceflowのDirective Blockにコピペするだけ・・・と言いたいところですが、現時点では少しだけ修正が必要になります。一番最初に"document": {と書かれている箇所の上に以下の2行を追加します。

  "type": "Alexa.Presentation.APLA.RenderDocument",
  "token": "token",

f:id:kun432:20200823163832p:plain

あとはコピペしてDirective Blockに貼り付ければOKです!

f:id:kun432:20200823151416p:plain

開発者ディスクアイコンをクリックすると該当のスキル内に保存されますが、Voiceflowでは使用しません(Voiceflow側のDirective Blockにコピペするので)。ただ、管理上どこかに保存しておきたいという場合には良いと思います。f:id:kun432:20200823162859p:plain

まとめ

VoiceflowでもAPL for Audioができました!Alexa Liveからそれほど時間が経ってないんですが、非常に対応が早かったですね!

が、コードを書かずにGUIだけでできるVoiceflowでも、残念ながらAPL for AudioのドキュメントについてはGUIでかんたんに設定ができるという風にはまだなっていません。これについては、Alexa開発者コンソールのオーサリングツールもAPLAドキュメントについては現状コードを書くしかない(画面付きデバイス向けAPLドキュメントのエディターは多少GUIで設定できるようになっている)ですし、エラーが起きても原因がわかりにくかったり、ドキュメントがまだ日本語になっていなかったりと、Amazon公式でもまだまだ整備段階のようなので致し方ないかもですね。Amazon公式とVoiceflowのAPL for Audio β版、両方含めて今後の改善に期待したいと思います。

ただそれを差し引いても、APL for Audioを使うと非常に表現力が高くなり、よりにぎやか・臨場感のある・楽しいスキルの開発が可能になると思いますので、積極的に使っていきたい機能です。正式にリリースされた場合にはぜひご活用ください!

繰り返しになりますが、VoiceflowのAPL for Audioはまだβテスト中です。リリース時には変更されている可能性があります。ご注意ください。

おまけ

コードを書いている人向けにおまけ&私の勝手な妄想レベルなので無視してください。

Directive Blockって要はディレクティブを追加するんですね。ask-sdkで書くとこの部分。

        return handlerInput.responseBuilder
            .addDirective({
                "type": "Alexa.Presentation.APLA.RenderDocument",
                "token": "token",
                "document": {
                ...snip...
                },
                "datasources": {
                ...snip...
                }
            })
            .getResponse();

以下が必要になのはそういうわけですよね・・・

f:id:kun432:20200823163832p:plain

そして、説明しなかったこれ。

f:id:kun432:20200823170644p:plain

中の設定を除くと・・・

f:id:kun432:20200823170652p:plain

いやー、この2つでいろいろ考えると、夢が広がるなぁーーー。ちなみにこちらもβテストじゃないと見れないですし、かつ詳細についてはまだアナウンスされていません。期待して待ちたいです。