真人服務專員轉移

1. 簡介

53003251caaf2be5.png 6717b85f57d859d3.png

上次更新時間:2021 年 8 月 23 日

透過 Business Messages 轉移給真人服務專員

透過 Business Messages 的真人服務專員轉移功能,服務專員可以先以機器人身分展開對話,然後在對話期間切換為真人服務專員 (真人代表)。機器人可以處理營業時間等常見問題,而真人服務專員則可存取更多使用者情境資訊,提供個人化體驗。如果這兩種體驗之間的轉換過程流暢,使用者就能快速準確地獲得問題解答,進而提高回訪參與率和顧客滿意度。

本程式碼研究室會說明如何充分運用轉接真人服務專員功能。

建構項目

在本程式碼研究室中,您將為代理程式建構 Webhook,以便傳送及接收即時代理程式轉移事件。您將使用範例程式碼提供的基本 UI,測試建構的內容。

49aca3df6b196c50.png

課程內容

  • 如何儲存及管理對話狀態。
  • 如何使用 Business Messages 傳送即時服務專員轉移事件。
  • 如何設定 Webhook 和基本 UI,以便以服務專員身分加入對話。
  • 使用 Business Messages API 的最佳做法。

本程式碼研究室著重於使用 Business Message API 實作即時服務專員轉接功能。您可以閱讀各階段的入門程式碼,但只需要實作與 Business Messages 相關的程式碼。

軟硬體需求

  • Business Messages 服務專員,包括服務帳戶金鑰。您可以按照建立代理程式指南建立代理程式。
  • 與代理程式的 GCP 專案連結的 Cloud Datastore 設定。您可以使用 Cloud Datastore 快速入門導覽課程進行設定。您不必瞭解如何使用 Cloud Datastore。
  • 已安裝 Google Cloud SDKNode.js (10 以上版本) 的電腦。
  • 搭載 Android 5 以上版本的 Android 裝置,或 iOS 裝置,用於測試使用者體驗。
  • 具備網頁應用程式程式設計經驗。您將編寫少量 JavaScript 程式碼,並可能需要偵錯所編寫的內容。

2. 建立回音機器人

在本步驟中,您將部署名為「Echo bot」的基本機器人代表。這個機器人會接收使用者訊息、將訊息記錄到 Cloud Datastore 的對話討論串,然後回覆相同內容,藉此「回應」使用者訊息。有了基本機器人和記錄基礎架構後,您就可以在後續步驟中,以此為基礎建立完整的即時服務專員轉移實作。

取得範例程式碼

在終端機中,使用下列指令將 Live Agent Transfer 範本程式碼複製到專案的工作目錄:

git clone https://github.com/google-business-communications/bm-nodejs-live-agent-transfer

瞭解範例程式碼

我們來看看範例程式碼結構,您會在整個程式碼研究室中使用這個結構。

前往 step-1 目錄並查看內容。其中包含下列元素:

  • bin:這個目錄包含 www 啟動指令碼,用於設定及配置伺服器。
  • libs:這個目錄包含 datastore_util.js,其中含有從 Cloud Datastore 讀取資料和寫入資料的便利方法。您不需要瞭解這個檔案的運作方式,請注意可用的方法及其用途。
  • resources:包含服務帳戶金鑰,檔案名稱為 credentials.json
  • routesindex.js 檔案包含 Webhook 和所有輔助方法。您會使用這個主要檔案,並在其中新增內容。
  • views:這個目錄包含 UI 元素的 EJS 範本檔案。後續步驟會包含更多檔案。
  • app.js、app.yaml、package.json:這些檔案會設定應用程式及其依附元件。

部署前,請下載 GCP 服務帳戶金鑰,並將 JSON 憑證檔案複製到範例程式碼中的每個資源目錄。請針對本程式碼研究室的每個步驟執行這項操作。

cp credentials.json bm-nodejs-live-agent-transfer/step-<step number>/resources/credentials.json

部署範例程式碼

在終端機中,前往範例的 step-1 目錄。接著,請設定 gcloud 工具,使用您向 API 註冊時使用的專案 ID,藉此使用 Google Cloud 專案。

gcloud config set project <PROJECT_ID>

如要部署應用程式,請執行下列指令:

gcloud app deploy

請注意上一個指令輸出內容中已部署應用程式的網址:

