Nhận tin nhắn

Sau khi đăng ký tính năng Business Messages, bạn có thể thay mặt nhân viên hỗ trợ của mình nhận tin nhắn. Bạn có thể nhận tin nhắn cho những thương hiệu mà bạn quản lý sau khi bạn tạo, xác minh và tạo tác nhân ra mắt cho các thương hiệu đó.

Khi khách hàng gửi tin nhắn cho nhân viên hỗ trợ mà bạn quản lý, Business Messages sẽ gửi một tải trọng JSON đến webhook chứa nhiều mã nhận dạng, nội dung tin nhắn và thông tin vị trí.

Sử dụng trang nhật ký Business Console Developer Console để khắc phục các vấn đề khi gửi thông báo.

Xử lý tin nhắn đến

Cách nhân viên hỗ trợ xử lý và trả lời tin nhắn từ người dùng phụ thuộc nhiều vào logic nghiệp vụ của bạn. Tuy nhiên, nhìn chung, các bước để phản hồi tin nhắn của người dùng là nhất quán.

Xác nhận thông báo

Để xác nhận thông báo mà webhook của bạn nhận được, hãy trả về phản hồi HTTP hợp lệ cho các thông báo gửi tới webhook.

Nếu một tin nhắn không gửi được do hết thời gian chờ, khả năng tiếp cận webhook, lệnh chuyển hướng hoặc các vấn đề về quyền, Google sẽ lưu trữ và chuyển tiếp tin nhắn đó với nhiều lần thử lại trong 7 ngày hoặc cho đến khi webhook của bạn nhận được thông báo.

Xác minh rằng thư là từ Google

Bạn nên xác minh rằng Google đã gửi thông báo trước khi xử lý nội dung thông báo.

Để xác minh rằng Google đã gửi một tin nhắn mà bạn nhận được,

  1. Phân tích cú pháp tiêu đề X-Goog-Signature của thư. Đây là bản sao đã băm được mã hoá base64 của tải trọng nội dung thư.
  2. Sử dụng mã thông báo khách hàng của bạn (được trình bày khi bạn định cấu hình webhook) làm khoá, tạo một MAC512 HMAC của các byte trong tải trọng thông báo và mã hoá base64.

  3. So sánh hàm băm X-Goog-Signature với hàm băm mà bạn đã tạo.

    • Nếu các hàm băm khớp với nhau thì bạn đã xác nhận rằng Google đã gửi thư đó.
    • Nếu các hàm băm không khớp, hãy kiểm tra quá trình băm trên một thông báo có giá trị. Nếu quy trình băm của bạn đang hoạt động chính xác và bạn nhận được thông báo cho rằng bạn đã gửi gian lận cho mình, hãy liên hệ với chúng tôi (bạn phải đăng nhập bằng tài khoản Google Business Messages).

Xem ví dụ về thông tin xác minh thông báo trong kho lưu trữ GitHub cho Bot cho Echo trong Java, Node.jsPython.

Xác định ngôn ngữ

Người dùng giao tiếp từ nhiều vị trí và bằng nhiều ngôn ngữ. Business Messages đại diện cho lựa chọn ưu tiên về ngôn ngữ của người dùng bằng các trường resolvedLocaleuserDeviceLocale, dựa trên chế độ cài đặt ngôn ngữ trên thiết bị của họ. Xem Bản địa hoá và bản địa hoá.

Bất cứ khi nào có thể, hãy định tuyến thư và soạn phản hồi dựa trên tùy chọn ngôn ngữ của người dùng.

Định tuyến thư dựa trên ngữ cảnh của thư

Bối cảnh tin nhắn cho biết loại thông tin mà người dùng có thể đang tìm kiếm. Ví dụ: nếu người dùng gửi tin nhắn có giá trị placeId, thì họ đã nhắn tin cho một vị trí cụ thể (được xác định bởi placeId) và có thể sẽ đặt các câu hỏi về vị trí cụ thể. Tương tự, nếu một tin nhắn có giá trị nearPlaceId, giúp xác định một vị trí gần người dùng, thì có thể người dùng muốn biết thông tin cụ thể về vị trí. Tuy nhiên, tác nhân đó phải xác nhận vị trí mà người dùng muốn trò chuyện trước khi bắt đầu cuộc trò chuyện.

