チュートリアル: ボットを音声対応にする

Azure AI 音声 を使用して、チャット ボットを音声対応にすることができます。

このチュートリアルでは、Microsoft Bot Framework を使って、ユーザーが話した内容に応答するボットを作成します。 ボットを Azure にデプロイして、Bot Framework の Direct Line Speech チャネルに登録します。 その後、ボットに話しかけて応答を聞くことができる、Windows 用のサンプル クライアント アプリを構成します。

このチュートリアルを完了するために、Azure、Bot Framework ボット、Direct Line Speech に関する豊富な経験や知識は必要ありません。

このチュートリアルで作成する音声対応チャット ボットは、次のステップに従って動作します。

  1. サンプル クライアント アプリケーションが Direct Line Speech チャネルとエコー ボットに接続するように構成されています。
  2. ユーザーがボタンを押すと、音声オーディオがマイクからストリーミングされます。 または、カスタム キーワードが使用された場合、オーディオが継続的に録音されます。
  3. カスタム キーワードが使用される場合、キーワードの検出がローカル デバイスで行われ、クラウドへのオーディオのストリーミングが制限されます。
  4. このサンプル クライアント アプリケーションでは、Speech SDK を使って Direct Line Speech チャネルに接続し、オーディオをストリーミングします。
  5. 必要に応じて、サービス上でより高い精度のキーワード検証が行われます。
  6. オーディオが音声認識サービスに渡され、テキストに変換されます。
  7. 認識されたテキストが Bot Framework アクティビティとしてエコー ボットに渡されます。
  8. 応答テキストがテキスト読み上げサービスによってオーディオに変換され、再生用にクライアント アプリケーションにストリーミングで返されます。

Direct Line Speech チャネルのフローを示す図。

Note

このチュートリアルの手順では、有料サービスは必要ありません。 新しい Azure ユーザーは、無料の Azure 試用版サブスクリプションのクレジットと、音声サービスの Free レベルを使用して、このチュートリアルを完了することができます。

このチュートリアルの内容:

  • 新しい Azure リソースを作成する。
  • エコー ボットのサンプルを構築、テストして Azure App Service にデプロイする。
  • ボットを Direct Line Speech チャネルに登録する。
  • Windows 音声アシスタント クライアントを構築して実行し、エコー ボットと対話する。
  • カスタム キーワードのアクティブ化を追加する。
  • 認識および発声された音声の言語を変更する方法を学習する。

前提条件

このチュートリアルを終えるには、次のものが必要です。

リソース グループを作成する

このチュートリアルで作成するクライアント アプリでは、いくつかの Azure サービスを使います。 ボットからの応答のラウンドトリップ時間を短縮するには、これらのサービスが同じ Azure リージョン内にあることを確認します。

このセクションでは、米国西部リージョンにリソース グループを作成する手順を、わかりやすく説明します。 このリソース グループは、Bot Framework、Direct Line Speech チャネル、Azure Cognitive Service for Speech サービスの個別のリソースを作成するときに使います。

  1. リソース グループを作成するために、Azure portal ページにアクセスします。
  2. 次の情報を指定します。
    • [サブスクリプション][無料試用版] に設定します。 (既存のサブスクリプションを使用することもできます。)
    • [リソース グループ] に名前を入力します。 SpeechEchoBotTutorial-ResourceGroup をお勧めします。
    • [リージョン] ドロップダウン メニューから、[米国西部] を選択します。
  3. [確認と作成] を選択します。 "検証に成功しました" というバナーが表示されます。
  4. [作成] を選択します。 リソース グループの作成には数分かかることがあります。
  5. このチュートリアルで後ほど作成するリソースと同様に、このリソース グループをダッシュボードにピン留めして簡単にアクセスできるようにすることをお勧めします。 このリソース グループをピン留めする場合は、名前の横にあるピン アイコンを選択します。

Azure リージョンの選択

サポートされている Azure リージョンを使用してください。 Direct Line Speech チャネルでは、ニューラル音声と標準音声を備えたテキスト読み上げサービスを使用します。 これらの Azure リージョンではニューラル音声が使用され、これらの Azure リージョンでは標準音声 (廃止予定) が使用されます。

