在代理程式的對話回合中,代理程式必須回應使用者提出的問題、查詢資訊或終止工作階段。代理程式也可能需要與服務聯絡,才能產生動態回應或採取行動。完成 所有這些操作。
出貨內容可能包含下列任一項目:
- 靜態回應訊息。
- Webhook 會呼叫動態回應和/或採取行動。
- 參數預設集,可設定或覆寫參數值。
在代理程式的回合中,可以 (有時也應該) 呼叫多個完成動作,每個動作都可能會產生回應訊息。Dialogflow CX 會將這些回應保留在回應佇列中。 代理程式回合結束後,Dialogflow CX 會將排序過的回應傳送給使用者。
完成用途
凡是需要回應訊息的地方,都會用到完成動作:
針對每個使用案例,控制台都會開啟完成編輯面板。

服務專員回覆 (對話選項)
代理程式回覆訊息是指您在設計階段定義的代理程式回覆。建立完成動作時,您會定義這些參數。在執行階段,這些回應會新增至回應佇列。
回覆訊息有多種類型,詳情請參閱下列小節。使用控制台時,履行動態面板會顯示初始的「代理程式對話」資訊卡,但您可以點選「+ 新增對話回覆」,為其他回覆訊息類型新增更多資訊卡。
靜態文字回應
靜態文字回應訊息會將文字對話傳送給使用者。如果您的偵測意圖 API 呼叫或整合呼叫使用語音合成功能,系統會使用這段文字生成音訊內容。在這種情況下,提供的文字可以選擇使用語音合成標記語言 (SSML)。
您可以定義多張文字回應資訊卡,以及每張資訊卡中的多個文字回應。如果定義多張資訊卡,系統會在執行階段串連這些資訊卡,形成單一回應。如果您在資訊卡中定義多個回應,系統會在執行階段隨機選擇資訊卡中的其中一則訊息。
自訂酬載
部分整合支援自訂酬載回應,可處理豐富的回應。這些自訂酬載必須以整合說明文件中定義的 JSON 格式提供。舉例來說,請參閱「Dialogflow CX Messenger 自訂酬載格式」。
您可以在自訂酬載 JSON 中加入參數參照。這些值應視為 JSON 字串值,因此請務必以雙引號括住。例如:
{
"someField": "$session.params.date"
}
您也可以將自訂酬載傳送至您開發的整合服務。 Dialogflow CX 不會處理這類事件,因此您必須在自己的業務邏輯中處理。
另請參閱下方的自訂酬載範本一節。
轉交給真人服務專員
這項回應會向偵測意圖 API 呼叫端發出信號,表示應將對話轉交給真人服務專員。Dialogflow CX 只會使用這項信號來識別已移交的對話,以利進行評估,不會以任何方式變更工作階段狀態。您的系統或整合服務可以使用這項信號,採取必要行動來移交對話。Dialogflow CX 不會對這項資料施加任何結構,因此您可以選擇適合系統的任何結構。
對話成功中繼資料
這項回應會向偵測意圖 API 呼叫端發出信號,表示與 Dialogflow CX 代理程式的對話成功。Dialogflow CX 只會使用這項信號來識別成功對話,以利評估成效,不會以任何方式變更工作階段狀態。您的系統或整合項目可使用這項信號採取必要行動。Dialogflow CX 不會對這項資料施加任何結構,因此您可以選擇適合系統的任何結構。
播放預錄音訊
如果整合支援這項功能,這項回覆就會播放音訊檔案。
不同整合服務的音訊檔案格式規定可能有所不同。 舉例來說,請參閱 Dialogflow CX Phone Gateway 的需求。
如果是合作夥伴電話整合,合作夥伴必須能存取音訊檔案的網址。合作夥伴一律可存取公開網址,例如 Cloud Storage 中的公開檔案。合作夥伴也可能提供音訊檔案的受限存取權。詳情請參閱合作夥伴說明文件。
輸出音訊文字
這項回應與 text 回應類似, 但僅適用於語音合成。 如果代理程式可以處理文字和語音工作階段,您可以透過專屬的文字和輸出音訊文字回應,為文字和語音提供不同的使用者體驗。如果語音對話提供輸出音訊文字,系統會忽略純文字回應。
如果代理程式同時處理文字和語音工作階段,且您希望使用相同的訊息回覆,只要在文字和語音工作階段中都使用文字回覆即可。
輸出音訊文字會與文字回覆類似,以串聯方式呈現。 如果輸出音訊文字回應混合了文字和 SSML,串聯結果會視為 SSML。理想情況下,代理程式設計師應一律使用文字或 SSML。
條件式回應
此回應類型用於條件式回應。一般格式為:
if [condition] [response] elif [condition] [response] elif [condition] [response] else [response] endif
其中:
[condition]的格式與路徑條件相同[response]是文字回覆elif和else方塊為選用項目
例如:
if $session.params.user-age >= 21 Ok, you may enter. else Sorry, you cannot enter. endif
[condition] 和 [response] 都可以使用內嵌系統函式,在對話期間產生動態值。詳情請參閱系統函式和路徑條件的參考資料。系統會根據完成程序開始時的工作階段狀態,解析 [condition]。如果 [response] 依附於工作階段狀態,系統會在完成後根據更新的工作階段狀態進行解析。
如果是多語言代理程式,[condition] 是所有語言通用的,而 [response] 則因語言而異。在主控台中變更[condition]的語言時,所有代理程式語言都會更新這部分,且由於這會成為新條件,因此系統會清除更新[condition]時所選語言以外的所有語言[response]。
電話轉接來電
對於部分電話整合服務,你可以指定美國電話號碼來轉接電話。在執行階段,當 Dialogflow CX 虛擬服務專員呼叫含有通話轉接功能的執行要求時,通話會轉接至指定號碼,虛擬服務專員處理程序則會暫停。
資料儲存庫工具回應
這個回覆類型會設定從連結的資料儲存庫工具傳回的代理程式回覆。如果在這個完成動作中設定資料儲存庫工具,系統會自動填入資料儲存庫工具的回覆資訊卡。
- 來源連結:設定回覆後傳回給使用者的引用內容數量上限。引文是資料儲存庫中資訊來源的連結,會以按鈕形式顯示。預設值為 1。
- 內嵌引用內容:這個欄位可限制每個句子傳回的內嵌引用內容數量,而非在回覆後列出連結。
- 生成式備援:勾選這個方塊後,如果資料儲存庫傳回空白結果,代理程式會嘗試生成 AI 回覆。如果失敗,系統會改用靜態回應。
- 靜態回應:您可以在最後一個欄位中輸入靜態文字回應。並逐字傳送給使用者。
管道專屬的回覆訊息
定義完成時,您可以建立管道專屬的回覆訊息,針對文字即時通訊、語音、簡訊、支援管道的特定整合等建立目標回覆。不屬於特定頻道的任何回覆訊息,都稱為預設回覆訊息。
在執行階段,如果偵測意圖要求指定管道,Dialogflow CX 會選取預設回應訊息或管道專屬回應訊息。最佳做法是定義預設回覆訊息,即使您使用管道專屬的回覆訊息也一樣。如果系統無法提供有效的管道,預設回覆訊息可做為備用選項。
頻道名稱是自訂欄位,可設為任何文字。 如果您直接使用 Dialogflow CX API 進行執行階段呼叫,可以隨意使用任何管道名稱。如果您使用現有整合項目,必須使用整合項目可辨識的管道名稱。
在設計階段設定管道專屬的回覆訊息
如要在使用主控台時,為完成動作提供管道專屬的回應訊息:
- 新增預設回覆訊息後,按一下「新增管道」。 使用者介面可讓您新增管道專屬的回覆訊息。 再次按一下「新增管道」,即可新增其他管道。
使用 API 時,如要為完成動作提供管道專屬的回應訊息,請按照下列步驟操作:
- 為每則回覆訊息將
Fulfillment.messages[i].channel欄位設為所需管道。如未設定這個欄位,回應會是預設的回應訊息。
在執行階段使用管道專屬的回覆訊息
如要接收特定管道的回覆訊息,必須在偵測意圖要求訊息中指定管道。請參閱 Sessions 類型的 detectIntent 方法中的 queryParams.channel 欄位。
選取工作階段參照的通訊協定和版本:
| 通訊協定 | V3 | V3beta1 |
|---|---|---|
| REST | 工作階段資源 | 工作階段資源 |
| RPC | 工作階段介面 | 工作階段介面 |
| C++ | SessionsClient | 不適用 |
| C# | SessionsClient | 不適用 |
| Go | SessionsClient | 不適用 |
| Java | SessionsClient | SessionsClient |
| Node.js | SessionsClient | SessionsClient |
| PHP | 不適用 | 不適用 |
| Python | SessionsClient | SessionsClient |
| Ruby | 不適用 | 不適用 |
如果要求中未定義任何管道,或在執行要求時找不到相符管道,Dialogflow CX 就會傳回預設的回應訊息。
自訂酬載範本
如果您經常使用自訂酬載,建議使用自訂酬載範本。 自訂酬載有時會很大且很複雜,因此使用範本有助於簡化代理程式建立程序。
您可以在代理程式設定中提供這些範本,這樣每當為代理程式建立執行要求時,就能選取這些範本。
舉例來說,您可以將「是」和「否」按鈕的 JSON 酬載定義為自訂酬載範本。建立需要這些按鈕的完成動作時,只要在建立完成動作時選取範本即可。
選取履單自訂酬載的範本後,範本內容會插入酬載中。然後視需要編輯酬載。
如果變更範本,系統不會自動將變更套用至所有參照該範本的履行酬載。
如要建立自訂酬載範本,請參閱代理程式一般設定。
如要在建立完成事項時選取自訂酬載範本,請在建立完成事項自訂酬載時,按一下「選取範本」。
Webhook 呼叫
呼叫執行要求時,如果執行要求有「Webhook」,代理程式就會將要求傳送至 Webhook。Webhook 可以在服務中執行任何必要動作、提供動態回應訊息、覆寫參數值,以及變更目前頁面。
以下說明執行要求的 Webhook 設定:
| 字詞 | 定義 |
|---|---|
| 啟用 Webhook | 這會啟用履行的 Webhook。 |
| Webhook | 選取 Webhook 資源。 |
| 標記 | 您在這裡提供的文字標記,會填入傳送至 Webhook 服務的 Webhook 要求 WebhookRequest.fulfillmentInfo.tag 欄位。這可用於以符合履行需求的方式控管 Webhook 行為。 |
| 傳回部分回應 | 允許取消播放部分回覆。詳情請參閱進階語音設定。 |
預設參數
你可以使用完成動作提供預設值,設定或覆寫目前的參數值。系統會在解析靜態回應訊息或呼叫 Webhook 前,套用這些預設值。
您也可以使用系統函式,將參數預設為動態產生的值。
以下是幾個範例:
將參數
now設為目前時間:參數 值 現在 $sys.func.NOW() 將現有參數
counter遞增 1:參數 值 計數器 $sys.func.ADD($session.params.counter, 1) 將參數
new-cost設為other-cost參數值,同時保留完整的複合物件值:參數 值 new-cost $sys.func.IDENTITY($session.params.other-cost)
資料儲存庫工具
如要進一步瞭解這項功能,請參閱資料儲存工具說明文件。
進階語音設定
這些進階語音設定可選擇覆寫相同的頁面語音設定、流程語音設定和代理程式語音設定。
回應佇列
在代理程式的回合中,可以 (有時也應該) 呼叫多個完成動作,每個動作都可能會產生回應訊息。Dialogflow CX 會將這些回應保留在回應佇列中。
串流 API 的部分回應
根據預設,代理輪流對話結束後,Dialogflow CX 才會將排序過的回覆傳送給使用者。您也可以在執行要求中啟用「Return partial response」(傳回部分回應) 選項,在使用串流 API 時,將目前排隊的回應當做部分回應傳回。詳情請參閱「網頁生命週期」。
舉例來說,如果 Webhook 可能會長時間執行,您可以在執行要求中新增靜態回應,並啟用部分回應。這會讓 Dialogflow CX 清空回應佇列,並在呼叫 Webhook 前,將所有訊息做為部分回應傳送。
目前下列項目不支援部分回應,但日後會支援:
如要在模擬器中測試這項功能,請開啟部分回應。

在下列範例中,假設 Webhook 需要 5 秒才能完成,且您未啟用部分回應。Webhook 完成前,Dialogflow CX 代理程式的對話回合不會結束。在這 5 秒的回合中,系統會將回應排入佇列,等待 Webhook 回傳,並在回合完成後才將回應傳送給使用者。這會導致使用者體驗不佳。
如果在第一個執行要求中啟用部分回應,Dialogflow CX 會快速傳回第一個執行要求訊息,並呼叫 Webhook。Webhook 完成後,Dialogflow CX 會傳回最終回應。在這個情況下,使用者體驗會有所提升,因為他們會知道需要稍待片刻。此外,Webhook 呼叫會與傳送給使用者的回應並行執行。
語音合成標記語言 (SSML)
您可以在文字或輸出音訊文字回覆欄位中使用語音合成標記語言 (SSML)。您可以設定語音停頓,以及首字母縮略字、日期、時間、縮寫的讀法,或是指定須消音的文字等細節,讓音訊回應具備更高的自訂彈性。
如需語法詳細資料,請參閱「Text-to-Speech SSML 說明文件」。
<speak></speak>