Với thông tin về ngữ cảnh của thông báo, hãy định tuyến thông báo đến vị trí phù hợp nhất để phản hồi:

  • Nếu tin nhắn nằm trong cuộc trò chuyện mới và là câu hỏi phổ biến, bạn có thể trả lời bằng tính năng tự động hóa.
  • Nếu tính năng tự động hóa không thể xử lý câu hỏi, hãy chuyển câu hỏi đó đến một nhân viên hỗ trợ trực tiếp.
  • Nếu ngôn ngữ của tin nhắn không khớp với ngôn ngữ mặc định của tác nhân, hãy chuyển tin nhắn đến một nhân viên hỗ trợ trực tiếp có thể hỗ trợ ngôn ngữ đó.
  • Nếu câu hỏi là về một vị trí cụ thể, hãy chuyển câu hỏi đó cho ai đó có thông tin về vị trí đó.
  • Nếu tin nhắn đang trong một cuộc trò chuyện đang diễn ra, hãy chuyển tin nhắn đó đến nhân viên hỗ trợ trực tiếp tham gia cuộc trò chuyện.

Xác định loại thông báo mà người dùng đã gửi

Người dùng có thể gửi 3 loại thông báo:

  • Thông báo Text (Văn bản) là phản hồi dạng tự do.
  • Thông báo Hình ảnh bao gồm URL đã ký cho hình ảnh mà người dùng đã tải lên.
  • Thông báo Đề xuất bao gồm dữ liệu đăng lại và nội dung của hành động đề xuất hoặc câu trả lời đề xuất mà người dùng nhấn vào.

Xử lý nội dung thư

Nếu tác nhân của bạn sử dụng tính năng tự động hóa, nội dung của thông báo cho người dùng phải hướng dẫn logic của tác nhân và nội dung phản hồi tiếp theo trong cuộc trò chuyện.

Cách dễ nhất để xác định ý định của người dùng là sử dụng dữ liệu đăng lại từ một câu trả lời đề xuất hoặc hành động đề xuất. Bất kể văn bản liên kết với đề xuất là gì, dữ liệu đăng lại đều có thể đọc được bằng máy.

Nếu người dùng gửi tin nhắn văn bản, tác nhân người dùng có thể phân tích cú pháp phản hồi cho các từ khóa được hỗ trợ hoặc sử dụng khả năng hiểu ngôn ngữ tự nhiên (chẳng hạn như tích hợp Dialogflow để xử lý tin nhắn của người dùng và xác định đường dẫn về phía trước).

Nếu nhân viên hỗ trợ của bạn không biết cách phản hồi tin nhắn của người dùng, thì ứng dụng cần phản hồi bằng trạng thái lỗi và cố gắng tiếp tục cuộc trò chuyện bằng cách nhắc người dùng cung cấp thêm thông tin, bằng cách yêu cầu dữ liệu đầu vào theo một cách khác hoặc chuyển giao cuộc trò chuyện cho nhân viên hỗ trợ trực tiếp.

Trả lời người dùng

Sau khi nhân viên hỗ trợ xác định phản hồi chính xác, thông qua tính năng tự động hoá hoặc nhân viên hỗ trợ trực tiếp, nhân viên hỗ trợ đó sẽ gửi tin nhắn và tiếp tục trò chuyện với người dùng.

Khi soạn một phản hồi, hãy xem xét ngôn ngữ của người dùng. Bạn có thể tuỳ chỉnh thêm bằng cách truy xuất giá trị từ đối tượng userInfo trong mỗi thông báo nhận được.

Loại thông báo

Đoạn mã sau đây cho biết cách nhân viên hỗ trợ của bạn nhận tin nhắn.