リージョンについて詳しくは、「Azure の場所」をご覧ください。

リソースを作成する

サポートされているリージョンにリソース グループを作成したので、次の手順は、このチュートリアルで使用するサービスごとの個別リソースの作成です。

音声サービスのリソースを作成する

  1. Speech サービス リソースを作成するために、Azure portal ページにアクセスします。
  2. 次の情報を指定します。
    • [名前] には、リソースの名前として SpeechEchoBotTutorial-Speech をお勧めします。
    • [サブスクリプション] で、[無料試用版] が選択されていることを確認します。
    • [場所] では [米国西部] を選択します。
    • [価格レベル] では [F0] を選択します。 これは Free レベルです。
    • [リソース グループ] で、 [SpeechEchoBotTutorial-ResourceGroup] を選択します。
  3. 必要な情報をすべて入力したら、[作成] を選びます。 リソースの作成には数分かかることがあります。
  4. このチュートリアルで後ほど、このサービスのサブスクリプション キーが必要になります。 これらのキーには、リソースの [概要] 領域 ([キーの管理] の下) または [キー] 領域からいつでもアクセスできます。

この時点で、リソース グループ (SpeechEchoBotTutorial-ResourceGroup) に Speech サービス リソースがあることを確認します。

名前 Type 場所
SpeechEchoBotTutorial-Speech 音声 米国西部

Azure App Service プランの作成

App Service プランでは、Web アプリを実行するための一連のコンピューティング リソースを定義します。

  1. Azure App Service プランを作成するために、Azure portal ページにアクセスします。
  2. 次の情報を指定します。
    • [サブスクリプション][無料試用版] に設定します。 (既存のサブスクリプションを使用することもできます。)
    • [リソース グループ] で、 [SpeechEchoBotTutorial-ResourceGroup] を選択します。
    • [名前] には、プランの名前として SpeechEchoBotTutorial-AppServicePlan をお勧めします。
    • [オペレーティング システム] では [Windows] を選択します。
    • [リージョン] では [米国西部] を選択します。
    • [価格レベル] で、 [Standard S1] が選択されていることを確認します。 これは既定値です。 そうなっていない場合は、[オペレーティング システム][Windows] に設定します。
  3. [確認と作成] を選択します。 "検証に成功しました" というバナーが表示されます。
  4. [作成] を選択します。 リソースの作成には数分かかることがあります。

この時点で、リソース グループ (SpeechEchoBotTutorial-ResourceGroup) に 2 つのリソースがあることを確認します。

名前 Type 場所
SpeechEchoBotTutorial-AppServicePlan App Service プラン 米国西部
SpeechEchoBotTutorial-Speech Azure AI サービス 米国西部

エコー ボットを構築する

リソースを作成したので、エコー ボットのサンプルを開始します。このサンプルは、入力したテキストをそのまま応答として返します。 このサンプル コードは、ボットを Azure にデプロイした後で接続する Direct Line Speech チャネルと連携するように既に構成されています。

Note

この後の手順と、エコー ボットに関する追加情報については、GitHub にあるサンプルの README をご覧ください。

お使いのマシンでボット サンプルを実行する

  1. サンプル リポジトリを複製します。

    git clone https://github.com/Microsoft/botbuilder-samples.git
    
  2. Visual Studio を開きます。

  3. ツール バーから、[ファイル]>[開く]>[プロジェクト/ソリューション] を選択します。 次に、プロジェクト ソリューションを開きます。

    samples\csharp_dotnetcore\02.echo-bot\EchoBot.sln
    
  4. プロジェクトが読み込まれたら、F5 キーを押してプロジェクトをビルドして実行します。

    ブラウザーが開き、次のような画面が表示されます。

    スクリーンショットに、ボットの準備ができましたというメッセージが表示された EchoBot ページが示されています。

Bot Framework Emulator を使用してボット サンプルをテストする

Bot Framework Emulator は、ボットの開発者がローカルで (トンネルを通じてリモートでも) ボットをテストおよびデバッグできる、デスクトップ アプリです。 このエミュレーターでは、入力されたテキスト (音声ではない) が入力として受け入れられます。 ボットはテキストでも応答します。

