1. Giới thiệu

Lần cập nhật gần đây nhất: ngày 11 tháng 5 năm 2022
Chào mừng bạn đến với Business Messages!
Lớp học lập trình này giới thiệu về cách tích hợp với Business Messages. Tính năng này cho phép khách hàng kết nối với những doanh nghiệp mà bạn quản lý thông qua Google Tìm kiếm và Maps. Có thể bạn là một doanh nghiệp muốn tích hợp trực tiếp với Business Messages, hoặc có thể bạn đang làm việc tại một nhà cung cấp phần mềm độc lập để xây dựng các giải pháp nhắn tin cho những doanh nghiệp mà bạn hợp tác, hoặc có thể bạn chỉ tình cờ biết đến Business Messages và muốn thử nghiệm trên nền tảng này.
Bất kể lý do bạn đến đây là gì, lớp học lập trình này là một cách tuyệt vời để bắt đầu. Đến cuối khoá học, bạn sẽ có nhân viên hỗ trợ kỹ thuật số đầu tiên để người dùng có thể tương tác. Khi đã sẵn sàng ra mắt trên Business Messages sau khi tinh chỉnh thêm một chút, bạn sẽ có khả năng tiếp cận hàng triệu khách hàng.
Điều gì tạo nên một tác nhân kỹ thuật số hiệu quả?
Business Messages là một nền tảng đàm thoại, mang đến trải nghiệm tương tự như ứng dụng trên thiết bị di động, cho phép người tiêu dùng kết nối với doanh nghiệp mà không cần cài đặt thêm ứng dụng. Tác nhân kỹ thuật số là phần logic mà khách hàng của bạn tương tác. Logic này do một ứng dụng web được triển khai trên đám mây hoặc trong cơ sở hạ tầng của bạn quản lý. Bạn hoàn toàn có thể tự quyết định cách phản hồi người dùng. Những trợ lý ảo tốt nhất sẽ cung cấp bối cảnh để đặt ra kỳ vọng, giữ chân khách hàng và cung cấp chức năng hỗ trợ nhu cầu của người dùng.
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 tác nhân kỹ thuật số trên Business Messages cho một công ty hư cấu có tên là Bonjour Meal. Trợ lý kỹ thuật số này sẽ trả lời một số câu hỏi đơn giản như "Mấy giờ bạn đóng cửa?" hoặc "Tôi có thể mua hàng trực tuyến không?".
Trong lớp học lập trình này, người dùng sẽ có thể mua hàng thông qua trợ lý kỹ thuật số, hướng người dùng đến một công ty xử lý thanh toán để thu tiền, sau đó lên lịch đến lấy hàng giả định tại cửa hàng.
Trong lớp học lập trình này, ứng dụng của bạn sẽ
- Trả lời câu hỏi thông qua một Gợi ý dạng chip
- Hướng dẫn người dùng đặt những câu hỏi mà trợ lý kỹ thuật số của bạn có thể trả lời
- Cung cấp các tính năng trò chuyện phong phú để giữ chân người dùng trong cuộc trò chuyện

Kiến thức bạn sẽ học được
- Cách triển khai một ứng dụng web trên App Engine trên Google Cloud Platform. Ngoài ra, bạn có thể sử dụng ngrok để kiểm thử công khai ứng dụng cục bộ của mình.
- Cách định cấu hình tài khoản Business Messages bằng webhook của ứng dụng web để nhận tin nhắn từ người dùng
- Cách gửi các tính năng nhiều định dạng như thẻ, băng chuyền và đề xuất trò chuyện bằng Business Messages API
- Cách Business Messages gửi tin nhắn của bạn
Lớp học lập trình này tập trung vào việc tạo tác nhân kỹ thuật số đầu tiên của bạn.
Bạn cần có
- Đăng ký tài khoản nhà phát triển Business Communications miễn phí
- Hãy truy cập vào trang web dành cho nhà phát triển của chúng tôi để xem hướng dẫn về cách
- Thiết bị Android chạy phiên bản 5 trở lên HOẶC thiết bị iOS có ứng dụng Google Maps
- Có kinh nghiệm về lập trình ứng dụng web
- Kết nối Internet!
2. Thiết lập
Bật các API
Đối với lớp học lập trình này, vì sẽ làm việc với một ứng dụng Django, nên chúng ta sẽ dựa vào Cloud Build API để triển khai ứng dụng này đến App Engine. Ngoài ra, nếu đang sử dụng ngrok, bạn không cần bật API Cloud Build.
Cách bật API Cloud Build:
- Mở Cloud Build API trong Google Cloud Console.
- Nhấp vào Bật.
Tạo một tài khoản dịch vụ
Bạn cần tạo một tài khoản dịch vụ để truy cập vào Business Communications API và Business Messages API. Làm theo các bước trong tài liệu để tạo tài khoản dịch vụ trong Business Communications Developer Console.
Triển khai mã khởi đầu Django Python EchoBot
Trong cửa sổ dòng lệnh, hãy sao chép Django Echo Bot Sample (Mẫu bot phản hồi Django) 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-bonjour-meal-django-starter-code
Sao chép tệp thông tin đăng nhập JSON mà bạn đã tạo cho tài khoản dịch vụ vào thư mục tài nguyên của mẫu và đổi tên thông tin đăng nhập thành "bm-agent-service-account-credentials.json".
bm-bonjour-meal-django-starter-code/bonjourmeal-codelab/step-1/resources/bm-agent-service-account-credentials.json
Trong cửa sổ dòng lệnh, hãy chuyển đến thư mục step-1 của mẫu.
Chạy các lệnh sau trong một cửa sổ dòng lệnh để triển khai mẫu:
$ gcloud config set project PROJECT_ID*
$ gcloud app create
$ gcloud app deploy
- PROJECT_ID là mã dự án của dự án mà bạn đã dùng để đăng ký với các API.
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à có thể giới thiệu một số tính năng đa dạng có trong giao diện trò chuyện.
Định cấu hình webhook
Sau khi triển khai dịch vụ, bạn sẽ dùng URL của ứng dụng để đặt URL webhook trong trang Cài đặt tài khoản trong Business Communications Developer Console.
URL webhook sẽ là URL của ứng dụng + "/callback/". Ví dụ: URL này có thể có dạng như sau: https://PROJECT_ID.appspot.com/callback/
Chuyển đến trang Cài đặt tài khoản của Business Communications Console. Ở góc trên cùng bên phải, bên dưới thanh điều hướng, bạn sẽ thấy tên dự án GCP của mình. Nếu bạn thấy một trình đơn thả xuống, hãy nhớ chọn dự án GCP của bạn.
Điền thông tin chi tiết về Đầu mối liên hệ kỹ thuật, sau đó cập nhật Webhook bằng URL webhook cho ứng dụng đã triển khai của bạn.

