Chuyển nhân viên hỗ trợ trực tiếp

1. Giới thiệu

53003251caaf2be5.png 6717b85f57d859d3.png

Lần cập nhật gần đây nhất: ngày 23 tháng 8 năm 2021

Chuyển sang nhân viên hỗ trợ trực tiếp bằng Business Messages

Tính năng chuyển cuộc trò chuyện cho nhân viên hỗ trợ của Business Messages cho phép nhân viên hỗ trợ của bạn bắt đầu cuộc trò chuyện dưới dạng một bot và chuyển sang nhân viên hỗ trợ (nhân viên đại diện) khi đang trò chuyện. Bot có thể xử lý các câu hỏi thường gặp, chẳng hạn như giờ mở cửa, trong khi nhân viên hỗ trợ trực tiếp có thể mang đến trải nghiệm phù hợp hơn với từng người dùng nhờ có nhiều quyền truy cập hơn vào bối cảnh của người dùng. Khi quá trình chuyển đổi giữa hai trải nghiệm này diễn ra liền mạch, người dùng sẽ nhận được câu trả lời nhanh chóng và chính xác cho câu hỏi của họ, nhờ đó tăng tỷ lệ tương tác trở lại và mức độ hài lòng của khách hàng.

Lớp học lập trình này hướng dẫn bạn cách khai thác tối đa tính năng chuyển cho nhân viên hỗ trợ trực tiếp.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ xây dựng một webhook cho tác nhân của mình. Webhook này có thể gửi và nhận các sự kiện chuyển giao cho nhân viên hỗ trợ trực tiếp. Bạn sẽ sử dụng giao diện người dùng cơ bản do mã khởi đầu cung cấp để kiểm thử những gì bạn đã tạo.

49aca3df6b196c50.png

Kiến thức bạn sẽ học được

  • Cách lưu trữ và quản lý trạng thái cuộc trò chuyện.
  • Cách sử dụng Business Messages để gửi sự kiện chuyển tiếp cho nhân viên hỗ trợ trực tiếp.
  • Cách thiết lập webhook và giao diện người dùng cơ bản để tham gia cuộc trò chuyện với tư cách là một nhân viên hỗ trợ.
  • Các phương pháp hay nhất để sử dụng Business Messages API.

Lớp học lập trình này tập trung vào việc sử dụng Business Message API để triển khai tính năng chuyển cho nhân viên hỗ trợ trực tiếp. Bạn có thể đọc mã khởi đầu cho từng giai đoạn, nhưng bạn chỉ cần triển khai mã liên quan đến Business Messages.

Bạn cần có

  • Một nhân viên hỗ trợ Business Messages, bao gồm cả khoá tài khoản dịch vụ của bạn. Bạn có thể tạo một tác nhân bằng cách làm theo Hướng dẫn tạo tác nhân.
  • Một cấu hình Cloud Datastore đang hoạt động được liên kết với dự án GCP của tác nhân. Bạn có thể sử dụng hướng dẫn bắt đầu nhanh về Cloud Datastore để thiết lập tính năng này. Bạn không cần biết cách sử dụng Cloud Datastore.
  • Máy tính đã cài đặt Google Cloud SDKNode.js (phiên bản 10 trở lên).
  • Một thiết bị Android (chạy phiên bản 5 trở lên) hoặc thiết bị iOS để kiểm thử trải nghiệm người dùng.
  • Có kinh nghiệm lập trình ứng dụng web. Bạn sẽ viết một lượng nhỏ mã JavaScript và có thể cần gỡ lỗi những gì bạn viết.

2. Tạo một bot phản hồi

Trong bước này, bạn sẽ triển khai một đại diện cơ bản của bot có tên là "Echo bot". Bot này nhận tin nhắn của người dùng, ghi nhật ký các tin nhắn đó vào một chuỗi hội thoại trong Cloud Datastore, sau đó "lặp lại" tin nhắn của người dùng bằng cách trả lời bằng cùng nội dung. Sau khi có một bot cơ bản và cơ sở hạ tầng ghi nhật ký, bạn có thể thêm vào đó để tạo một quy trình triển khai chuyển cuộc trò chuyện cho nhân viên hỗ trợ trực tiếp hoàn chỉnh trong các bước sau.