Bot Framework Emulator を使用して、ローカルで実行されているエコー ボットをテキスト入力とテキスト出力でテストするには、次の手順に従います。 Azure にボットをデプロイした後、音声入力と音声出力でテストします。

  1. Bot Framework Emulator バージョン 4.3.0 以降をインストールします

  2. Bot Framework Emulator を開き、[ファイル]>[Open Bot](ボットを開く) を選択します。

  3. ボットの URL を入力します。 次に例を示します。

    http://localhost:3978/api/messages
    
  4. [接続] を選択します。

  5. "Hello and welcome!" というメッセージにより、ボットのあいさつが行われます。 任意のテキスト メッセージを入力し、ボットから応答が返されることを確認します。

    エコー ボットとの交信の様子は、次のようになります。Bot Framework Emulator を表示しているスクリーンショット。

ボットを Azure App Service にデプロイする

次の手順は、Azure へのエコー ボットのデプロイです。 ボットをデプロイするには、Azure CLIデプロイ テンプレートを含め、いくつかの方法があります。 このチュートリアルでは、Visual Studio から直接発行する方法に重点を置いて説明します。

Note

以下の手順の実行時に [発行] が表示されない場合は、Visual Studio インストーラーを使用して [ASP.NET と Web 開発] ワークロードを追加してください。

  1. Visual Studio から、Direct Line Speech チャネルで使用するように構成されているエコー ボットを開きます。

    samples\csharp_dotnetcore\02.echo-bot\EchoBot.sln
    
  2. ソリューション エクスプローラーで、EchoBot プロジェクトを右クリックし、[発行] を選択します。

  3. 開いた [発行] ウィンドウで、次の操作を実行します。

    1. [Azure]>[次へ] を選択します。
    2. [Azure App Service (Windows)]>[次へ] を選択します。
    3. 緑色のプラス記号の近くの [新しい Azure アプリ サービスを作成] を選択します。
  4. [App Service (Windows)] ウィンドウが表示されたら、

    • [アカウントの追加] を選択し、Azure アカウントの資格情報を使用してサインインします。 既にサインインしている場合は、ドロップダウン リストから自分のアカウントを選択します。

    • [名前] には、グローバルに一意のボット名を入力します。 この名前は、一意のボット URL を作成するために使用されます。

      日付と時刻を含む既定の名前がボックスに表示されます (例: EchoBot20190805125647)。 このチュートリアルでは、既定の名前を使用できます。

    • [サブスクリプション] では [無料試用版] を選択します。

    • [リソース グループ] で、[SpeechEchoBotTutorial-ResourceGroup] を選択します。

    • [ホスティング プラン] では、[SpeechEchoBotTutorial-AppServicePlan] を選択します。

  5. [作成] を選択します。 ウィザードの最後の画面で [完了] を選択します。

  6. [発行] を選びます。 Visual Studio によってボットが Azure にデプロイされます。

    Visual Studio の出力ウィンドウに、このような成功メッセージが表示されます。

    Publish Succeeded.
    Web App was published successfully https://EchoBot20190805125647.azurewebsites.net/
    

    既定のブラウザーが開き、次の内容を含むページが表示されます: "Your bot is ready! (ボットの準備ができました)"。

この時点で、Azure portal 上でリソース グループ SpeechEchoBotTutorial-ResourceGroup をチェックします。 3 つのリソースが含まれていることを確認します。

名前 Type 場所
EchoBot20190805125647 App Service 米国西部
SpeechEchoBotTutorial-AppServicePlan App Service プラン 米国西部
SpeechEchoBotTutorial-Speech Azure AI サービス 米国西部

Web ソケットの有効化

Web ソケットを使用してボットと Direct Line Speech チャネルが通信できるように、構成を少し変更する必要があります。 以下の手順に従って、Web ソケットを有効にします。

  1. Azure portal にアクセスし、App Service リソースを選択します。 リソースには、EchoBot20190805125647 (一意のアプリ名) のような名前を付ける必要があります。
  2. 左側のウィンドウの [設定] で、[構成] を選択します。
  3. [全般設定] タブを選択します。
  4. [Web ソケット] のトグルを見つけて、[オン] に設定します。
  5. [保存] を選択します。

