kun432's blog

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

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

Voiceflow TIPS #36 パーソナライズがVoiceflowでも使えるようになったので試してみた

やや某所での興奮冷めやらぬところですが、さらにこんなのが。

Airtable - Voiceflow Community Marketplace

f:id:kun432:20191120225430p:plain

先日のリリース後には使えなかった「パーソナライズ機能」がVoiceflowでも実装されたようなの早速試してみます。ということで久々のAdvent Calendar延長戦。

スキルはMarketplaceからダウンロードできますが、ブロックも少ないのでステップバイステップでやっていきます。


パーソナライズの実装を説明する前に、AlexaにはいろいろなIDがあるのでそれについて少しおさらい。

ID名 単位 Voiceflowでの参照方法
ユーザID スキル有効時に、Amazonアカウントごとに一意で生成されます。例えば、ユーザごとの情報を管理するのに使う。 ビルトインのプロジェクト変数 {user_id}で取得できます。
バイスID スキル有効時に、Amazonアカウントに併せて、デバイスごとに一意で生成されます。例えば、同じユーザのデバイスの場所ごとの情報を管理するのに使う。 Code Blockで以下のコードを書いて変数に入れれば取得できます。
deviceId = _system.device.deviceId;

図にするとこんな感じですね。

f:id:kun432:20191120234245p:plain

一人暮らしの人ならこれでも十分なんですけど、例えばこういう場合はどうなるでしょうか?

f:id:kun432:20191120234832p:plain

答えは、ユーザIDもデバイスIDも花子さんの場合と同じ、つまり、あくまでもデバイスに登録されたAmazonアカウント(すなわち≒デバイスの所有者)がキーになり、「話者」の区別はできなかったんですね、いままでは。

そこでできたのが音声プロフィールです。

同一世帯の他の成人がAlexa搭載端末を共有している場合は、各人が個別に音声プロフィールを作成できます。

具体的にはこういうことができます。

アクティブな音声プロフィールを持っていると、次のような機能で使用体験がカスタマイズされます。
・Alexaコール・メッセージ: 自分に送信されたメッセージだけが再生され、自分からのメッセージだけが送信されます。
・フラッシュニュース: Alexaがあなたの声を認識すると、フラッシュニュースはあなたがすでに聞いたストーリーやニュースをスキップします。
・ショッピング: 音声コードが有効な場合、購入手続きを行うたびに音声コードを言う必要がなくなります。
・ミュージック: Amazon Music Unlimitedファミリープランをお持ちの場合、Alexaは、声に基づいて楽曲再生をカスタマイズします。
・ミュージック: Amazonプライム会員の場合、Alexaは、声に基づいて楽曲再生をカスタマイズします。

はい、つまり、登録されている音声ごとにカスタマイズができるということですね。図にするとこんな感じです。

f:id:kun432:20191127001139p:plain

そしてこれが「パーソナライゼーション機能」により、カスタムスキルからも利用可能になったというのが今回の話です。

なお、パーソナライゼーション機能を利用するには、ユーザ側で音声識別が有効になっていて、かつ、音声プロフィールが登録されている必要があります。設定方法は某Championのサイトが詳しいのでそちらをご覧ください。


ではスキルを作ってみましょう。

まず、最初に変数を作りましょう。音声プロファイルが登録されている場合、パーソンIDという新たなIDがデバイスから送信されてきますので、これを記憶しておくための変数になります。ここではpersonIdとしました。

f:id:kun432:20191121000538p:plain

パーソンIDが取得できるかどうかのチェックはUser Info Blockを使います。ドラッグアンドドロップでキャンバスに配置してください。

f:id:kun432:20191121001202p:plain

User Info Blockを設定していきます。どの情報をチェックするかのところで”Skill Personalization" という新しい項目が増えていますね!これがパーソナライゼーションになりますので、これを選択します。

f:id:kun432:20191121001147p:plain

パーソンIDが取得できた場合の変数を指定します。先程作ったpersonIdを設定します。あとHome Blockからもつなげておいてください。

f:id:kun432:20191121001327p:plain

続きですね。まず、パーソンIDが取得できた場合はそのままSpeak Blockで話をさせるようにします。ここちょっと面白いですよ。Speak Blockをドラッグランドドロップして・・・

f:id:kun432:20191121002813p:plain

Speak Blockの発話の中に以下を入力してみてください。変数はそのままコピペではなくて "{" を入力して変数候補から選択してくださいね。

<alexa:name type="first" personId="{personId}"/>さんですね。こんにちは!

f:id:kun432:20191121003450p:plain

はい、これで一度アップロードして確認してみましょう。音声プロフィールなので音声じゃないとテストできない点にご注意ください。今回は開発者コンソールでマイクを有効にして行いました。

f:id:kun432:20191121004434p:plain

はい、名前が表示されているのがわかるでしょうか?これまではユーザの名前などを取得する場合は、ユーザプロファイルを使うか、アカウントリンクを使って個人情報を取得する必要があり躊躇されていた方も多いかと思います。パーソナライズの場合は音声プロフィールが登録されていればパーソンIDをSSMLから参照するだけで名前を発話することができますので、非常にお手軽ですし、開発者側でもパーソンIDしか見えないので非常に安全ですね!(ただしプライバシーポリシーは必要です)

User Info BlockでパーソンIDが取得できなかった場合は、

  • 音声識別が有効になっていない
  • 音声プロフィールが登録されていない

の可能性があります。これらの有効化・登録を促す場合、これまでであればPermission Blockを使ってカードを送信して、有効化等を促してました。 とりあえず同じようにやってみましょう。

以下のように、failからPermission BlockにつないでSkill PersonalizationをONにして、カードを送信するようにしてみましょう。

f:id:kun432:20191121005404p:plain

最後にSpeak Blockでカードを送信したことを伝えて、Alexaアプリから音声プロフィールの有効を促すようにします。

f:id:kun432:20191121005543p:plain

音声プロフィールを一旦削除して再度確認してみます。

f:id:kun432:20191121012522p:plain

きちんと音声プロフィールがない=パーソンIDがないことを認識しています。カードを見てみると、ん?なんかちょっと違和感ありますね。とりあえず「許可をアップデート」をタップしてみます。

f:id:kun432:20191121012806p:plain

f:id:kun432:20191121012853p:plain

どこにも権限を有効化するリンクがないですね・・・これ、どうやら権限許可を依頼するカードの機能がパーソナライゼーションにはないみたいなのですよね。Alexaの公式ドキュメントにも載ってないし、Alexaアプリでも他の権限関連の設定と設定場所が違うのです。逆にPermission Blockの中に”Skill Personalization” があることで少し混乱するかもしれませんね。パーソナライズの場合は、音声認識の有効化も音声プロフィールの登録も音声だけでやりきると覚えておけばいいと思います。(そのうち追加されるかもしれませんね)


思ったよりも早く使えるようになってびっくりしましたが、非常に嬉しい機能ですね!家庭でお子さんとかと一緒に使っている方も多いと思いますし、アカウントが同じだと音声ショッピングで知らぬ間に・・・ということもあるかもしれません。音声プロフィールによりそういったリスクがなくなると同時に、スキル開発者としてはうまく使うと家族向けのコミュニケーションを行うスキルとかが作れて面白そうです。ぜひご活用ください。