Để biết thông tin về định dạng và giá trị, hãy xem UserMessage.

Văn bản

Cách phổ biến nhất để người dùng phản hồi là sử dụng văn bản thuần túy. Tin nhắn văn bản có định dạng sau.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "message": {
    "messageId": "MESSAGE_ID",
    "name": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "text": "MESSAGE_TEXT",
    "createTime": "MESSAGE_CREATE_TIME",
  },
  "dialogflowResponse": {
    "autoResponded": "BOOLEAN",
    "faqResponse": {
      "userQuestion": "USER_QUESTION",
      "answers": [{
        "faqQuestion": "FAQ_QUESTION",
        "faqAnswer": "FAQ_ANSWER",
        "matchConfidenceLevel": "CONFIDENCE_LEVEL",
        "matchConfidence": "CONFIDENCE_NUMERIC",
      }],
    },
  },
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

Để biết các tùy chọn định dạng và giá trị, hãy xem Message.

Hình ảnh

Ngoài việc gửi tin nhắn, người dùng cũng có thể gửi ảnh cho nhân viên hỗ trợ của bạn dưới dạng tin nhắn. Business Messages lưu trữ các hình ảnh được chia sẻ, trong 7 ngày, tại URL đã ký và đưa những URL đó vào trường text của tải trọng thông báo.

Nếu tác nhân của bạn bao gồm tính năng tự động hoá, hãy đảm bảo tính năng tự động hoá biết cách phản hồi nếu người dùng chia sẻ hình ảnh. Đối với các nhân viên hỗ trợ trực tiếp, hãy đảm bảo rằng hình ảnh được truyền qua hoặc URL có thể nhấp vào được trong tin nhắn.

...
"message": {
    "text": "https://storage.googleapis.com/business-messages-us/936640919331/jzsu6cdguNGsBhmGJGuLs1DS?x-goog-algorithm\u003dGOOG4-RSA-SHA256\u0026x-goog-credential\u003duranium%40rcs-uranium.iam.gserviceaccount.com%2F20190826%2Fauto%2Fstorage%2Fgoog4_request\u0026x-goog-date\u003d20190826T201038Z\u0026x-goog-expires\u003d604800\u0026x-goog-signedheaders\u003dhost\u0026x-goog-signature\u003d89dbf7a74d21ab42ad25be071b37840a544a43d68e67270382054e1442d375b0b53d15496dbba12896b9d88a6501cac03b5cfca45d789da3e0cae75b050a89d8f54c1ffb27e467bd6ba1d146b7d42e30504c295c5c372a46e44728f554ba74b7b99bd9c6d3ed45f18588ed1b04522af1a47330cff73a711a6a8c65bb15e3289f480486f6695127e1014727cac949e284a7f74afd8220840159c589d48dddef1cc97b248dfc34802570448242eac4d7190b1b10a008404a330b4ff6f9656fa84e87f9a18ab59dc9b91e54ad11ffdc0ad1dc9d1ccc7855c0d263d93fce6f999971ec79879f922b582cf3bb196a1fedc3eefa226bb412e49af7dfd91cc072608e98"
  }
...

Để biết các tùy chọn định dạng và giá trị, hãy xem Message.

Đề xuất

Tính năng trả lời đề xuất và hành động đề xuất cho phép người dùng phản hồi hoặc thực hiện các thao tác chỉ bằng một lần nhấn. Khi người dùng nhấn vào một đề xuất, nhân viên hỗ trợ sẽ nhận được một trọng tải có chứa văn bản đề xuất và dữ liệu đăng lại.