ヒント

Azure App Service ページの上部にあるコントロールを使用して、サービスを停止または再起動することができます。 この機能は、トラブルシューティングを行う際に便利です。

チャネル登録を作成する

ボットをホストするための Azure App Service リソースを作成したら、次のステップはチャネル登録の作成です。 チャネル登録の作成は、ボットを Direct Line Speech チャネルなどの Bot Framework チャネルに登録するための前提条件です。 ボットがチャネルを使用する方法の詳細については、「ボットをチャネルに接続する」を参照してください。

  1. Azure ボットを作成するために、Azure portal ページにアクセスします。
  2. 次の情報を指定します。
    • [ボット ハンドル] では、「SpeechEchoBotTutorial-BotRegistration-####」と入力します。 #### を任意の値に置き換えます。

      Note

      ボット ハンドルはグローバルに一意である必要があります。 入力後に、"要求されたボット ID は使用できません" というエラー メッセージが表示された場合は、別の番号を選択します。 次の例では 8726 を使用しています。

    • [サブスクリプション] では [無料試用版] を選択します。

    • [リソース グループ] で、 [SpeechEchoBotTutorial-ResourceGroup] を選択します。

    • [場所] では [米国西部] を選択します。

    • [価格レベル] では [F0] を選択します。

    • [アプリ ID とパスワードの自動作成] は無視します。

  3. Azure Bot ペインの下部にある [作成] を選択します。
  4. リソースを作成したら、Azure portal で SpeechEchoBotTutorial-BotRegistration-#### リソースを開きます。
  5. [設定] 領域で、[構成] を選択します。
  6. [メッセージング エンドポイント] では、/api/messages パスを追加して Web アプリの URL を入力します。 たとえば、グローバルに一意のアプリ名が EchoBot20190805125647 だった場合、メッセージング エンドポイントは https://EchoBot20190805125647.azurewebsites.net/api/messages/ のようになります。

この時点で、Azure portal 上でリソース グループ SpeechEchoBotTutorial-ResourceGroup をチェックします。 少なくとも 4 つのリソースが表示されているはずです。

名前 Type 場所
EchoBot20190805125647 App Service 米国西部
SpeechEchoBotTutorial-AppServicePlan App Service プラン 米国西部
SpeechEchoBotTutorial-BotRegistration-8726 ボット サービス グローバル
SpeechEchoBotTutorial-Speech Azure AI サービス 米国西部

重要

[米国西部] を選択した場合でも、Azure AI Bot Service リソースにはグローバル リージョンが表示されます。 これは予期されることです。

省略可能:Web チャットでのテスト

Azure Bot ページには、[設定] の下に [Web チャットでテスト] オプションがあります。 Web チャットはボットに対して認証を行う必要があるため、既定ではボットで機能しません。

デプロイしたボットをテキスト入力でテストする場合は、次の手順を使用します。 これらの手順は省略可能であり、実行しなくてもチュートリアルを続けることができます。

  1. Azure portal で、EchoBotTutorial-BotRegistration-#### リソースを見つけて開きます。

  2. [設定] 領域で、[構成] を選択します。 [Microsoft App ID] の下の値をコピーします。

  3. Visual Studio EchoBot ソリューションを開きます。 ソリューション エクスプローラーで、appsettings.json を見つけて 2 回選択します。

  4. JSON ファイル内にある MicrosoftAppId の横の空の文字列を、コピーした ID 値に置き換えます。

  5. Azure portal に戻ります。 [設定] 領域で、[構成] を選択します。 次に、[Microsoft App ID] の横にある [管理] を選択します。

  6. [新しいクライアント シークレット] を選択します。 説明 (例: web chat) を追加し、[追加] を選択します。 新しいシークレットをコピーします。

  7. JSON ファイル内にある MicrosoftAppPassword の横の空の文字列を、コピーしたシークレット値に置き換えます。

  8. JSON ファイルを保存します。 次のコードのようになります。

    {
      "MicrosoftAppId": "YourAppId",
      "MicrosoftAppPassword": "YourAppPassword"
    }
    
  9. アプリを再発行します。Visual Studio ソリューション エクスプローラーで [EchoBot] プロジェクトを右クリックし、[発行] を選択して、[発行] ボタンを選択します。