Tải mã nguồn ban đầu

Trong một thiết bị đầu cuối, hãy sao chép mã khởi đầu Chuyển cuộc trò chuyện cho nhân viên hỗ trợ trực tiếp vào thư mục làm việc của dự án bằng lệnh sau:

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

Tìm hiểu mã khởi đầu

Hãy xem cấu trúc mã khởi đầu mà bạn sẽ sử dụng trong suốt lớp học lập trình này.

Chuyển đến thư mục step-1 rồi xem nội dung trong thư mục đó. Nội dung này chứa các phần tử sau:

  • bin: Thư mục này chứa tập lệnh khởi động www để thiết lập và định cấu hình máy chủ.
  • libs: Thư mục này chứa datastore_util.js, chứa các phương thức thuận tiện để đọc và ghi từ Cloud Datastore. Bạn không cần hiểu cách hoạt động của tệp này. Bạn chỉ cần lưu ý các phương thức có sẵn và chức năng của từng phương thức.
  • resources: Thư mục này chứa khoá tài khoản dịch vụ của bạn dưới dạng một tệp có tên là credentials.json.
  • routes: Tệp index.js chứa webhook và tất cả các phương thức trợ giúp của webhook đó. Đây là tệp chính mà bạn sẽ làm việc và thêm vào.
  • views: Thư mục này chứa các tệp mẫu EJS cho các phần tử trên giao diện người dùng. Thư mục này sẽ chứa nhiều tệp hơn ở các bước sau.
  • app.js, app.yaml, package.json: Các tệp này định cấu hình ứng dụng và các phần phụ thuộc của ứng dụng.

Trước khi triển khai, hãy tải khoá tài khoản dịch vụ GCP xuống và sao chép tệp thông tin đăng nhập JSON vào từng thư mục tài nguyên trong mã mẫu. Hãy làm như vậy cho mọi bước của lớp học lập trình.

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

Triển khai mã khởi đầu

Trong một cửa sổ dòng lệnh, hãy chuyển đến thư mục step-1 của mẫu. Sau đó, hãy đặt công cụ gcloud để sử dụng dự án trên đám mây của Google Cloud bằng cách đặt mã dự án mà bạn đã dùng để đăng ký với các API.

gcloud config set project <PROJECT_ID>

Để triển khai ứng dụng, hãy chạy lệnh sau:

gcloud app deploy

Ghi lại URL của ứng dụng đã triển khai trong đầu ra của lệnh cuối cùng:

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

Đoạn mã khởi đầu mà bạn vừa triển khai có chứa một ứng dụng web có webhook để nhận tin nhắn từ Business Messages. Ứng dụng này gửi lại tin nhắn cho người dùng và ghi lại chuỗi tin nhắn vào Cloud Datastore.

Định cấu hình tác nhân

Chuyển đến trang Cài đặt tài khoản trong Business Communications Developer Console rồi đặt webhook thành URL của ứng dụng bạn đã triển khai. Ví dụ: https://PROJECT_ID.appspot.com/callback/.

Sau đó, trên trang Thông tin về trợ lý ảo, hãy định cấu hình loại tương tác chính và phụ thành Trợ lý ảo và Con người tương ứng.

db0cca5b74f999ad.png

Trò chuyện với bot phản hồi

Mở tác nhân của bạn trong Developer Console. Bạn sẽ thấy trang Tổng quan cho phép bạn xem xét thông tin chi tiết về trợ lý ảo. Sao chép URL kiểm thử tác nhân khớp với thiết bị thử nghiệm di động của bạn. Sử dụng URL này trên thiết bị di động để chạy giao diện đàm thoại của nhân viên hỗ trợ.

536313929e5c0b3e.png

Tương tác với trợ lý bằng cách gửi một vài tin nhắn. Giao diện đàm thoại chỉ sao chép những gì bạn nói, nên không mang lại trải nghiệm người dùng hữu ích. Giá như có cách nào đó để nói chuyện với người thật!