Nhấp vào Lưu bên cạnh thông tin tham chiếu về dự án của bạn trên Google Cloud Platform.
3. Tạo Agent đầu tiên
Sử dụng Business Communications Developer Console
Trong Business Communications Console, hãy nhấp vào biểu trưng ở trên cùng bên trái để quay lại trang tổng quan của bảng điều khiển, rồi nhấp vào Tạo tác nhân. Bạn tạo thương hiệu cùng lúc với việc tạo nhân viên hỗ trợ. Chọn Business Messages cho Loại tác nhân và đảm bảo rằng Thông tin đối tác là chính xác.
Trong phần Thương hiệu, hãy nhập tên thương hiệu mà bạn đang tạo.Thương hiệu là doanh nghiệp mà bạn đang hợp tác và người tiêu dùng có thể tương tác với nhân viên hỗ trợ theo cách trò chuyện. Trong phần Tên nhân viên hỗ trợ, hãy chỉ định nội dung bạn muốn người dùng nhìn thấy trong cuộc trò chuyện trên Business Messages. Trong trường hợp của Bonjour Meal (một thương hiệu hư cấu), Bonjour Rail là công ty đường sắt quản lý các nhà hàng Bonjour Meal. Vì vậy, tôi sẽ chỉ định Bonjour Rail là thương hiệu và Bonjour Meal là đại lý.
Nhân viên hỗ trợ là thực thể đàm thoại đại diện cho thương hiệu.

Nhấp vào Tạo tác nhân và để bảng điều khiển thực hiện một số thao tác. Yêu cầu này mất vài giây để gửi một số yêu cầu đến Business Communications API nhằm tạo thương hiệu và tác nhân. Bạn có thể sử dụng Business Communications API trực tiếp để tạo một tác nhân và tạo một thương hiệu. Hãy xem tài liệu để biết yêu cầu curl sẽ trông như thế nào khi thực hiện những việc tương tự như bảng điều khiển.
Bắt đầu cuộc trò chuyện đầu tiên
Mở tác nhân mà bạn vừa tạo, bạn sẽ thấy trang Tổng quan cho phép bạn bắt đầu xem xét thông tin chi tiết về tác nhân của mình. Hãy xem URL thử nghiệm Tác nhân. Các URL này được dùng để gọi giao diện trò chuyện trên thiết bị của bạn.

Bạn có thể sao chép URL kiểm thử bằng cách nhấp vào một trong hai thẻ. Tất nhiên, hãy sao chép URL kiểm thử cho thiết bị mà bạn đang có để kiểm thử. Gửi thông báo đã sao chép này đến thiết bị của bạn theo cách bạn muốn.
Sau khi bạn truy cập vào đường liên kết trên thiết bị di động, thao tác nhấn vào đường liên kết sẽ kích hoạt Trình chạy nhân viên hỗ trợ Business Messages với URL kiểm thử nhân viên hỗ trợ được điền sẵn.
Nhấn vào Chạy để gọi nền tảng trò chuyện của nhân viên hỗ trợ.

Tương tác với trợ lý và tìm hiểu những việc mà trợ lý có thể làm. Trong hầu hết trường hợp, bạn sẽ thấy rằng giao diện trò chuyện sẽ chỉ lặp lại thông báo của bạn. Hãy gửi cho nó một tin nhắn như "Hello, World!" và bạn sẽ thấy rằng tác nhân sẽ gửi lại chính tin nhắn đó cho bạn.
Ứng dụng đã triển khai cũng chứa một số logic để giới thiệu các tính năng đa dạng có trên Business Messages.
- Nếu gửi "thẻ", bạn sẽ kích hoạt một thẻ thông tin chi tiết
- Nếu gửi "khối", bạn sẽ kích hoạt khối đề xuất
- Nếu gửi "carousel", bạn sẽ kích hoạt một nhóm thẻ thông tin chi tiết
Xin chúc mừng! Đây là cuộc trò chuyện đầu tiên của nhân viên hỗ trợ với bạn!
Bạn có thể sử dụng từng tính năng đa dạng để cung cấp bối cảnh phù hợp hơn cho người đang giao tiếp với nhân viên của bạn. Gửi thành phần đồ hoạ trong thẻ đa dạng để truyền đạt ý tưởng hiệu quả hơn hoặc dùng các khối đề xuất để dẫn dắt cuộc trò chuyện.
Cập nhật thông điệp chào mừng và sử dụng các khối cho cuộc trò chuyện
Hãy cùng thực hành với Play Console, xem cách chỉnh sửa thông điệp chào mừng của trợ lý ảo và tận dụng các khối đề xuất để giúp người dùng giao tiếp.
Chuyển đến trang Tổng quan về nhân viên hỗ trợ rồi chọn Thông tin về nhân viên hỗ trợ. Di chuyển xuống phần thông điệp chào mừng và câu hỏi gợi mở cuộc trò chuyện.