Direct Line Speech チャネルを登録する

次は、ボットを Direct Line Speech チャネルに登録します。 このチャネルは、ボットと、Speech SDK を使用してコンパイルされたクライアント アプリとの間の接続を作成します。

  1. Azure portal で、SpeechEchoBotTutorial-BotRegistration-#### リソースを見つけて開きます。

  2. [設定] 領域で [チャネル] を選択し、次の手順を実行します。

    1. [その他のチャネル][Direct Line Speech] を選択します。
    2. [Configure Direct line Speech](Direct line Speech の構成) ページのテキストを確認し、[コグニティブ サービス アカウント] ドロップダウン メニューを展開します。
    3. 前に作成した音声サービス リソース (例: SpeechEchoBotTutorial-Speech) をメニューから選択して、サブスクリプション キーにボットを関連付けます。
    4. 残りの省略可能なフィールドを無視します。
    5. [保存] を選択します。
  3. [設定] 領域で [構成] を選択し、次の手順を実行します。

    1. [ストリーミング エンドポイントを有効にする] チェック ボックスをオンにします。 この手順は、ボットと Direct Line Speech チャネルの間の Web ソケット上に構築される通信プロトコルを作成するために必要です。
    2. [保存] を選択します。

詳細については、「ボットを Direct Line Speech に接続する」を参照してください。

Windows 音声アシスタント クライアントを実行する

Windows 音声アシスタント クライアントは、C# で作成された Windows Presentation Foundation (WPF) アプリであり、Speech SDK を使用して、Direct Line Speech チャネルを介したボットとの通信を管理します。 これを使用して、カスタム クライアント アプリを作成する前にボットと対話し、テストします。 これはオープンソースであるため、実行可能ファイルをダウンロードして実行するか、または自分でビルドすることができます。

Windows 音声アシスタント クライアントには、ボットへの接続の構成、テキストでの会話の表示、JSON 形式での Bot Framework アクティビティの表示、およびアダプティブ カードの表示を行える単純な UI が用意されています。 カスタム キーワードの使用もサポートされます。 このクライアントを使ってボットに話しかけ、音声応答を受け取ります。

Note

この時点で、マイクとスピーカーが有効で動作していることを確認してください。

  1. Windows 音声アシスタント クライアントの GitHub リポジトリに移動します。

  2. 示される手順に従って、次のいずれかを行います。

    • .zip パッケージ内の事前にビルドされた実行可能ファイルをダウンロードして実行します
    • リポジトリを複製し、プロジェクトをビルドすることにより実行可能ファイルを自分でビルドします
  3. GitHub リポジトリの手順に従って、VoiceAssistantClient.exe クライアント アプリケーションを開き、ボットに接続するように構成します。

  4. [再接続] を選択し、"New conversation started - type or press the microphone button (新しい会話が開始されました - 入力するか、マイク ボタンを押してください)" というメッセージが表示されることを確認します。

  5. テストしてみましょう。マイクのボタンを選択し、英語でいくつかの単語を話します。 話すと、認識されたテキストが表示されます。 話し終わると、ボットは認識した単語を "エコー" に続けて独自の声で読み上げて応答します。

    テキストを使用してボットと通信することもできます。 下部のバーにテキストを入力するだけです。

Windows 音声アシスタント クライアントでのエラーのトラブルシューティング

メイン アプリ ウィンドウにエラー メッセージが表示された場合は、この表を使用して問題を特定し、トラブルシューティングを行います。