3. Tham gia cuộc trò chuyện

Bây giờ, hãy xem cuộc trò chuyện dưới góc độ của nhân viên hỗ trợ trực tiếp. Là một nhân viên hỗ trợ trực tiếp, bạn cần biết một số thông tin về cuộc trò chuyện trước khi tham gia, chẳng hạn như mã cuộc trò chuyện. Bạn cũng nên biết liệu người dùng có yêu cầu nói chuyện với nhân viên hỗ trợ hay không. Trong bước này, bạn sẽ sử dụng một trang CRM (Quản lý quan hệ khách hàng) cơ bản để xem thông tin này và tham gia cuộc trò chuyện với tư cách là một nhân viên hỗ trợ trực tiếp.

Mã khởi đầu cho bước này sẽ thêm một CRM cơ bản liệt kê tất cả các luồng trò chuyện đang diễn ra cho trợ lý ảo. Hãy xem CRM đó để biết những cuộc trò chuyện nào có thể cần đến sự chú ý của nhân viên hỗ trợ trực tiếp.

Chuyển đến thư mục step-2 và triển khai lại ứng dụng như bạn đã làm ở bước trước.

Khi triển khai ứng dụng, bạn sẽ thấy một URL đích. Chuyển đến URL này trong trình duyệt để xem danh sách có chuỗi trò chuyện mà bạn đã bắt đầu ở bước trước. Trạng thái của cuộc trò chuyện hiện là "Do bot quản lý" vì bot phản hồi đang đóng vai trò là người đại diện cho nhân viên hỗ trợ của chúng tôi trong cuộc trò chuyện này.

8f624e9befb8e827.png

Nút Tham gia trò chuyện xuất hiện nhưng chưa có tác dụng gì. Bạn cũng không thể biết liệu người dùng có muốn nói chuyện với nhân viên hỗ trợ hay không thông qua giao diện này.

Business Messages cung cấp một sự kiện yêu cầu nhân viên hỗ trợ trực tiếp cho biết thời điểm người dùng muốn nói chuyện với nhân viên hỗ trợ trực tiếp. Bạn cần theo dõi trạng thái đó để liệt kê trong giao diện người dùng.

Hãy xem phương thức gọi lại trong index.js. Chú thích TODO cho biết vị trí bạn cần nắm bắt yêu cầu của người dùng đối với nhân viên hỗ trợ trực tiếp và cập nhật trạng thái của luồng.

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.
      }
    }
  });
...
});

Bạn cần sử dụng các phương thức trong libs/datastore_utils.js để tải luồng trò chuyện hiện tại và cập nhật trạng thái của luồng đó thành QUEUED_THREAD_STATE.

Nếu bạn không chắc chắn về việc cần làm, hãy xem các giải pháp. Đoạn mã khởi đầu bao gồm một thư mục solutions trong mỗi bước mà bạn cần hoàn thành một số mã. Các thư mục này chứa bản sao của toàn bộ ứng dụng với phương thức triển khai hoàn chỉnh cho bước đã cho.

Sau khi bạn hoàn tất việc triển khai và triển khai lại ứng dụng, hãy sử dụng trình đơn mục bổ sung trong cuộc trò chuyện trên thiết bị di động để yêu cầu một nhân viên hỗ trợ trực tiếp.

e58d2b77e9c64492.png

Giờ đây, nếu quay lại CRM, bạn sẽ thấy một ghi chú trên chuỗi hội thoại có nội dung "Đã yêu cầu nhân viên hỗ trợ trực tiếp". Người dùng này cần được trợ giúp từ một người! Bạn cần triển khai điểm cuối joinConversation để nút hoạt động.

Tìm bình luận TODO khác trong phương thức được tạo stub cho /joinConversation.

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',
  });
});

Bạn cần cập nhật lại trạng thái của luồng, lần này là thành LIVE_AGENT_THREAD_STATE. Ngoài ra, bạn cần sử dụng phương thức conversations.events.create của Business Messages API để đăng một sự kiện REPRESENTATIVE_JOINED.