Cập nhật thông điệp chào mừng (trường nhập dữ liệu màu vàng) thành:
Chào mừng bạn đến với tác nhân Bonjour Meal. Tôi có thể lặp lại tin nhắn của bạn và cho bạn xem một số tính năng đa dạng được hỗ trợ trên nền tảng này. Hãy thử những gợi ý sau!
Nhấp vào + Thêm cụm từ bắt đầu cuộc trò chuyện như trong hộp màu tím ở hình trên để thêm cụm từ bắt đầu cuộc trò chuyện nhằm kích hoạt các khối đề xuất, băng chuyền và thẻ. Những câu hỏi gợi ý mà bạn thêm cần có một thành phần văn bản và một thành phần postbackData. Văn bản là nội dung hiển thị cho người dùng, còn dữ liệu postBack là nội dung được gửi đến webhook của nhân viên hỗ trợ. Webhook sẽ phân tích cú pháp dữ liệu postback và gửi phản hồi phù hợp cho người dùng. 
Thông tin về tác nhân trong bảng điều khiển sẽ có dạng như sau sau khi được sửa đổi:

Ở bên phải bảng điều khiển, bạn sẽ thấy bản xem trước về giao diện của trợ lý ảo. Hãy chú ý đến cách thông điệp chào mừng phản ánh nội dung bạn vừa thay đổi và các nút đề xuất bên dưới thông điệp đó.
Đây là một công cụ hữu ích để biết được trải nghiệm người dùng sẽ như thế nào. Bạn có thể sử dụng công cụ này trong khi xây dựng tác nhân và lên kế hoạch cho hành trình người dùng mà bạn muốn hỗ trợ.
Rất tiếc, chúng tôi sẽ không thể thấy những thay đổi này được phản ánh ngay trong cuộc trò chuyện, vì dữ liệu trước đó được lưu vào bộ nhớ đệm trong cơ sở hạ tầng của Business Messages. Bộ nhớ đệm được xoá sau mỗi 2 giờ, vì vậy, bạn có thể thử tính năng này vào ngày mai.
Trong thời gian chờ đợi, hãy cùng xem cách mọi thứ hoạt động.
4. Phân tích mã khởi đầu
Thông tin tổng quan về mã nguồn
Đoạn mã khởi đầu mà bạn triển khai sẽ gửi lại thông báo cho người dùng và có thể trình bày một Thẻ thông tin chi tiết, một băng chuyền hoặc các khối đề xuất. Hãy tìm hiểu sâu hơn về mã nguồn để hiểu rõ cách hoạt động của mã nguồn này. Sau đó, chúng tôi sẽ tìm hiểu xem cần thay đổi những gì.
Mã khởi đầu là một dự án Django. Trong phần sau của loạt lớp học lập trình này, chúng ta sẽ sử dụng Google Datastore để duy trì dữ liệu như giỏ hàng và các cuộc trò chuyện liên quan. Đừng lo lắng nếu bạn chưa từng sử dụng Django trước đây, vì nó khá đơn giản và đến cuối lớp học lập trình này, bạn sẽ học được cách hoạt động của Django.
Nhìn chung, Django sẽ định tuyến các URL đến các khung hiển thị và logic khung hiển thị sẽ tạo ra một mẫu kết xuất trong trình duyệt. Hãy xem urls.py của dự án.
bm-django-echo-bot/bmcodelab/urls.py [Dòng 31-37]
from django.urls import include, path
import bopis.views as bopis_views
urlpatterns = [
path('', bopis_views.landing_placeholder),
path('callback/', bopis_views.callback),
]
Hai tuyến đường được xác định ở đây, vì vậy Django có thể thực thi logic nếu nhận ra hai URL đó. Giả sử URL của dự án là https://PROJECT_ID.appspot.com/, thì các tuyến đường mà dự án biết là:
- https://PROJECT_ID.appspot.com/
- https://PROJECT_ID.appspot.com/callback/
Cả hai tuyến đường URL đều đề cập đến bopis_views trong bopis/views.py. Hãy xem điều gì đang xảy ra trong tệp này. Để bắt đầu, trước tiên, hãy tìm hiểu về bopis_views.landing_placeholder.
bm-django-echo-bot/bonjourmeal-codelab/step-1/bopis/views.py [Dòng 302-309]
...
def landing_placeholder(request):
return HttpResponse("<h1>Welcome to the Bonjour Meal Codelab</h1>
<br/><br/>
To message your Bonjour Meal agent, go to the Developer Console and retrieve
the Test URLs for the agent you have created as described in the codelab
<a href='https://codelabs.developers.google.com/codelabs/'>here</a>.")
...
Đoạn logic này được máy chủ web của bạn thực thi khi nhận được một yêu cầu web trỏ đến gốc của dự án. Không có gì quá đặc biệt ở đây: chúng ta chỉ cần trả về một HTTPResponse chứa một số HTML cho trình duyệt đã đưa ra yêu cầu. Vì vậy, bạn có thể mở URL gốc của dự án, nhưng không có nhiều việc để làm ở đó vì URL này sẽ đưa bạn quay lại lớp học lập trình này.
URL còn lại sẽ chuyển đến một hàm có tên là callback, cũng nằm trong bopis/views.py. Hãy cùng xem hàm đó.
bm-django-echo-bot/bopis/views.py [Dòng 60-101]
...
def callback(request):
"""
Callback URL. Processes messages sent from user.
"""
if request.method == "POST":
request_data = request.body.decode('utf8').replace("'", '"')
request_body = json.loads(request_data)
print('request_body: %s', request_body)
# Extract the conversation id and message text
conversation_id = request_body.get('conversationId')
print('conversation_id: %s', conversation_id)
# Check that the message and text body exist
if 'message' in request_body and 'text' in request_body['message']:
message = request_body['message']['text']
print('message: %s', message)
route_message(message, conversation_id)
elif 'suggestionResponse' in request_body:
message = request_body['suggestionResponse']['postbackData']
print('message: %s', message)
route_message(message, conversation_id)
elif 'userStatus' in request_body:
if 'isTyping' in request_body['userStatus']:
print('User is typing')
elif 'requestedLiveAgent' in request_body['userStatus']:
print('User requested transfer to live agent')
return HttpResponse("Response.")
elif request.method == "GET":
return HttpResponse("This webhook expects a POST request.")
...
Logic ở đây sẽ phân tích cú pháp nội dung yêu cầu cho một message hoặc một suggestionResponse và truyền thông tin đó vào một hàm có tên là route_message, sau đó trả về một HttpResponse cho cơ sở hạ tầng Business Messages để xác nhận đã nhận được thông báo.
Đây là một chức năng quan trọng. Đoạn logic này là webhook của ứng dụng web, nhận tin nhắn từ những người dùng tương tác với nhân viên hỗ trợ của bạn. Bạn có thể mở rộng webhook để gửi tin nhắn đến một công cụ tự động hoá như Dialogflow để hiểu những gì người dùng có thể đang nói và tạo ra phản hồi từ suy luận đó. Bạn cũng có thể chuyển tiếp tin nhắn để người dùng có thể kết nối với một nhân viên hỗ trợ trực tiếp. Xem sơ đồ sau:

Business Messages gửi nội dung tin nhắn dưới dạng tải trọng JSON đến webhook của bạn. Tại đây, nội dung tin nhắn sẽ được chuyển đến một nhân viên hỗ trợ trực tiếp hoặc đến một số logic để phản hồi dưới dạng một bot. Trong trường hợp này, cơ chế định tuyến đó là route_message. Hãy coi xem.
bm-django-echo-bot/bopis/views.py [Dòng 105-122]
...
def route_message(message, conversation_id):
'''
Routes the message received from the user to create a response.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
normalized_message = message.lower()
if normalized_message == CMD_RICH_CARD:
send_rich_card(conversation_id)
elif normalized_message == CMD_CAROUSEL_CARD:
send_carousel(conversation_id)
elif normalized_message == CMD_SUGGESTIONS:
send_message_with_suggestions(conversation_id)
else:
echo_message(message, conversation_id)
...
Đoạn logic này bắt đầu kiểm tra thông báo mà người dùng nhận được. Trước tiên, thông báo sẽ được chuẩn hoá bằng cách chuyển tất cả các ký tự thành chữ thường. Sau khi chuẩn hoá, hàm này sẽ kiểm tra xem thông báo có phải là một trong các hằng số được xác định ở đầu tệp hay không.
bm-django-echo-bot/bopis/views.py [Dòng 40-42]
...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
...
Tức là bot sẽ phân tích cú pháp để tìm những tin nhắn có chứa bất kỳ chuỗi nào mà chúng ta đã đặt vào postback_data của các câu bắt đầu cuộc trò chuyện ở bước trước trong lớp học lập trình này. Nếu không có chuỗi nào trong số đó xuất hiện, thì nó chỉ cần truyền thông báo đến một hàm có tên là echo_message. Bạn có thể tưởng tượng rằng hàm này sẽ lặp lại thông báo.
Gửi tin nhắn
Đến đây, bạn đã có thể hình dung được cách ứng dụng web nhận tin nhắn. Tất cả đều được thực hiện bằng webhook.
Nhưng làm cách nào để ứng dụng gửi tin nhắn đi cho người dùng bằng Business Messages?

Khi cơ sở hạ tầng của bạn phản hồi người dùng, bạn sẽ gửi phản hồi đến Business Messages API. API này sẽ gửi thông báo đến người dùng.
Business Messages API có các thư viện bằng Python, Node.js và Java. Chúng tôi cũng có một API REST mà bạn có thể đưa ra yêu cầu trực tiếp nếu cơ sở hạ tầng của bạn không phải bằng ngôn ngữ mà chúng tôi có thư viện. Hãy xem phần Gửi tin nhắn để biết cách sử dụng cURL để gửi tin nhắn đến một mã nhận dạng cuộc trò chuyện cụ thể.
Trong lớp học lập trình này, chúng ta sẽ tập trung vào việc sử dụng thư viện ứng dụng Python đã được tích hợp vào mã khởi đầu Bonjour Meal được triển khai cho App Engine trên dự án GCP của bạn hoặc chạy cục bộ thông qua ngrok.
Hãy xem hàm echo_message và cách chúng ta tương tác với API để gửi thông báo đến Business Messages.
bm-django-echo-bot/bopis/views.py [Dòng 199-212]
...
def echo_message(message, conversation_id):
'''
Sends the message received from the user back to the user.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text=message)
send_message(message_obj, conversation_id)
...
Trong hàm này, BusinessMessagesMessage được khởi tạo bằng biến thông báo được truyền vào hàm echo_message. Sau khi được khởi tạo, đối tượng này sẽ được truyền đến send_message cùng với mã nhận dạng cuộc trò chuyện.
bm-django-echo-bot/bopis/views.py [Dòng 214-236]
...
def send_message(message, conversation_id):
'''
Posts a message to the Business Messages API, first sending
a typing indicator event and sending a stop typing event after
the message has been sent.
Args:
message (obj): The message object payload to send to the user.
conversation_id (str): The unique id for this user and agent.
'''
credentials = ServiceAccountCredentials.from_json_keyfile_name(
SERVICE_ACCOUNT_LOCATION,
scopes=['https://www.googleapis.com/auth/businessmessages'])
client = bm_client.BusinessmessagesV1(credentials=credentials)
# Create the message request
create_request = BusinessmessagesConversationsMessagesCreateRequest(
businessMessagesMessage=message,
parent='conversations/' + conversation_id)
bm_client.BusinessmessagesV1.ConversationsMessagesService(
client=client).Create(request=create_request)
...
Tất cả những gì hàm send_message làm là sử dụng thông tin đăng nhập tài khoản dịch vụ của bạn để xác minh rằng bạn có thể gửi tin nhắn đến cuộc trò chuyện này, khởi tạo một ứng dụng Business Messages và tạo một yêu cầu gửi tin nhắn đến conversation ID đã cho.
Các tính năng đa dạng cũng sử dụng hàm send_message này, nhưng những thông báo mà các tính năng này tạo ra sẽ dành riêng cho thẻ đa dạng, băng chuyền và các đề xuất dạng chip. Thẻ đa dạng và băng chuyền có thể bao gồm các thành phần đồ hoạ, trong khi các chip đề xuất có postback_data để logic gọi lại có thể phân tích cú pháp một cách thích hợp.
Bây giờ, khi đã biết cách gửi tin nhắn, hãy tìm hiểu cách mẫu gửi thẻ thông tin chi tiết, băng chuyền và đề xuất. Trong phần sau, chúng ta sẽ sửa đổi mã nguồn để gửi tin nhắn có một số tính năng đa dạng này.
Khi bạn đã sẵn sàng, hãy tuỳ chỉnh tác nhân Bonjour Meal.
5. Tuỳ chỉnh tác nhân
Nếu bạn đã làm theo lớp học lập trình cho đến thời điểm này, thì bạn sẽ thấy tác nhân của mình.

