如果您未採用整合,則須編寫可與使用者互動的程式碼。針對每一回合對話,您的程式碼會呼叫 Dialogflow API 來查詢代理程式。本指南說明瞭兩種與代理程式互動的方法:您可以使用用戶端程式庫,也可以透過指令列使用 REST API。
事前準備
如果您不打算使用 API,可以略過本快速入門導覽課程。
閱讀本指南之前,請先完成下列工作:
- 瞭解 Dialogflow 基本概念。
- 執行設定步驟。
- 執行建構代理程式快速入門指南中的步驟。以下步驟將繼續處理您在該指南中建立的代理程式。
如果該代理程式已不存在,可以下載
build-agent-quickstart.zip並匯入檔案。
工作階段
工作階段代表 Dialogflow 代理程式和使用者之間的對話。您可以在對話開始時建立一個工作階段,並將其用於每一回合的對話。當對話結束,您便停止使用該工作階段。
您不該將同一工作階段用於與不同使用者的並行對話。Dialogflow 會保留每個作用中工作階段目前有效的背景資訊。而且工作階段資料會由 Dialogflow 儲存 20 分鐘。
每個工作階段都是由系統產生的工作階段 ID 所決定。 您可透過在偵測意圖要求中提供新的工作階段 ID,來建立新的工作階段。工作階段 ID 是長度最多 36 個位元組的字串。您的系統負責產生不重複的工作階段 ID,其可以是隨機數字、經過雜湊處理的使用者 ID,或是方便產生的任何其他值。
偵測意圖
使用 API 互動時,您的服務會直接與使用者互動。針對每一回合對話,您的服務會呼叫 Sessions 類型的 detectIntent 或 streamingDetectIntent 方法,將使用者表達內容傳送到 Dialogflow。Dialogflow 使用相符意圖、行動、參數及為該意圖定義的回應等相關資訊來做出回應。您的服務會視需要執行動作,例如查詢資料庫或呼叫外部 API,並傳送訊息給使用者。此程序會一直持續到對話結束為止。
下列範例說明如何偵測意圖。每個範例都接受以下輸入的子集:
- 專案 ID :使用您在設定步驟中所建立專案的專案 ID。
- 工作階段 ID:基於測試代理程式之目的,您可使用任何識別碼。例如一般範例常用「123456789」。
- 一或多個文本:這是單一的使用者表達內容或使用者表達內容清單。如果提供了多個表達內容,範例程式碼便會針對每個表達內容呼叫偵測意圖。嘗試使用「I know french」(我會法文)。
- 語言代碼:使用者表達內容的語言代碼。對於此範例代理程式,請使用「en-US」。
REST
如要偵測意圖,請呼叫Sessions 資源上的 detectIntent 方法。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- SESSION_ID:工作階段 ID
HTTP 方法和網址:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/agent/sessions/SESSION_ID:detectIntent
JSON 要求主體:
{
"query_input": {
"text": {
"text": "I know french",
"language_code": "en-US"
}
}
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{
"responseId": "856510ca-f617-4e25-b0bb-a26c0a59e030-19db3199",
"queryResult": {
"queryText": "I know french",
"parameters": {
"language": "French",
"language-programming": ""
},
"allRequiredParamsPresent": true,
"fulfillmentText": "Wow! I didn't know you knew French. How long have you known French?",
"fulfillmentMessages": [
{
"text": {
"text": [
"Wow! I didn't know you knew French. How long have you known French?"
]
}
}
],
"outputContexts": [
{
"name": "projects/PROJECT_ID/agent/sessions/123456789/contexts/set-language-followup",
"lifespanCount": 2,
"parameters": {
"language": "French",
"language.original": "french",
"language-programming": "",
"language-programming.original": ""
}
}
],
"intent": {
"name": "projects/PROJECT_ID/agent/intents/fe45022f-e58a-484f-96e8-1cbd6628f648",
"displayName": "set-language"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
}
}
請注意回應的下列部分:
queryResult.intent欄位包含相符的意圖。queryResult.fulfillmentMessages欄位的值包含意圖回應。這是您的系統應轉送給使用者的回應。queryResult.parameters欄位的值包含從使用者表達內容中擷取的參數。queryResult.outputContext欄位包含有效背景資訊。
Go
如要向 Dialogflow 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Java
如要向 Dialogflow 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
如要向 Dialogflow 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要向 Dialogflow 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
其他語言
C#: 請按照用戶端程式庫頁面上的C# 設定說明操作, 然後前往 .NET 適用的 Dialogflow 參考說明文件。
PHP: 請按照用戶端程式庫頁面上的 PHP 設定說明 操作,然後前往 PHP 適用的 Dialogflow 參考文件。
Ruby: 請按照用戶端程式庫頁面的 Ruby 設定說明 操作,然後前往 Ruby 適用的 Dialogflow 參考說明文件。
正式版
在實際工作環境中執行代理程式之前,請務必採用實際工作環境最佳做法。