應用程式通常需要透過機器人回覆使用者。Dialogflow 應用程式通常需要透過機器人回覆使用者。Dialogflow 可讓您使用採用 DeepMind WaveNet 技術的 Cloud Text-to-Speech,產生代理程式的語音回應。從意圖文字回應變為音訊內容的這類轉換作業稱為「音訊輸出」、「語音合成」、「文字轉語音」或「TTS」。
偵測意圖時,您可以同時使用音訊輸入和輸出內容。如果您開發的應用程式是透過純音訊介面與使用者互動,這種使用情形就相當常見。
如需支援的語言清單,請查看「Languages」(語言) 頁面中的 TTS 資料欄。
事前準備
這項功能僅適用於使用 API 進行使用者互動的情況。如果您使用的是整合項目,可以略過本指南。
開始之前,請先完成下列步驟:
- 詳閱 Dialogflow 基本概念。
- 執行設定步驟。
建立虛擬服務專員
- 前往 Dialogflow ES 主控台。
- 如果系統提示,請登入控制台。詳情請參閱「Dialogflow 主控台總覽」。
- 在側欄選單中,展開「載入代理程式」。
- 按一下「建立新代理」。
- 輸入代理程式名稱、預設語言和預設時區。
- 輸入現有專案。如要讓 Dialogflow 主控台建立專案,請選取「建立新的 Google 專案」。
- 按一下「Create」(建立)。
偵測意圖
如要偵測意圖,請呼叫 Sessions 類型的 detectIntent 方法。
REST
1. 準備音訊內容
下載book-a-room.wav範例 input_audio 檔案,其內容為「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 方法和網址:
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] 欄位中的文字相符。系統會選取第二項 fulfillmentMessages 元素,因為該項元素是預設平台的文字回應。
Java
如要向 Dialogflow CX 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要向 Dialogflow CX 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要向 Dialogflow CX 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
如要進一步瞭解相關回應欄位,請參閱「偵測意圖回應」一節。
偵測意圖回應
偵測意圖要求的回應屬於 DetectIntentResponse 類型。
一般的偵測意圖處理程序會控管 DetectIntentResponse.queryResult.fulfillmentMessages 欄位的內容。
系統會依據 DetectIntentResponse.queryResult.fulfillmentMessages 欄位中的「預設」平台「文字」回應值,在 DetectIntentResponse.outputAudio 欄位中填入音訊:
- 如有多則預設文字回應,系統會在產生音訊時將其串聯。
- 如果沒有任何預設的平台文字回應,則系統會產生空白的音訊內容。
系統會依據用來產生輸出音訊內容的音訊設定填入 DetectIntentResponse.outputAudioConfig 欄位。
利用串流偵測意圖
利用串流偵測意圖時,您必須傳送與不使用輸出音訊的範例類似的要求。詳情請參閱利用串流偵測意圖一文。不過,您必須為要求提供 OutputAudioConfig 欄位。在您從 Dialogflow API 伺服器取得的最後一則串流回應中,output_audio 和 output_audio_config 欄位會填入相關值。詳情請參閱 StreamingDetectIntentRequest 和 StreamingDetectIntentResponse。
語音相關代理程式設定
您可以控管語音合成作業的各項程序。請參閱「代理程式語音設定」。
使用 Dialogflow 模擬器
您可以使用 Dialogflow 模擬工具與代理程式互動及接收音訊回應,方法如下:
- 按照「代理程式語音設定」一文的指示,啟用自動文字轉語音功能。
- 在模擬工具中輸入或說出「book a room」。
- 查看模擬工具中的「output audio」(輸出音訊) 專區。