Không đẹp lắm, trông khá đơn điệu và không thực sự thể hiện được doanh nghiệp của chúng ta. Rất may là chúng tôi có kiến thức cơ bản về mã hỗ trợ tác nhân và có các công cụ cần thiết để tuỳ chỉnh tác nhân theo bất kỳ cách nào chúng tôi muốn.
Trong phần còn lại của lớp học lập trình này, chúng ta sẽ mở rộng tác nhân bằng những nội dung sau:
- Sử dụng biểu trưng thực tế
- Thông điệp chào mừng được cải thiện
- Cung cấp thông tin về giờ hoạt động
- Thông báo cho người dùng biết rằng tính năng mua hàng trực tuyến sắp ra mắt
- Sử dụng các chip gợi ý đàm thoại để hỗ trợ cuộc trò chuyện
Chúng tôi sẽ tận dụng Business Communications Console để giúp chúng tôi cập nhật biểu trưng, thông điệp chào mừng, nhưng bạn luôn có thể sử dụng trực tiếp Business Communications API để thực hiện việc này. Sau đó, chúng ta sẽ phải cập nhật mã nguồn để gửi thông báo phù hợp nhằm cung cấp thông tin về giờ hoạt động và thông báo rằng Bonjour Meal sẽ sớm cung cấp tính năng mua sắm trực tuyến. Sau khi hoàn tất, chúng ta sẽ quay lại Business Communications Console và tạo các nút đề xuất trong cuộc trò chuyện để giúp hướng cuộc trò chuyện đến những trải nghiệm suôn sẻ mà trợ lý kỹ thuật số hỗ trợ.
Thêm biểu trưng
Trong Business Communications Console, hãy chọn nhân viên hỗ trợ của bạn rồi chuyển đến phần Thông tin về nhân viên hỗ trợ. Bạn sẽ muốn cập nhật Biểu trưng doanh nghiệp, như được tham chiếu bằng màu vàng bên dưới.