Message 対策
エラー (AuthenticationFailure) :認証エラー (401) で WebSocket をアップグレードできませんでした。 リソース キー (または認証トークン) とリージョン名が正しいことを確認します アプリの [設定] ページで、キーとそのリージョンが正しく入力されていることを確認します。
エラー (ConnectionFailure) :Connection was closed by the remote host. (リモート ホストにより、接続が切断されました。) エラー コード:1011。 Error details: We couldn't connect to the bot before sending a message (エラーの詳細: メッセージを送信する前にボットに接続できませんでした) [ストリーミング エンドポイントを有効にする] チェック ボックスをオンにしたか、または Web ソケットを有効にしたこと、あるいはその両方を行ったことを確認します。
Azure App Service が実行されていることを確認します。 その場合は、再起動してみてください。
エラー (ConnectionFailure) :Connection was closed by the remote host. (リモート ホストにより、接続が切断されました。) エラー コード:1002。 エラーの詳細:サーバーが状態コード '101' を返すはずが、状態コード '503' を返しました [ストリーミング エンドポイントを有効にする] チェック ボックスをオンにしたか、または Web ソケットを有効にしたこと、あるいはその両方を行ったことを確認します。
Azure App Service が実行されていることを確認します。 その場合は、再起動してみてください。
エラー (ConnectionFailure) :Connection was closed by the remote host. (リモート ホストにより、接続が切断されました。) エラー コード:1011。 Error details: Response status code doesn't indicate success: 500 (InternalServerError) (エラーの詳細: 応答状態コードは成功を示していません: 500 (InternalServerError)) ボットによって、出力アクティビティの [音声入力] フィールドにニューラル音声が指定されましたが、リソース キーに関連付けられている Azure リージョンではニューラル音声がサポートされていません。 ニューラル音声標準音声に関する情報を確認してください。

表にあるアクションで問題に対処できない場合は、「音声アシスタントについてよく寄せられる質問」を参照してください。 このチュートリアルの手順をすべて実行しても問題が解決しない場合は、音声アシスタントの GitHub ページで新しいイシューを入力してください。

接続タイムアウトに関する注意事項

ボットに接続していて、直前の 5 分間にアクティビティが発生していない場合、サービスはクライアントおよびボットとの Web ソケット接続を自動的に閉じます。 これは仕様です。 下部のバーに、"Active connection timed out but ready to reconnect on demand (アクティブな接続がタイムアウトしましたが、必要に応じて再接続できます)" というメッセージが表示されます。

[再接続] ボタンを選択する必要はありません。 マイク ボタンを押して話し始めるか、テキスト メッセージを入力するか、キーワード (有効になっている場合) を言います。 接続は自動的に再確立されます。

ボット アクティビティの表示

すべてのボットがアクティビティ メッセージを送受信します。 Windows 音声アシスタント クライアントの [アクティビティ ログ] ウィンドウには、クライアントがボットから受信した各アクティビティのタイムスタンプ付きログが表示されます。 また、DialogServiceConnector.SendActivityAsync メソッドを使用すると、クライアントがボットに送信したアクティビティを確認できます。 ログ項目を選択すると、関連付けられているアクティビティの詳細が JSON として表示されます。

クライアントが受信したアクティビティの JSON のサンプルを次に示します。

{
    "attachments":[],
    "channelData":{
        "conversationalAiData":{
             "requestInfo":{
                 "interactionId":"8d5cb416-73c3-476b-95fd-9358cbfaebfa",
                 "version":"0.2"
             }
         }
    },
    "channelId":"directlinespeech",
    "conversation":{
        "id":"129ebffe-772b-47f0-9812-7c5bfd4aca79",
        "isGroup":false
    },
    "entities":[],
    "from":{
        "id":"SpeechEchoBotTutorial-BotRegistration-8726"
    },
    "id":"89841b4d-46ce-42de-9960-4fe4070c70cc",
    "inputHint":"acceptingInput",
    "recipient":{
        "id":"129ebffe-772b-47f0-9812-7c5bfd4aca79|0000"
    },
    "replyToId":"67c823b4-4c7a-4828-9d6e-0b84fd052869",
    "serviceUrl":"urn:botframework:websocket:directlinespeech",
    "speak":"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'><voice name='en-US-JennyNeural'>Echo: Hello and welcome.</voice></speak>",
    "text":"Echo: Hello and welcome.",
    "timestamp":"2019-07-19T20:03:51.1939097Z",
    "type":"message"
}