Deployed service [default] to [https://PROJECT_ID.appspot.com]

您剛才部署的入門程式碼包含一個網路應用程式,其中含有用來接收 Business Messages 訊息的 Webhook。應用程式會將訊息回傳給使用者,並將訊息串記錄到 Cloud Datastore。

設定代理

前往 Business Communications 開發人員控制台的「帳戶設定」頁面,然後將 Webhook 設為已部署應用程式的網址。例如 https://PROJECT_ID.appspot.com/callback/

接著在「Agent information」頁面,將主要和次要互動類型分別設為「Bot」和「Human」。

db0cca5b74f999ad.png

與回聲機器人對話

在開發人員控制台中開啟代理程式。您會看到「總覽」頁面,可查看代理程式的詳細資料。複製與行動測試裝置相符的代理程式測試網址。在行動裝置上使用這個網址,啟動代理程式的對話介面。

536313929e5c0b3e.png

傳送幾則訊息與代理互動。對話介面只會複製你說的內容,使用者體驗不佳。如果可以和真人對話就好了!

3. 參與討論

現在,我們從真人服務專員的角度來看這段對話。加入對話前,真人服務專員需要瞭解對話 ID 等資訊。此外,瞭解使用者是否要求與真人服務專員通話也很重要。在這個步驟中,您將使用基本的客戶關係管理 (CRM) 頁面查看這項資訊,並以即時服務專員的身分加入對話。

這個步驟的範例程式碼會新增基本 CRM,列出專員的所有進行中對話串。讓我們看看該 CRM,瞭解哪些對話可能需要真人服務專員介入。

前往 step-2 目錄,然後再次部署應用程式,與上一個步驟的做法相同。

部署應用程式時,您會看到目標網址。在瀏覽器中前往這個網址,即可查看您在上一步開始的對話串清單。由於迴聲機器人在這項對話中代表代理程式,因此對話的狀態目前為「機器人管理」。

8f624e9befb8e827.png

系統會顯示「加入對話」按鈕,但目前不會執行任何動作。此外,您也無法從這個介面判斷使用者是否想與真人服務專員對話。

Business Messages 提供要求線上服務專員事件,指出使用者何時想與線上服務專員交談。您需要追蹤該狀態,才能在 UI 中列出。

請查看 index.js 中的回呼方法。TODO 註解會指出您需要擷取使用者對即時服務專員的要求,並更新執行緒狀態。

step-2/routes/index.js

/**
 * The webhook callback method.
 */
router.post('/callback', async function(req, res, next) {
  ...
    } else if (requestBody.userStatus !== undefined) {
      if (requestBody.userStatus.requestedLiveAgent !== undefined) {
  ...
        // TODO: Update the thread state to QUEUED_THREAD_STATE.
      }
    }
  });
...
});

您需要使用 libs/datastore_utils.js 中的方法載入目前的對話串,並將其狀態更新為 QUEUED_THREAD_STATE

如果不確定該怎麼做,請參考解決方案。範例程式碼會在每個步驟下加入 solutions 目錄,您必須在這些步驟中完成部分程式碼。這些目錄包含整個應用程式的副本,以及指定步驟的完整實作項目。

完成實作並重新部署應用程式後,請在行動裝置的對話中使用溢位選單,要求線上服務專員。

e58d2b77e9c64492.png

現在返回 CRM,您應該會在對話串中看到「已要求轉接真人服務專員」的附註。這位使用者需要真人協助!您必須實作 joinConversation 端點,按鈕才能正常運作。

/joinConversation 的存根方法中找出其他 TODO 註解。

step-2/routes/index.js

/**
 * Updates the thread state and sends a representative join signal to the user.
 */
router.post('/joinConversation', async function(req, res, next) {
  let conversationId = req.body.conversationId;

  // TODO: Update the thread state to LIVE_AGENT_THREAD_STATE and post a REPRESENTATIVE_JOINED event.

  res.json({
    'result': 'ok',
  });
});

您需要再次更新執行緒狀態,這次要更新為 LIVE_AGENT_THREAD_STATE。此外,您還需要使用 Business Messages API 的 conversations.events.create 方法發布 REPRESENTATIVE_JOINED 事件。

如要建立要求酬載,請設定下表列出的欄位:

欄位名稱

提示

parent

將此設為「conversations/{conversationId}」。

eventId

為活動產生專屬隨機 ID。

auth

請使用提供的 initCredentials 方法。

resource

這是事件主體本身。您應設定 eventType 和代表。

如需相關說明,請參閱 create 方法的參考頁面活動參考頁面

完成實作後,請重新部署應用程式,然後按一下「加入對話」按鈕。系統會顯示「已加入對話」對話方塊,且對話狀態會變更為「即時對話」。在行動裝置上查看對話時,聊天室會顯示即時服務專員已加入的附註。

恭喜!在下一個步驟中,我們將說明如何讓真人服務專員與使用者交談。

4. 以真人服務專員身分傳送訊息

加入對話後,現在可以開始以真人服務專員的身分傳送訊息。

