アプリケーションでは、エンドユーザーに音声で返答するためのボットが必要となることがよくあります。Dialogflow では、Cloud Text-to-Speech(DeepMind WaveNet 利用)を使用して、エージェントからの音声レスポンスを生成できます。インテントのテキスト レスポンスからオーディオへの変換は、音声出力、音声合成、テキスト読み上げ、または TTS と呼ばれています。
このガイドでは、インテントを検出するときに入力と出力の両方に音声を使用する例を示します。このユースケースは、開発するアプリがユーザーとの通信に純粋に音声だけのインターフェースを使用する場合に一般的なものです。
サポートされている言語のリストについては、言語ページの TTS の列をご覧ください。
始める前に
この機能は API をエンドユーザー インタラクションに使用する場合にのみ利用できます。統合を使用している場合は、このガイドをスキップできます。
このガイドを読む前に、次の手順を行ってください。
- Dialogflow の基本をご覧ください。
- 手順に沿って設定してください。
エージェントを作成する
エージェントをまだ作成していない場合は、ここで作成します。
- Dialogflow ES コンソールに移動します。
- Dialogflow コンソールにログインするよう求められたら、ログインします。詳細については、Dialogflow コンソールの概要をご覧ください。
- 左側のサイドバー メニューで [Create Agent] をクリックします。(すでに他のエージェントをお持ちの場合は、エージェント名をクリックし、一番下までスクロールして [Create new agent] をクリックします)。
- エージェント名、デフォルトの言語、デフォルトのタイムゾーンを入力します。
- すでにプロジェクトを作成している場合は、そのプロジェクトを入力します。Dialogflow コンソールでプロジェクトを作成できるようにする場合は、[Create a new Google project] を選択します。
- [Create] ボタンをクリックします。
エージェントにサンプル ファイルをインポートする
このガイドの手順でエージェントの前提条件を設定するため、このガイド用に準備されたエージェントをインポートする必要があります。インポート時に、この手順では restore オプションが使用されます。これにより、すべてのエージェント設定、インテント、エンティティが上書きされます。
ファイルをインポートする手順は次のとおりです。
-
room-booking-agent.zip
ファイルをダウンロードします。 - Dialogflow ES コンソールに移動します。
- エージェントを選択します。
- エージェント名の横にある設定 settings ボタンをクリックします。
- [Export and Import] タブを選択します。
- [Restore from Zip] を選択し、手順に従ってダウンロードした zip ファイルを復元します。
インテントの検出
インテントを検出するには、Sessions
タイプの detectIntent
メソッドを呼び出します。
REST
1. 音声コンテンツを作成する
サンプルの入力音声ファイル book-a-room.wav
をダウンロードします。このファイルには「book a room」という音声が収録されています。この例では、音声ファイルが Base64 でエンコードされている必要があります。これにより、下記の JSON リクエストでの指定が可能になります。Linux の例を次に示します。
wget https://cloud.google.com/dialogflow/es/docs/data/book-a-room.wav base64 -w 0 book-a-room.wav > book-a-room.b64
他のプラットフォームの例については、Cloud Speech API のドキュメントの Base64 エンコード音声の埋め込みをご覧ください。
2. インテント検出リクエストを行う
Sessions
タイプで detectIntent
メソッドを呼び出し、Base64 エンコード音声を指定します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID
- SESSION_ID: セッション ID
- BASE64_AUDIO: 上記の出力ファイルからの Base64 コンテンツ
HTTP メソッドと URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/agent/sessions/SESSION_ID:detectIntent
リクエストの本文(JSON):
{ "queryInput": { "audioConfig": { "languageCode": "en-US" } }, "outputAudioConfig" : { "audioEncoding": "OUTPUT_AUDIO_ENCODING_LINEAR_16" }, "inputAudio": "BASE64_AUDIO" }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "responseId": "b7405848-2a3a-4e26-b9c6-c4cf9c9a22ee", "queryResult": { "queryText": "book a room", "speechRecognitionConfidence": 0.8616504, "action": "room.reservation", "parameters": { "time": "", "date": "", "duration": "", "guests": "", "location": "" }, "fulfillmentText": "I can help with that. Where would you like to reserve a room?", "fulfillmentMessages": [ { "text": { "text": [ "I can help with that. Where would you like to reserve a room?" ] } } ], "intent": { "name": "projects/PROJECT_ID/agent/intents/e8f6a63e-73da-4a1a-8bfc-857183f71228", "displayName": "room.reservation" }, "intentDetectionConfidence": 1, "diagnosticInfo": {}, "languageCode": "en-us" }, "outputAudio": "UklGRs6vAgBXQVZFZm10IBAAAAABAAEAwF0AAIC7AA..." }
queryResult.action
フィールドの値が room.reservation
であり、outputAudio
フィールドに Base64 音声文字列が設定されていることに注意してください。
3. 出力音声を再生する
outputAudio
フィールドからテキストをコピーして、output_audio.b64
という名前のファイルに保存します。このファイルを音声に変換する必要があります。Linux の例を次に示します。
base64 -d output_audio.b64 > output_audio.wav
他のプラットフォームの例については、Text-to-Speech API ドキュメントの Base64 でエンコードされたオーディオ コンテンツのデコードをご覧ください。
これで、output_audio.wav
音声ファイルを再生できるようになりました。上記の queryResult.fulfillmentMessages[1].text.text[0]
フィールドのテキストと一致する音声が聞こえます。2 番目の fulfillmentMessages
要素が選択されたのは、デフォルト プラットフォームのテキスト レスポンスであるためです。
Java
Dialogflow への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
Dialogflow への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Dialogflow への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
関連するレスポンス フィールドの説明については、インテント検出のレスポンスをご覧ください。
インテント検出のレスポンス
インテント検出リクエストに対するレスポンスは、DetectIntentResponse
オブジェクトです。
通常のインテント検出処理によって、DetectIntentResponse.queryResult.fulfillmentMessages
フィールドのコンテンツが制御されます。
DetectIntentResponse.outputAudio
フィールドには音声が格納されますが、この基になるのは、DetectIntentResponse.queryResult.fulfillmentMessages
フィールドで見つかったデフォルトのプラットフォームのテキスト形式のレスポンスです。複数のデフォルト テキスト レスポンスが存在する場合は、音声を生成するときに連結されます。デフォルトのプラットフォームのテキスト形式のレスポンスが 1 つも存在しない場合は、生成された音声コンテンツが空になります。
DetectIntentResponse.outputAudioConfig
フィールドには、出力音声の生成に使用する音声設定が入力されます。
ストリームからインテントを検出する
ストリームからインテントを検出するときに送信するリクエストは、出力音声を使用しない例(ストリームからインテントを検出する)と同様ですが、このリクエストでは OutputAudioConfig フィールドを指定します。output_audio
フィールドと output_audio_config
フィールドには、Dialogflow API サーバーから受け取った最後のストリーミング レスポンスが挿入されます。詳細については、StreamingDetectIntentRequest と StreamingDetectIntentResponse をご覧ください。
読み上げのためのエージェント設定
音声合成のさまざまな側面を制御できます。詳しくは、エージェントの音声設定をご覧ください。
Dialogflow シミュレータを使用する
Dialogflow シミュレータを使用して、エージェントと対話して音声レスポンスを受け取ることができます。手順は次のとおりです。
- 前述の手順に従って自動テキスト読み上げを有効にします。
- シミュレータで、キーボードから「book a room」と入力するか、声に出して言います。
- シミュレータの下部にある [output audio] セクションを見ます。