JSON 出力で返される内容の詳細については、アクティビティのフィールドを確認してください。 このチュートリアルでは、textspeak フィールドに注目できます。

Speech SDK に対する呼び出しのクライアント ソース コードの表示

Windows 音声アシスタント クライアントでは、Speech SDK を含む NuGet パッケージ Microsoft.CognitiveServices.Speech が使用されます。 サンプル コードの確認を開始するのに適した場所は、次の 2 つの Speech SDK オブジェクトを作成する、ファイル VoiceAssistantClient\MainWindow.xaml.cs 内の InitSpeechConnector() メソッドです。

  • DialogServiceConfig: リソース キーやそのリージョンなど、構成設定に関して。
  • DialogServiceConnector: 認識された音声とボットの応答を処理するためのチャネル接続およびクライアント サブスクリプションのイベント管理用。

カスタム キーワードのアクティブ化を追加する

Speech SDK では、カスタム キーワードのアクティブ化がサポートされます。 Microsoft のアシスタントの "コルタナさん" と同様に、自分で選んだキーワードを継続的にリッスンするアプリを作成できます。 キーワードは、1 つの単語または複数の単語から成る語句であることにご注意ください。

Note

"キーワード" という用語は、多くの場合、"ウェイク ワード" と同じ意味で使用されます。 両方が Microsoft のドキュメントで使用されている場合があります。

キーワードの検出はクライアント アプリ上で行われます。 キーワードを使用している場合、キーワードが検出された場合にのみ、オーディオが Direct Line Speech チャネルにストリーミングされます。 Direct Line Speech チャネルに含まれる "キーワード検証" と呼ばれるコンポーネントは、クラウドでさらに複雑な処理を実行し、ユーザーが選択したキーワードがオーディオ ストリームの先頭にあることを検証します。 キーワードの検証に成功すると、チャネルがボットと通信します。

これらの手順に従って、キーワード モデルを作成し、このモデルを使用するように Windows 音声アシスタント クライアントを構成したら、ボットを使ってテストします。

  1. Speech Service を使用してカスタム キーワードを作成します。
  2. 前の手順でダウンロードしたモデル ファイルを解凍します。 これには、キーワードに由来する名前が付けられています。 探しているのは kws.table という名前のファイルです。
  3. Windows 音声アシスタント クライアント内で、[設定] メニュー (右上にある歯車アイコン) を見つけます。 [Model file path](モデル ファイルのパス) には、手順 2 の kws.table ファイルの完全なパス名を入力します。
  4. [有効] チェック ボックスをオンにします。 チェック ボックスの横に "Will listen for the keyword upon next connection" (次の接続時にキーワードを聞き取ります) というメッセージが表示されます。正しくないファイルまたは無効なパスを指定した場合は、エラー メッセージが表示されます。
  5. [サブスクリプション キー][Subscription key region](サブスクリプション キーのリージョン) に値を入力し、[OK] を選択して [設定] メニューを閉じます。
  6. [再接続] を選択します。 "New conversation started - type, press the microphone button, or say the keyword (新しい会話が開始されました - 入力するか、マイク ボタンを押すか、キーワードを話してください)" というメッセージが表示されます。これで、アプリは継続的にリッスンします。
  7. キーワードで始まる任意の語句を発声します。 たとえば、"{自分のキーワード}、今何時?" などです。キーワードを発した後に間を置く必要はありません。 完了すると、次の 2 つのことが行われます。
    • 話した内容の音声テキストが表示されます。
    • ボットの応答が聞こえます。
  8. ボットでサポートされている 3 種類の入力を使用した実験に進みます。
    • 下部のバーでのテキストの入力
    • マイク アイコンを押して発声
    • キーワードで始まる任意の語句の発声

キーワード検出を有効にするソース コードの確認

Windows 音声アシスタント クライアントのソース コードで、これらのファイルを使用して、キーワード検出を有効にするコードを確認します。

省略可能: 言語とボットの音声を変更する

作成したボットは、聞き取りと応答を英語で行い、テキスト読み上げの音声に既定の英語 (米国) を使います。 ただし、英語または既定の音声を使用すると限定されているわけではありません。