Để tạo tải trọng yêu cầu, bạn cần đặt các trường được nêu trong bảng sau:

Tên trường

Gợi ý

parent

Đặt giá trị này thành "conversations/{conversationId}".

eventId

Tạo mã nhận dạng ngẫu nhiên của riêng bạn cho sự kiện.

auth

Sử dụng phương thức initCredentials được cung cấp.

resource

Đây là nội dung của sự kiện. Bạn nên đặt eventType và representative.

Hãy xem trang tham khảo về phương thức tạo hoặc trang tham khảo về sự kiện để được trợ giúp.

Khi bạn hoàn tất việc triển khai, hãy triển khai lại ứng dụng rồi nhấp vào nút Tham gia trò chuyện. Hộp thoại Đã tham gia cuộc trò chuyện sẽ xuất hiện và trạng thái trò chuyện sẽ thay đổi thành "Trò chuyện trực tiếp". Nếu xem cuộc trò chuyện trên thiết bị di động, bạn sẽ thấy một ghi chú trong cuộc trò chuyện cho biết nhân viên hỗ trợ trực tiếp đã tham gia.

Xin chúc mừng! Trong bước tiếp theo, chúng ta sẽ xem xét cách để nhân viên hỗ trợ trực tiếp trò chuyện với người dùng.

4. Nhắn tin với tư cách là nhân viên hỗ trợ

Giờ đây, bạn đã tham gia cuộc trò chuyện, đã đến lúc bạn gửi tin nhắn với tư cách là nhân viên hỗ trợ trực tiếp.

Chuyển đến thư mục step-3 rồi triển khai lại ứng dụng. Trong CRM, hãy nhấp vào chuỗi trò chuyện của bạn ở bước trước. Lúc này, bạn sẽ thấy một giao diện trò chuyện cơ bản. Tại đây, bạn có thể xem tin nhắn của người dùng theo thời gian thực.

46dd083f08f43961.png

Tuy nhiên, tính năng gửi tin nhắn với tư cách là nhân viên hỗ trợ vẫn chưa được triển khai. Bạn cần hoàn tất bước đó trong bước này.

Mở tệp routes/index.js rồi xem 3 điểm cuối mới được thêm:

  • /messages: Lấy tệp khung hiển thị messages.ejs và kết xuất tệp đó trong trình duyệt. Khi nhấp vào một chuỗi cuộc trò chuyện trong chỉ mục, bạn sẽ chuyển đến một trong các trang sau.
  • /retrieveMessages: Lấy nội dung tin nhắn của một chuỗi và trả về danh sách được định dạng của tất cả tin nhắn trong cuộc trò chuyện. Trang tin nhắn định kỳ gọi điểm cuối này để hiển thị các tin nhắn mới nhất.
  • /sendMessage: Gửi tin nhắn từ nhân viên hỗ trợ trực tiếp đến người dùng. Trang tin nhắn gọi phương thức này khi bạn nhấp vào Gửi. Tính năng này hiện chưa được triển khai.

Bây giờ, hãy xem phương thức storeAndSendResponse hiện có:

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 đã sử dụng phương thức này để gửi phản hồi từ bot lặp lại. Phương thức này trước tiên sẽ lưu trữ dữ liệu tin nhắn đến trong đối tượng Cloud Datastore cho cuộc trò chuyện. Sau đó, hệ thống sẽ gửi thông báo phản hồi. Hãy xem xét kỹ đối tượng thông báo mà nó tạo, đặc biệt là loại đại diện.

Bây giờ, hãy tự triển khai điểm cuối /sendMessage. Bạn có thể sử dụng phương thức storeAndSendResponse hiện có tại đây để thực hiện hầu hết công việc. Điều quan trọng là bạn phải nhớ đặt người đại diện chính xác.

Sau khi bạn đã thiết lập xong, hãy triển khai lại ứng dụng và quay lại cuộc trò chuyện trong CRM. Giờ đây, bạn có thể thấy tin nhắn của mình xuất hiện trong nhật ký trò chuyện. Bạn cũng có thể thấy các tin nhắn của trợ lý ảo xuất hiện trên thiết bị kiểm thử di động.

