Bot Framework と Microsoft Graph で DevOps その 21 : コルタナを利用したボットアプリの音声対応
今回は音声対応について。Bot Framework の音声対応は二種類あります。
- コルタナやエミュレーターなど音声出力をサポートするチャネル向け機能
- Skype 向けの音声サポート
Skype 向けの音声サポートは、これまで開発したコードの再利用ができないため今回は紹介しません。詳細はこちらをご覧ください。以降はコルタナなど音声出力をサポートするチャネル向け機能のみについて記載します。
音声の入出力
ユーザー視点では音声の入力と出力があります。BotBuilder は出力用の設定のみ可能で、実際に音声として出力されるかはチャネルの機能に依存します。また入力はチャネル側でテキストに変換してから送信する必要があります。尚、コルタナチャネルは現在英語のみサポートしています。
Speak プロパティ
Acivity.Speak プロパティに音声出力用のデータを設定可能で、表示用と別に音声出力に最適な値が使えます。PromptDialog の場合には、speak/retrySpeak 引数に設定できます。値は単純な文字列、または Speech Synthesis Markup Language (SSML) が使えます。SSML を使うとボリュームやスピード、アクセントなど細かな制御が可能です。SSML の詳細はこちら。
インプットヒント
インプットヒントを使うと、ユーザーに応答をした後、次のインプットを待機するか、終了するかを指示できます。
- AcceptingInput: マイクはオフにして、音声の返信を待機しない。
- ExpectingInput: マイクをオンにして、音声の返信を待機する。
- IgnorningInput: テキスト入力およびマイク共にオフにして、入力を無視する。
既定値は処理によって変わります。
- PromptDialog: プロンプトを使っているので回答を期待するため、ExpectingInput が既定。
- 単純な返信: AcceptingInput が既定。
- 連続した返信: 最後の返信を送るまでは、IgnorningInput。最後は AcceptingInput。
ボットアプリの構成
コルタナ対応のボットはマイクロソフトアカウントで登録する必要があります。
1. https://dev.botframework.com にログイン。
2. 登録済のボットを選択。
3. Add a channel よりコルタナを選択。
4. 設定画面では色々設定できますが、今回重要な場所は Invocation name。この名称を使ってボットアプリに話しかけますので、発音しやすいものを選びます。個人的に 365 を英語で言うのが苦手なので、Office Online Bot としました。
5. Manage in Cortana Dashboard をクリック。
6. 他のアカウントにも展開する場合は、Deploy to group をクリックしてユーザーを追加。
アプリへの実装
残念ながら AuthBot がまだ Cortana チャネルに対応していないため、ソースを取得して手動で変更する必要があります。そのうち対応すると思うので、今回は認証が絡まない場所で、ちょっとだけ使ってみましょう。
1. LuisRootDialog.cs の GetEvents メソッドの初めに Speak の返答を入れます。
[LuisIntent("Calendar.Find")]
public async Task GetEvents(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult luisResult)
{
this.luisResult = luisResult;
var message = await activity as Activity;
var reply = message.CreateReply("You are trying to get events.");
reply.Speak = "You are trying to get events.";
await context.PostAsync(reply);
}
2. VSTS にチェックインして公開します。
テスト
コルタナでのテスト
1. 現在英語環境のみサポートしているため、英語の言語パックが入っていて、優先言語が英語の Windows 10 にログインします。
2. Hi Cortana と呼びかけてコルタナを起動します。
3. Ask office online bot to get schedules と話しかけます。基本パターンは Ask <invocation name> to <sentence> です。
4. 答えが音声で出力されます。
5. もしボットアプリが認識されない場合は、ホームボタンをクリックして更新してから、再度試してください。
エミュレータでのテスト
エミュレーターも音声のテストが行えます。
1. エミュレーターで音声を使うには、実際に登録している Microsoft AppId と Microsoft App Password が必要です。ローカルで実行する場合、これらの値を Web.config に入れます。
2. エミュレーターを起動してボットアプリに接続。テキストボックス右端にあるマイクアイコンをクリックして音声入力します。結果が音声で再生されることを確認。
尚、エミュレーターの場合は AuthBot は当然動くので、本当のタスク取得も含めて試すことができます。
ユニットテスト、ファンクションテスト
特別な対応は不要ですが、Text プロパティだけでなく、Speak プロパティも評価します。
まとめ
コルタナを使う場合、英語環境が必須であったり、AuthBot がそのままでは動かないなど、現時点ではまだ少し課題がありますが感触はつかめた感じです。これからは音声の時代ということですので、是非トライしてみてください。次回はダイレクトラインチャネルを紹介します。