Thông báo đề xuất có định dạng như sau.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "suggestionResponse": {
    "message": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "postbackData": "POSTBACK_DATA",
    "createTime": "RESPONSE_CREATE_TIME",
    "text": "SUGGESTION_TEXT",
    "suggestionType": "SUGGESTION_TYPE",
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

Để biết các tùy chọn định dạng và giá trị, hãy xem SuggestionResponse.

Yêu cầu xác thực

Đề xuất Yêu cầu xác thực cho phép người dùng đăng nhập thông qua một nhà cung cấp OAuth để cung cấp thông tin nhận dạng với tác nhân hoặc cho phép tác nhân thay mặt người dùng thực hiện các thao tác. Xem nội dung Xác thực bằng OAuth.

Nếu người dùng đăng nhập thành công bằng nhà cung cấp OAuth đã chỉ định, thì tác nhân sẽ nhận được một gói dữ liệu qua mã ủy quyền. Nếu người dùng không đăng nhập được, tác nhân sẽ nhận được một trọng tải có thông tin chi tiết về lỗi.

Thông báo Yêu cầu xác thực có định dạng sau.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "authenticationResponse": {
    "code": "AUTHORIZATION_CODE",
    "redirect_uri": "REDIRECT_URI",
    "errorDetails": {
      "error": "ERROR",
      "errorDescription": "ERROR_DESCRIPTION",
    },
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

Để biết các tùy chọn định dạng và giá trị, hãy xem AuthenticationResponse.

Ngữ cảnh tin nhắn

Mỗi thông báo chứa thông tin về ngữ cảnh liên quan đến nguồn gốc của thông báo.

...
  "context": {
    "customContext": "CUSTOM_CONTEXT",
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "nearPlaceId": "NEARBY_LOCATION_PLACE_ID",
    "deflectedPhoneNumber": "DEFLECTED_PHONE_NUMBER",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
    "widget": {
      "url": "WEBSITE_URL",
      "widgetContext": "WIDGET_CONTEXT",
    },
  },
...
Trường Mô tả
customContext Dữ liệu theo bối cảnh do đối tác chỉ định.
entryPoint Nền tảng nhắn tin mà người dùng bắt đầu trò chuyện, theo định nghĩa của EntryPoint.
placeId Giá trị nhận dạng duy nhất từ cơ sở dữ liệu Google Địa điểm dành cho vị trí mà người dùng đã nhắn tin. Thông báo này chỉ xuất hiện trong các thông báo từ các điểm truy cập theo vị trí cụ thể.
nearPlaceId Giá trị nhận dạng duy nhất từ cơ sở dữ liệu của Google Địa điểm cho vị trí đầu tiên trong một Gói cục bộ. Xác nhận những vị trí mà người dùng muốn trò chuyện khi bạn nhận được giá trị nearPlaceId.
deflectedPhoneNumber Số điện thoại mà Business Messages uỷ quyền cho người dùng gọi điện khi cuộc trò chuyện bắt đầu.
resolvedLocale

Ngôn ngữ phù hợp nhất trên ngôn ngữ của người dùng (được báo cáo trong userDeviceLocale) và ngôn ngữ được hỗ trợ của tác nhân (được xác định theo chế độ cài đặt cuộc trò chuyện đã chỉ định). Xem Bản địa hoáBắt đầu cuộc trò chuyện.

Giá trị ngôn ngữ là thẻ ngôn ngữ IETF BCP 47 có định dạng hợp lệ.

userInfo.displayName Tên của người dùng đã gửi tin nhắn. Nếu người dùng chọn không chia sẻ danh tính, thì trường này sẽ trống.
userInfo.userDeviceLocale Ngôn ngữ của người dùng, được thiết bị của họ báo cáo, là thẻ ngôn ngữ IETF BCP 47 có định dạng hợp lệ.
widget.url URL của trang web nơi khởi động giao diện trò chuyện.
widget.widgetContext Giá trị thuộc tính data-bm-widget-context của tiện ích được sử dụng để bắt đầu cuộc trò chuyện.

Lịch sử cuộc trò chuyện

Google không cung cấp nhật ký trò chuyện. Duy trì các cuộc trò chuyện trong quá khứ của riêng bạn, theo cách tuân thủ chính sách quyền riêng tư và các phương pháp hay nhất. Nhờ đó, bạn có thể gửi các phản hồi sáng suốt cho tin nhắn trong tương lai từ người dùng.