アプリケーションでは、エンドユーザーに音声で返答するためのボットが必要となることがよくあります。Dialogflow アプリケーションでは、エンドユーザーに音声で返答するためのボットが必要となることがよくあります。Dialogflow では、DeepMind WaveNet を利用した Cloud Text-to-Speech を使用して、エージェントから音声レスポンスを生成できます。インテントのテキスト レスポンスから音声への変換は、音声出力、音声合成、
インテントを検出するときに、入力と出力の両方に音声を使用できます。これは、純粋な音声インターフェースを使用してユーザーと通信するアプリを開発する場合によくあります。
サポートされている言語の一覧については、言語ページの TTS 列をご覧ください。
始める前に
この機能は API をエンドユーザー インタラクションに使用する場合にのみ利用できます。統合を使用している場合は、このガイドをスキップできます。
始める前に、次の手順を完了します。
- Dialogflow の基本をご覧ください。
- 手順に沿って設定してください。
エージェントを作成する
- Dialogflow ES コンソールに移動します。
- プロンプトが表示されたら、コンソールにログインします。詳細については、Dialogflow コンソールの概要をご覧ください。
- サイドバー メニューで [エージェントを読み込み中] を開きます。
- [CREATE AGENT] をクリックします。
- エージェント名、デフォルトの言語、デフォルトのタイムゾーンを入力します。
- 既存のプロジェクトを入力します。Dialogflow コンソールでプロジェクトを作成するには、[Create a new Google project] を選択します。
- [作成] をクリックします。
インテントの検出
インテントを検出するには、Sessions タイプの detectIntent メソッドを呼び出します。
REST
1.音声コンテンツを作成する
サンプルの input_audio ファイル 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 CX への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Dialogflow CX への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Dialogflow CX への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
関連するレスポンス フィールドの詳細については、インテント検出のレスポンスをご覧ください。
インテント検出のレスポンス
インテント検出リクエストに対するレスポンスは、DetectIntentResponse オブジェクトです。
通常のインテント検出処理では、DetectIntentResponse.queryResult.fulfillmentMessages フィールドの内容が制御されます。
DetectIntentResponse.outputAudio フィールドには、DetectIntentResponse.queryResult.fulfillmentMessages フィールドにあるデフォルトのプラットフォーム テキスト レスポンスの値に基づいて音声が入力されます。
- 複数のデフォルト テキスト レスポンスが存在する場合は、音声の生成時に連結されます。
- デフォルトのプラットフォーム テキスト レスポンスが存在しない場合、生成される音声コンテンツは空になります。
DetectIntentResponse.outputAudioConfig フィールドには、出力音声の生成に使用する音声設定が入力されます。
ストリームからインテントを検出する
ストリームからインテントを検出する場合は、出力音声を使用しない例(ストリームからのインテントの検出)と同様のリクエストを送信します。ただし、リクエストに OutputAudioConfig フィールドを指定します。output_audio フィールドと output_audio_config フィールドは、Dialogflow API サーバーから取得する最終的なストリーミング レスポンスに入力されます。詳細については、StreamingDetectIntentRequest と StreamingDetectIntentResponse をご覧ください。
読み上げのためのエージェント設定
音声合成のさまざまな側面を制御できます。エージェントの音声設定をご覧ください。
Dialogflow シミュレータを使用する
Dialogflow シミュレータを使用して、エージェントと対話して音声レスポンスを受け取ることができます。
- エージェントの音声設定の手順に沿って、自動テキスト読み上げを有効にします。
- シミュレータで、キーボードから「book a room」と入力するか、声に出して言います。
- シミュレータの [出力音声] セクションを表示します。