Nhấp vào Tải lên, sau đó bạn có thể chọn một hình ảnh để tải lên hoặc nhập từ một URL.
Hãy xem nguyên tắc thiết kế biểu trưng trong tài liệu để tìm hiểu về các phương pháp hay nhất mà chúng tôi đề xuất khi sử dụng biểu trưng của riêng bạn.
Hãy tải biểu trưng nằm trong mã nguồn mà bạn đã sao chép khi bắt đầu lớp học lập trình này lên. Bạn có thể tìm thấy tệp này trong thư mục ./assets/ của kho lưu trữ và tệp này có tên là "bonjour_meal-logo.png". Bạn có thể kéo tệp vào phương thức trên trình duyệt web. Một công cụ chỉnh sửa đơn giản sẽ xuất hiện để bạn điều chỉnh chất lượng hình ảnh và cắt ảnh. Điều chỉnh độ phân giải hình ảnh và cắt sao cho hình ảnh nhỏ hơn hoặc bằng giới hạn 50 KB. Khi bạn hài lòng với hình ảnh, hãy nhấp vào dấu đánh dấu trong vòng tròn màu xanh dương để xác nhận, rồi nhấp vào Chọn ở cuối cửa sổ phương thức.

Cuối cùng, hãy nhấp vào Lưu ở trên cùng bên phải của trang Thông tin về đại lý. Đây là một thay đổi cần có thời gian để được phản ánh trên thiết bị của bạn vì thông tin về nhân viên hỗ trợ được lưu vào bộ nhớ đệm trong các máy chủ của chúng tôi và sẽ xuất hiện trong vòng 2 giờ kể từ khi thay đổi.
Cập nhật thông điệp chào mừng
Chúng ta đã cập nhật thông điệp chào mừng trước đó trong lớp học lập trình này. Hãy làm lại, nhưng lần này hãy định cấu hình một thông điệp chào mừng phù hợp hơn với hành trình của người dùng Bonjour Meal.
Trong Business Communications Console, hãy chọn tác nhân của bạn rồi chuyển đến phần Thông tin về tác nhân. Di chuyển xuống cho đến khi bạn thấy trường nhập Tin nhắn chào mừng. Tại đây, bạn có thể cập nhật tin nhắn.