前往 step-3 目錄,重新部署應用程式。在 CRM 中,按一下上一個步驟中的對話串。現在應該會看到基本的即時通訊介面。您可以在這裡即時查看使用者的訊息。

46dd083f08f43961.png

不過,以代理程式身分傳送訊息的功能尚未實作。您必須在這個步驟中完成該作業。

開啟 routes/index.js 檔案,然後查看三個新增端點:

  • /messages:取得 messages.ejs 檢視區塊檔案,並在瀏覽器中算繪。點選索引中的對話討論串時,系統會將您導向其中一個頁面。
  • /retrieveMessages:取得執行緒的訊息內容,並傳回對話中所有訊息的格式化清單。訊息頁面會定期呼叫這個端點,顯示最新訊息。
  • /sendMessage:將訊息從真人服務專員代表傳送給使用者。當您按一下「傳送」時,訊息頁面會呼叫這個函式。目前尚未實作。

現在,請查看現有的 storeAndSendResponse 方法:

step-3/routes/index.js

/**
 * Updates the thread, adds a new message and sends a response to the user.
 *
 * @param {string} message The message content that was received.
 * @param {string} conversationId The unique id for this user and agent.
 * @param {string} threadState Represents who is managing the conversation for the CRM.
 * @param {string} representativeType The representative sending the message, BOT or HUMAN.
 */
async function storeAndSendResponse(message, conversationId, threadState, representativeType) {
...
}

Webhook 已使用這個方法傳送回音機器人的回覆。這個方法會先將對話的傳入訊息資料儲存在 Cloud Datastore 物件中,然後傳送回覆訊息。請仔細查看建立的訊息物件,尤其是代表類型。

現在,請自行實作 /sendMessage 端點。您可以在這裡使用現有的 storeAndSendResponse 方法完成大部分工作。請務必記得設定正確的代表。

確認這項功能正常運作後,請重新部署應用程式,然後返回 CRM 中的對話。現在您可以在對話記錄中查看訊息。您也可以在行動測試裝置上查看代理程式的訊息。

49aca3df6b196c50.png

繼續操作前,請務必瞭解新端點的運作方式。在下一個步驟中,您將新增自己的端點來離開對話。

5. 離開對話

協助使用者解決問題後,你可能想離開對話,讓使用者再次與機器人交談。在 Business Messages 中,這項變更會以 REPRESENTATIVE_LEFT 事件表示。

前往 step-4 目錄,重新部署應用程式,然後返回對話串。現在對話串底部會顯示「關閉並離開對話」連結。由於 leaveConversation 端點尚未實作,這個連結目前無法運作。

ef4ad8107c3fff2.png

查看 index.js 檔案。TODO 註解會指示您建立新的 leaveConversation 端點。

step-4/routes/index.js

/* 
 * TODO: Create a '/leaveConversation' endpoint that does the following:
 * - Updates the thread to BOT_THREAD_STATE.
 * - Sends a REPRESENTATIVE_LEFT event.
 * - Sends a message to the thread informing the user that they are speaking to the echo bot again.
 * 
 * Hint: You can use the same methods that '/joinConversation' uses.
 */

如要實作這項功能,您需要整合目前為止在程式碼研究室中學到的所有內容。這個端點應執行下列動作:

  • 將執行緒更新為 BOT_THREAD_STATE
  • 傳送 REPRESENTATIVE_LEFT 事件。
  • 在對話中傳送訊息,告知使用者他們正在與回音機器人對話。請使用 storeAndSendResponse 方法。請注意,代表已變更回 BOT

最後一個步驟會向使用者說明對話狀態。代表離開對話時,使用者會看到事件,但他們不一定會知道自己又在與回音機器人對話。直接從機器人傳送訊息,可減少使用者困惑並提升體驗。

現在機器人可以處理問題,真人服務專員就能加入其他對話。盡情試用程式碼範例和 CRM。測試你為商家即時服務專員轉移體驗發想的不同點子,看看會出現什麼結果。

6. 總結

恭喜您完成即時服務專員轉接程式碼研究室!

您已建立可處理真人服務專員轉接的代理程式。您也學到如何使用 Cloud Datastore 追蹤對話狀態。

有了轉接真人服務專員功能,你可以將常見要求交給機器人處理,真人服務專員則負責處理較複雜的查詢。使用者會對全新實用客製化體驗更加滿意,進而提高回訪意願,並向朋友推薦您的商家。

後續步驟

請參閱下列程式碼研究室:

其他資訊

  • 請參閱這份指南,瞭解將對話從機器人轉接給真人服務專員的基本概念。
  • 使用 Dialogflow 指南將回音機器人升級為常見問題機器人。

參考文件