このセクションでは、ボットが聞き取りと応答に使う言語を変更する方法を説明します。 また、その言語用に別の音声を選ぶ方法についても説明します。

言語の変更

音声テキスト変換」の表に記載されている言語からどれかを選べます。 次の例では、言語をドイツ語に変更します。

  1. Windows 音声アシスタント クライアント アプリを開き、[設定] ボタン (右上の歯車アイコン) を選択して、[言語] フィールドに「de-de」を入力します。 これは、「音声テキスト変換」の表に記載されているロケール値です。

    この手順によって、認識される音声言語が設定され、既定値 en-us がオーバーライドされます。 また、ボットの応答にドイツ語の既定の音声を使用するように Direct Line Speech チャネルに指示します。

  2. [設定] ページを閉じ、[再接続] ボタンを選択して、エコー ボットへの新しい接続を確立します。

  3. マイク ボタンを選択し、ドイツ語の語句を話します。 認識されたテキストが表示され、エコー ボットがドイツ語の既定の音声で応答します。

ボットの既定の音声を変更する

ボットが単純なテキストではなく音声合成マークアップ言語 (SSML) の形式で応答するように指定されている場合は、テキスト読み上げの音声を選んだり、発音を制御したりできます。 エコー ボットは SSML を使用しませんが、それを使用するようにコードを簡単に変更できます。

次の例では、エコー ボットの応答に SSML を追加しています。これにより、ドイツ語の既定の女性の音声の代わりに de-DE-RalfNeural (男性の音声) が使用されます。 お使いの言語でサポートされている標準音声の一覧ニューラル音声の一覧を参照してください。

  1. samples\csharp_dotnetcore\02.echo-bot\echo-bot.cs を開きます。

  2. これらの行を検索します。

    var replyText = $"Echo: {turnContext.Activity.Text}";
    await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    

    それらをこのコードに置き換えます。

    var replyText = $"Echo: {turnContext.Activity.Text}";
    var replySpeak = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='de-DE'>
                    <voice name='de-DE-RalfNeural'>" +
                    $"{replyText}" + "</voice></speak>";
    await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replySpeak), cancellationToken);
    
  3. Visual Studio 内でソリューションをビルドし、ビルド エラーを修正します。

MessageFactory.Text メソッドの 2 つ目の引数で、ボットの応答の activity speak フィールドを設定します。 前に行った変更により、既定ではないドイツ語の音声を指定するため、単純なテキストから SSML に置き換えられます。

ボットの再デプロイ

ボットに必要な変更を行ったので、次のステップでは、それを Azure App Service に再発行して試します。

  1. [ソリューション エクスプローラー] ウィンドウで、[EchoBot] プロジェクトを右クリックし、[発行] を選択します。

  2. 以前のデプロイ構成は、既定値として既に読み込まれています。 [EchoBot20190805125647 - Web 配置] の横にある [発行] を選択します。

    "正常に発行されました" というメッセージが Visual Studio の出力ウィンドウに表示され、"Your bot is ready! (ボットの準備ができました)" というメッセージが表示された Web ページが開きます。

  3. Windows 音声アシスタント クライアント アプリを開きます。 [設定] ボタン (右上の歯車アイコン) を選択して、[言語] フィールドにまだ「de-de」が入力されていることを確認します。

  4. Windows 音声アシスタント クライアントを実行する」の手順に従って、新しくデプロイされたボットに再接続し、新しい言語で話し、新しい音声を使用してその言語でのボットの応答を聞きます。

リソースをクリーンアップする

このチュートリアルでデプロイしたエコー ボットを引き続き使用しない場合は、Azure リソース グループを削除することで、そのエコー ボットおよびそれに関連付けられているすべての Azure リソースを削除できます。

  1. Azure portal で、[Azure サービス][リソース グループ] を選択します。
  2. SpeechEchoBotTutorial-ResourceGroup リソース グループを見つけます。 3 つのドット (...) を選択します。
  3. [リソース グループの削除] を選択します。

ドキュメントを見つける

次のステップ