Biết rằng chúng ta sẽ thêm câu mở đầu cuộc trò chuyện, chúng ta có thể tham khảo những câu này trong thông điệp chào mừng. Trong trường nhập dữ liệu, hãy thay thế bằng văn bản sau:
"Chào mừng bạn đến với Bonjour Meal. Tôi là trợ lý có thể giúp bạn giải đáp những thắc mắc về Bonjour Meal. Hãy thử một số lựa chọn sau đây."
Cuối cùng, hãy nhấp vào Lưu ở trên cùng bên phải của trang Thông tin về đại lý. Xin lưu ý rằng thay đổi này sẽ mất một khoảng thời gian để có hiệu lực do cơ chế lưu vào bộ nhớ đệm của chúng tôi nhằm đảm bảo mọi thứ diễn ra nhanh chóng!
Cung cấp thông tin về giờ hoạt động
Để cung cấp thông tin này cho người dùng, chúng tôi sẽ gửi một tin nhắn tuỳ chỉnh cho người dùng bằng Business Messages API.
Bạn có thể nhớ rằng các thông báo được phân tích cú pháp trong hàm route_message của views.py. Trước tiên, hàm sẽ chuẩn hoá chuỗi rồi bắt đầu kiểm tra xem thông báo đã chuẩn hoá có khớp với bất kỳ tham số nào được mã hoá cứng hay không. Để đơn giản, hãy thêm một điều kiện khác để kiểm tra xem thông báo đã chuẩn hoá có bằng với một hằng số mới mà chúng ta sẽ gọi là CMD_BUSINESS_HOURS_INQUIRY và sẽ chứa giá trị "business-hours-inquiry" hay không. Nếu điều kiện được đánh giá là đúng, chúng ta sẽ gọi một hàm có tên là send_message_with_business_hours.
Hàm route_message giờ đây sẽ có dạng như sau:
bm-django-echo-bot/bopis/views.py
...
def route_message(message, conversation_id):
'''
Routes the message received from the user to create a response.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
normalized_message = message.lower()
if normalized_message == CMD_RICH_CARD:
send_rich_card(conversation_id)
elif normalized_message == CMD_CAROUSEL_CARD:
send_carousel(conversation_id)
elif normalized_message == CMD_SUGGESTIONS:
send_message_with_suggestions(conversation_id)
elif normalized_message == CMD_BUSINESS_HOURS_INQUIRY:
send_message_with_business_hours(conversation_id)
else:
echo_message(message, conversation_id)
...
Để mã hoạt động, chúng ta sẽ phải thực hiện thêm 2 thay đổi; thay đổi đầu tiên là xác định CMD_BUSINESS_HOURS_INQUIRY cùng với các hằng số khác, thay đổi thứ hai là thực sự xác định hàm send_message_with_business_hours và gửi một thông báo bằng Business Messages API.
Trước tiên, hãy xác định hằng số ở đầu tệp bằng các khai báo hằng số khác:
bm-django-echo-bot/bopis/views.py
...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
CMD_BUSINESS_HOURS_INQUIRY = 'business-hours-inquiry'
...
Và bây giờ, hãy xác định send_message_with_business_hours. Bạn có thể xác định hàm này ở bất kỳ đâu trong tệp, theo cú pháp Python thích hợp. Vì hàm này chỉ đơn giản là gửi một thông báo, tương tự như echo_message, nên bạn có thể dùng hàm này làm mẫu để xác định hàm này.
bm-django-echo-bot/bopis/views.py
...
def send_message_with_business_hours(conversation_id):
message = '''Thanks for contacting us! The hours for the store are:\n
MON 8am - 8pm\n
TUE 8am - 8pm\n
WED 8am - 8pm\n
THU 8am - 8pm\n
FRI 8am - 8pm\n
SAT 8am - 8pm\n
SUN 8am - 8pm
'''
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text=message)
send_message(message_obj, conversation_id)
...
Nhờ đó, bot của chúng ta có thể trả lời người dùng bằng những giờ hoạt động này khi họ gửi thông báo sau: "business-hours-inquiry". Bạn có thể thấy một thông báo như sau:

Sau khi bạn triển khai mã nguồn cho GCP, các thay đổi sẽ xuất hiện ngay lập tức. Chúng tôi không lưu vào bộ nhớ đệm ứng dụng web trong Google Cloud Platform theo cách lưu vào bộ nhớ đệm thông tin về tác nhân. Vì vậy, bạn có thể kiểm thử trải nghiệm này ngay lập tức.
Mặc dù chúng ta đã có một số thay đổi về nguồn ở đây, nhưng hãy thực hiện thêm một thay đổi nữa để cho phép người dùng hỏi về việc mua sắm trực tuyến. Nhân viên hỗ trợ ảo sẽ trả lời rằng tính năng này chưa được cung cấp nhưng bạn có thể quay lại kiểm tra sau.
Thông báo cho người dùng biết rằng tính năng mua sắm trực tuyến sắp ra mắt
Chúng tôi sẽ thực hiện một điểm sửa đổi tương tự như khi thông báo cho người dùng về giờ hoạt động của doanh nghiệp. Lần này, hãy đặt thông tin vào một thẻ đa dạng cùng với một hình ảnh hấp dẫn.
Phân tích cú pháp thông báo được chuẩn hoá và kiểm tra điều kiện cho một hằng số có tên là CMD_ONLINE_SHOPPING_INQUIRY với giá trị được đặt thành "online-shopping-inquiry" (yêu cầu mua sắm trực tuyến) sẽ gọi send_online_shopping_info_message nếu điều kiện là đúng.
bm-django-echo-bot/bopis/views.py
...
# Set of commands the bot understands
CMD_RICH_CARD = 'card'
CMD_CAROUSEL_CARD = 'carousel'
CMD_SUGGESTIONS = 'chips'
CMD_BUSINESS_HOURS_INQUIRY = 'business-hours-inquiry'
CMD_ONLINE_SHOPPING_INQUIRY = 'online-shopping-inquiry'
...
...
...
def route_message(message, conversation_id):
'''
Routes the message received from the user to create a response.
Args:
message (str): The message text received from the user.
conversation_id (str): The unique id for this user and agent.
'''
normalized_message = message.lower()
if normalized_message == CMD_RICH_CARD:
send_rich_card(conversation_id)
elif normalized_message == CMD_CAROUSEL_CARD:
send_carousel(conversation_id)
elif normalized_message == CMD_SUGGESTIONS:
send_message_with_suggestions(conversation_id)
elif normalized_message == CMD_BUSINESS_HOURS_INQUIRY:
send_message_with_business_hours(conversation_id)
elif normalized_message == CMD_ONLINE_SHOPPING_INQUIRY:
send_online_shopping_info_message(conversation_id)
else:
echo_message(message, conversation_id)
...
Bây giờ, hãy xác định send_online_shopping_info_message. Chúng ta muốn gửi thông báo này trong một thẻ đa dạng nội dung có hình ảnh, vì vậy, hãy sao chép hàm send_rich_card để dùng làm mẫu xác định send_online_shopping_info_message.
Trước tiên, chúng ta nên cập nhật văn bản dự phòng để có một thông báo phù hợp. Văn bản dự phòng được dùng nếu thiết bị không nhận được thẻ thông tin vì lý do nào đó. Tiếp theo, chúng ta nên cập nhật BusinessMessagesRichCard để thêm tiêu đề, nội dung mô tả, đề xuất và trường nội dung nghe nhìn có liên quan. Hàm của chúng ta sẽ có dạng như sau:
bm-django-echo-bot/bopis/views.py
...
def send_online_shopping_info_message(conversation_id):
fallback_text = ('Online shopping will be available soon!')
rich_card = BusinessMessagesRichCard(
standaloneCard=BusinessMessagesStandaloneCard(
cardContent=BusinessMessagesCardContent(
title='Online shopping info!',
description='Thanks for your business, we are located in SF near the Golden Gate Bridge. Online shopping is not yet available, please check back with us in a few days.',
suggestions=[],
media=BusinessMessagesMedia(
height=BusinessMessagesMedia.HeightValueValuesEnum.MEDIUM,
contentInfo=BusinessMessagesContentInfo(
fileUrl=SAMPLE_IMAGES[4],
forceRefresh=False
))
)))
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
richCard=rich_card,
fallback=fallback_text)
send_message(message_obj, conversation_id)
...
Thật tuyệt vời! Giờ đây, trợ lý kỹ thuật số của chúng tôi có thể trả lời những người dùng hỏi về mua sắm trực tuyến. Hiện tại, trợ lý kỹ thuật số của chúng tôi chưa hỗ trợ mua sắm trực tuyến, vì vậy, chúng tôi cung cấp cho người dùng một thông báo cho biết tính năng này sẽ sớm ra mắt. Đây là giao diện của nhân viên hỗ trợ kỹ thuật số khi người dùng hỏi về việc mua sắm trực tuyến.

Giống như thay đổi trước đó mà chúng tôi đã thực hiện để cho phép người dùng hỏi về giờ hoạt động, bạn có thể thấy ngay thay đổi này nếu đang sử dụng ngrok hoặc ngay khi triển khai mã cho GCP App Engine.
Trong phần tiếp theo, chúng ta sẽ sử dụng câu mở đầu cuộc trò chuyện và các đề xuất dạng chip để hướng cuộc trò chuyện đến kết quả mong muốn.
Sử dụng các khối thông tin để hướng dẫn cuộc trò chuyện
Chúng tôi đã thực hiện một số thay đổi về mã nguồn và triển khai trợ lý kỹ thuật số mới, nhưng chúng tôi không bao giờ mong đợi người dùng nhập "business-hours-inquiry" hoặc "online-shopping-info" để hỏi về doanh nghiệp. Hãy cập nhật các câu bắt đầu trò chuyện để khi mở cuộc trò chuyện, người dùng không chỉ nhận được một thông điệp chào mừng hay mà còn thấy được các câu bắt đầu trò chuyện.
Truy cập vào Business Communications Console rồi chuyển đến trang Thông tin của tác nhân của tác nhân. Trước đây, chúng ta đã xác định câu mở đầu cho "chip", "thẻ" và "băng chuyền". Mặc dù những tính năng đó vẫn hoạt động, nhưng chúng không còn phù hợp với chức năng kinh doanh của chúng tôi nữa. Bạn có thể giữ lại các tính năng này để tiếp tục giới thiệu hoặc xoá chúng để nhân viên hỗ trợ kỹ thuật số của bạn hiển thị các câu hỏi gợi ý trò chuyện dành riêng cho doanh nghiệp Bonjour Meal.
Chúng tôi sẽ tạo 2 câu hỏi gợi mở mới. Đối với câu hỏi đầu tiên, hãy đặt văn bản thành "Giờ hoạt động của bạn là mấy?" và đặt Dữ liệu phản hồi thành "business-hours-inquiry". Đối với câu hỏi gợi ý thứ hai, hãy đặt văn bản thành "Can I make purchases here?" (Tôi có thể mua hàng tại đây không?) và đặt Dữ liệu đăng lại thành "online-shopping-info".
Kết quả sẽ là cấu hình như ảnh chụp màn hình sau:

Cũng như những thay đổi khác được thực hiện trên Business Communications Console, thay đổi này sẽ mất một khoảng thời gian để được áp dụng trước khi bạn có thể thấy các thay đổi trên thiết bị di động của mình.
Sau khi hoàn tất các câu mở đầu cuộc trò chuyện, chúng ta cũng cần có cách hướng dẫn người dùng đến một đường dẫn lý tưởng sau khi cuộc trò chuyện bắt đầu. Bạn có thể sử dụng các nút đề xuất theo ngữ cảnh sau khi gửi tin nhắn để hướng dẫn người dùng sử dụng các tính năng khác mà trợ lý kỹ thuật số có thể thực hiện. Vì vậy, chúng tôi sẽ gửi một tin nhắn đề xuất người dùng làm việc khác với nhân viên hỗ trợ bất cứ khi nào người dùng hỏi về giờ hoạt động hoặc mua sắm trực tuyến.
Ở cuối hàm, hãy thêm nội dung sau:
bm-django-echo-bot/bopis/views.py
...
def send_online_shopping_info_message(conversation_id):
...
# at the end of the function, send a message with suggestions
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text='Let us know how else we can help you:',
fallback='Please let us know how else we can help you.',
suggestions=[
BusinessMessagesSuggestion(
reply=BusinessMessagesSuggestedReply(
text='Business hours',
postbackData='business-hours-inquiry')
),
])
send_message(message_obj, conversation_id)
...
# Let's do the same with the business hours
def send_message_with_business_hours(conversation_id):
...
# at the end of the function, send a message with suggestions
message_obj = BusinessMessagesMessage(
messageId=str(uuid.uuid4().int),
representative=BOT_REPRESENTATIVE,
text='Let us know how else we can help you:',
fallback='Please let us know how else we can help you.',
suggestions=[
BusinessMessagesSuggestion(
reply=BusinessMessagesSuggestedReply(
text='Can I purchase online?',
postbackData='online-shopping-inquiry')
),
])
send_message(message_obj, conversation_id)
...
Xin lưu ý rằng trường văn bản trong BusinessMessagesSuggestion bị giới hạn ở 25 ký tự, như mô tả trong tài liệu.
Với các câu bắt đầu trò chuyện mới và việc sử dụng các nút đề xuất một cách chiến lược, sau đây là một số ảnh chụp màn hình về trải nghiệm người dùng dự kiến.

6. Xin chúc mừng
Xin chúc mừng! Bạn đã tạo thành công trợ lý kỹ thuật số đầu tiên của mình trên Business Messages!
Bạn đã triển khai một ứng dụng web để hỗ trợ tác nhân kỹ thuật số trên Business Messages, sử dụng Business Communications Console để sửa đổi tác nhân và định hình trải nghiệm người dùng bằng tác nhân kỹ thuật số bằng cách thay đổi mã nguồn.
Giờ đây, bạn đã biết các bước chính cần thiết để xây dựng trải nghiệm tương tác trong Business Messages và những khả năng từ đây trở đi rất thú vị. Bạn có thể mở rộng tác nhân để hỗ trợ tra cứu kho hàng hoặc giới thiệu giỏ hàng để theo dõi những gì người dùng có thể quan tâm. Bạn có thể sử dụng băng chuyền để giới thiệu các mặt hàng trong trình đơn và sử dụng các đề xuất để cho phép người dùng chọn những mặt hàng mà họ quan tâm.
Sau đây là một đoạn giới thiệu về giao diện có thể có của tính năng này.

Làm cách nào để tạo ra trải nghiệm đàm thoại tuyệt vời?
Những trợ lý ảo tốt nhất sẽ cung cấp thông tin theo ngữ cảnh cho người dùng trong khi cung cấp cho họ chức năng thông qua cuộc trò chuyện để họ có thể tương tác với doanh nghiệp như cách họ thường làm qua điện thoại hoặc thậm chí là gặp mặt trực tiếp. Hãy nghĩ về cách các chủ đề sau đây có thể áp dụng cho một cuộc trò chuyện mà bạn muốn có với một doanh nghiệp mà bạn hợp tác.
Cung cấp bối cảnh và đặt ra kỳ vọng
Việc cung cấp bối cảnh có thể là bất cứ điều gì, từ việc nêu rõ cách bạn có thể giúp người dùng cho đến việc giới thiệu tác nhân kỹ thuật số với một tính cách mà người dùng có thể liên hệ. Những nhân viên hỗ trợ thành công trên Business Messages sử dụng hình đại diện mang tính đại diện để cho người dùng biết họ đang trò chuyện với ai.
Việc đặt ra kỳ vọng phụ thuộc vào trải nghiệm người dùng mà bạn đang xây dựng. Ví dụ: nếu trợ lý của bạn hỗ trợ tra cứu kho hàng, trước tiên hãy cho người dùng biết rằng hàng có thể không còn nhiều trước khi cung cấp câu trả lời.
Cung cấp chức năng cho người dùng
Người tiêu dùng luôn kết nối với các doanh nghiệp. Từ những câu hỏi như kiểm tra trạng thái của đơn đặt hàng đến kiểm tra xem một mặt hàng có còn hàng hay không, Business Messages có thể hỗ trợ các lượt tương tác phức tạp của người dùng. Nhiều người dùng vẫn tiếp tục gọi điện thoại cho doanh nghiệp để được giải đáp thắc mắc, ngay cả khi câu trả lời có trên trang web của doanh nghiệp. Do đó, các doanh nghiệp phải đầu tư nhiều tài nguyên hơn để xử lý lượng cuộc gọi, đặc biệt là trong các dịp lễ.
Giữ chân người dùng
Cung cấp các điểm tiếp xúc trò chuyện để duy trì sự tương tác của người dùng trong cuộc trò chuyện. Giữa các thông báo, bạn có thể gọi chỉ báo nhập để cho người dùng biết rằng bạn đang xử lý câu trả lời cho người dùng.
Với các tính năng đa dạng như chỉ báo nhập, đề xuất dạng chip, thẻ đa dạng và băng chuyền, bạn có thể hướng dẫn người dùng trải nghiệm theo cách tối ưu để giúp họ hoàn thành một số việc như đặt hàng từ một thực đơn gồm nhiều mặt hàng. Mục tiêu là giảm lưu lượng cuộc gọi đến đường dây điện thoại của doanh nghiệp.
Điều quan trọng là cuộc trò chuyện phải cung cấp chức năng cho người dùng. Những người dùng kết nối với doanh nghiệp qua tin nhắn mong muốn được trả lời câu hỏi một cách nhanh chóng. Trong trường hợp không lý tưởng, trợ lý kỹ thuật số không thể hỗ trợ cuộc trò chuyện, điều này có thể dẫn đến trải nghiệm người dùng không tốt. May mắn là có những cách giải quyết vấn đề này, chẳng hạn như chuyển cuộc trò chuyện sang nhân viên hỗ trợ trực tiếp. Chúng ta sẽ đề cập đến vấn đề này trong một lớp học lập trình sau này.
Tiếp theo là gì?
Khi đã sẵn sàng, hãy xem một số chủ đề sau để tìm hiểu về những lượt tương tác phức tạp hơn mà bạn có thể đạt được trong Business Messages
- Vòng đời của một tác nhân: Từ khi tạo đến khi ra mắt
- Yêu cầu và nguyên tắc
- Nguyên tắc về biểu trưng
- Tất cả các hướng dẫn
Tài liệu tham khảo
- SuggestedReply
- Tài liệu tham khảo về thông báo của Business Messages
- Định nghĩa JSON cho RichCard