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

代理回覆 (對話選項)
代理程式回覆訊息是在設計階段定義的代理程式回覆。您可以在建立完成動作時定義這些參數。在執行階段,這些回應會新增至回應佇列。
回覆訊息有多種類型,詳情請參閱下列小節。使用控制台時,執行要求面板會顯示初始的「Agent dialogue」資訊卡,但您可以點擊「+ Add dialogue response」,為其他回覆訊息類型新增更多資訊卡。
靜態文字回應
靜態文字回應訊息會將文字對話傳送給使用者。如果您的偵測意圖 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 中的公開檔案。合作夥伴也可能提供音訊檔案的受限存取權。詳情請參閱合作夥伴說明文件。
輸出音訊文字
這項回應與文字回應類似, 但僅適用於語音合成。 如果代理程式可以處理文字和語音工作階段,您可以使用專屬的文字和輸出音訊文字回應,為文字和語音建立不同的使用者體驗。如果語音對話提供輸出音訊文字,系統會忽略純文字回應。
如果代理程式同時處理文字和語音工作階段,且您希望回應訊息相同,只要在文字和語音工作階段中都使用文字回應即可。
輸出音訊文字會與文字回覆類似,以串聯方式呈現。 如果輸出音訊文字回應混合了文字和 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>