應用程式通常需要透過機器人回覆使用者。Dialogflow 可以透過採用 DeepMind WaveNet 技術的 Cloud Text-to-Speech 產生代理程式語音回應。從意圖文字回應變為音訊內容的這類轉換作業稱為「音訊輸出」、「語音合成」、「文字轉語音」或「TTS」。
這份指南提供在偵測意圖時使用音訊輸入和輸出內容的範例。如果您開發的應用程式是透過純音訊介面與使用者互動,這種使用情形就相當常見。
如需系統支援的語言清單,請查看「Languages」(語言) 頁面中的 TTS 資料欄。
事前準備
這項功能僅適用於用於使用者互動的 API。如果您使用的是整合,可以略過本指南。
閱讀本指南之前,請先完成下列工作:
- 詳閱 Dialogflow 基本概念。
- 執行設定步驟。
建立虛擬服務專員
如果您尚未建立服務帳戶,請立即建立:
- 前往 Dialogflow ES 主控台。
- 按照系統要求登入 Dialogflow 主控台。詳情請參閱 Dialogflow 主控台總覽。
- 按一下左側欄選單中的 [Create Agent] (建立代理程式)。(如果您已有其他代理程式,請按一下代理程式名稱然後捲動至底部,再按一下 [Create new agent] (建立新代理程式)。)
- 輸入代理程式的名稱、預設語言和預設時區。
- 如果您已建立專案,請輸入該項專案的資料。如要允許 Dialogflow 主控台建立專案,請選取 [Create a new Google project] (建立新 Google 專案)。
- 按一下 [Create] (建立) 按鈕。
將範例檔案匯入代理程式
本指南中的步驟會假設您的代理程式符合某些條件,因此您需要匯入為本指南準備的代理程式。匯入時,這些步驟會使用「還原」選項,覆寫所有介面設定、意圖和實體。
如要匯入檔案,請按照下列步驟操作:
-
下載
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 方法和網址:
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 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要向 Dialogflow 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要向 Dialogflow 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證機制」。
如需相關回應欄位的說明,請參閱偵測意圖回應一節。
偵測意圖回應
偵測意圖要求的回應屬於 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」(輸出音訊) 專區。