49aca3df6b196c50.png

Trước khi tiếp tục, hãy đảm bảo bạn hiểu cách hoạt động của các điểm cuối mới. Trong bước tiếp theo, bạn sẽ thêm điểm cuối của riêng mình để rời khỏi cuộc trò chuyện.

5. Rời khỏi cuộc trò chuyện

Sau khi trợ giúp người dùng giải đáp thắc mắc, bạn có thể rời khỏi cuộc trò chuyện và để người dùng trò chuyện lại với bot. Trong Business Messages, thay đổi này được báo hiệu bằng một sự kiện REPRESENTATIVE_LEFT.

Chuyển đến thư mục step-4, triển khai lại ứng dụng rồi quay lại chuỗi hội thoại. Giờ đây, ở cuối chuỗi hội thoại sẽ có đường liên kết Đóng và rời khỏi cuộc trò chuyện. Đường liên kết này hiện chưa hoạt động vì điểm cuối leaveConversation chưa được triển khai.

ef4ad8107c3fff2.png

Xem tệp index.js. Có một ghi chú trong mục TODO (Việc cần làm) hướng dẫn bạn tạo một điểm cuối leaveConversation mới.

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.
 */

Để triển khai việc này, bạn cần kết hợp mọi kiến thức đã học được từ lớp học lập trình cho đến thời điểm này. Điểm cuối này phải thực hiện những việc sau:

  • Cập nhật luồng thành BOT_THREAD_STATE.
  • Gửi sự kiện REPRESENTATIVE_LEFT.
  • Gửi tin nhắn trong cuộc trò chuyện để cho người dùng biết rằng họ đang nói chuyện với bot tạo tiếng vọng. Sử dụng phương thức storeAndSendResponse. Hãy nhớ rằng giá trị đại diện đã thay đổi trở lại thành BOT.

Bước cuối cùng sẽ làm rõ trạng thái của cuộc trò chuyện cho người dùng. Người dùng sẽ thấy một sự kiện khi nhân viên hỗ trợ rời khỏi cuộc trò chuyện, nhưng họ không nhất thiết biết rằng họ đang nói chuyện với bot phản hồi lại. Bằng cách gửi tin nhắn trực tiếp từ bot, bạn sẽ giảm sự nhầm lẫn cho người dùng và cải thiện trải nghiệm.

Giờ đây, khi bot đang xử lý mọi việc, nhân viên hỗ trợ trực tiếp có thể tham gia một cuộc trò chuyện khác. Hãy thử chơi với mã mẫu và CRM bao nhiêu lần tuỳ thích. Hãy thử nghiệm một số ý tưởng khác nhau mà bạn có cho trải nghiệm chuyển cuộc trò chuyện sang nhân viên hỗ trợ trực tiếp của doanh nghiệp và xem bạn có thể nghĩ ra những ý tưởng nào.

6. Kết thúc

Chúc mừng bạn đã hoàn thành lớp học lập trình chuyển cuộc trò chuyện cho nhân viên hỗ trợ trực tiếp!

Bạn đã tạo một nhân viên hỗ trợ có thể xử lý các yêu cầu chuyển cho nhân viên hỗ trợ trực tiếp từ đầu đến cuối. Bạn cũng đã tìm hiểu một cách để theo dõi trạng thái của cuộc trò chuyện bằng Cloud Datastore.

Với tính năng chuyển cuộc trò chuyện cho nhân viên hỗ trợ, bạn có thể để bot xử lý các yêu cầu thông thường, còn nhân viên hỗ trợ sẽ xử lý các câu hỏi phức tạp hơn. Người dùng sẽ hài lòng hơn với trải nghiệm mới, hữu ích và phù hợp với họ, nhờ đó tăng khả năng họ quay lại và giới thiệu doanh nghiệp của bạn cho bạn bè.

Tiếp theo là gì?

Hãy xem một số lớp học lập trình này:

Tài liệu đọc thêm

Tài liệu tham khảo