Thông báo xác nhận tin nhắn cho người gửi biết rằng tin nhắn của họ đã được nhận hoặc đã đọc. Khi có biên nhận, người dùng có thể biết khi nào nhân viên hỗ trợ đã đọc tin nhắn của họ, họ biết rằng họ sẽ nhận được phản hồi. Nhân viên hỗ trợ của bạn cũng có thể xác định thời điểm người dùng nhận được và đọc thư, nên bạn có thể theo dõi các chỉ số biên nhận để tương tác tốt hơn của chúng tôi.
Nhân viên hỗ trợ nhận biên nhận tại webhook của họ. Nhận và xử lý biên nhận như nhau theo cách bạn nhận được tin nhắn.
Nếu người dùng gửi nhiều biên nhận cùng một lúc, bằng cách nhận hoặc đọc nhiều biên nhận tin nhắn cùng một lúc, một tải trọng duy nhất chứa tất cả biên nhận tin nhắn. Kiểm tra từng biên nhận để tìm thư được liên kết với biên nhận đó.
Loại biên nhận
Business Messages hỗ trợ thông báo xác nhận đã gửi và thông báo đã đọc.
Biên nhận từ người dùng
Nhân viên hỗ trợ có thể nhận được những biên nhận sau đây từ người dùng:
- Biên nhận gửi (
DELIVERED
) cho biết người dùng đã nhận được tin nhắn thông qua nhân viên hỗ trợ. - Thông báo xác nhận đã đọc (
READ
) cho biết người dùng đã đọc tin nhắn từ nhân viên hỗ trợ.
Người dùng có thể chọn không gửi thông báo xác nhận đã đọc. Nếu chọn không tham gia, họ vẫn nhận được thông báo xác nhận đã đọc từ nhân viên hỗ trợ.
Biên nhận từ nhân viên hỗ trợ
Người dùng có thể nhận thông báo xác nhận đã đọc từ nhân viên hỗ trợ.
Thông báo xác nhận đã đọc (READ
) cho biết nhân viên hỗ trợ đã đọc tin nhắn của người dùng.
Nếu nhiều nhân viên hỗ trợ trực tiếp đang quản lý cuộc trò chuyện, thì đó là thông báo xác nhận đã đọc
có nghĩa là có ít nhất một tác nhân đã đọc thông báo của người dùng.
Định dạng
Biên nhận từ người dùng
Biên nhận phân phối từ người dùng có định dạng sau:
{ "agent": "brands/BRAND_ID/agents/AGENT_ID", "conversationId": "CONVERSATION_ID", "customAgentId": "CUSTOM_AGENT_ID", "sendTime": "SEND_TIME", "receipts" : { "receipts": [ { "message": "conversations/CONVERSATION_ID/messages/MESSAGE_ID", "receiptType": "DELIVERED", } ], "createTime": "RECEIPTS_CREATION_TIME", }, }
Thông báo xác nhận đã đọc từ người dùng có định dạng sau:
{ "agent": "brands/BRAND_ID/agents/AGENT_ID", "conversationId": "CONVERSATION_ID", "customAgentId": "CUSTOM_AGENT_ID", "sendTime": "SEND_TIME", "receipts" : { "receipts": [ { "message": "conversations/CONVERSATION_ID/messages/MESSAGE_ID", "receiptType": "READ", } ], "createTime": "RECEIPTS_CREATION_TIME", }, }
Để biết các lựa chọn về định dạng và giá trị, hãy xem
UserMessage
và
Receipts
.
Biên nhận từ nhân viên hỗ trợ
Mã sau đây sẽ gửi thông báo xác nhận đã đọc từ tác nhân:
cURL
curl -X PATCH \ -H "`./oauth2l header --json 'PATH_TO_SERVICE_ACCOUNT_KEY' businessmessages`" \ -H "Content-Type: application/json" \ -d '{ "receiptType": "READ" }' \ "https://businessmessages.googleapis.com/v1/conversations/CONVERSATION_ID/messages/MESSAGE_ID/receipt"
Node.js
const businessmessages = require('businessmessages'); const uuidv4 = require('uuid/v4'); const {google} = require('googleapis'); // Initialize the Business Messages API let bmApi = new businessmessages.businessmessages_v1.Businessmessages({}); // Set the scope that we need for the Business Messages API const scopes = [ 'https://www.googleapis.com/auth/businessmessages', ]; // Set the private key to the service account file const privatekey = require('PATH_TO_SERVICE_ACCOUNT_KEY'); /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // Configure a JWT auth client let authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // Authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } /** * Sends a read receipt to a specific messageId. * * @param {string} conversationId The unique id for this user and agent. * @param {string} messageId The unique id for this message. */ async function sendReadReceipt(conversationId, messageId) { let authClient = await initCredentials(); // Create the payload for sending a read receipt let apiParams = { auth: authClient, name: 'conversations/' + conversationId + '/messages/' + messageId + '/receipt', resource: { receiptType:'READ' } }; // Call the updateReceipt create function using the // Business Messages client library bmApi.conversations.messages.updateReceipt(apiParams, {auth: authClient}, (err, response) => { console.log(err); console.log(response); }); } sendReadReceipt('CONVERSATION_ID', 'MESSAGE_ID');Mã này dựa trên Node.js Thư viện ứng dụng Business Messages.
Java
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.http.HttpBackOffUnsuccessfulResponseHandler; import com.google.api.client.http.HttpRequest; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.ExponentialBackOff; import com.google.api.services.businessmessages.v1.Businessmessages; import com.google.api.services.businessmessages.v1.model.BusinessMessagesReceipt; import com.google.api.services.businessmessages.v1.model.*; import java.io.FileInputStream; import java.util.Arrays; import java.util.UUID; public class ReadReceiptSample { /** * Initializes credentials used by the Business Messages API. */ private static Businessmessages.Builder getBusinessMessagesBuilder() { Businessmessages.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businessmessages")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Messages API builder = new Businessmessages .Builder(httpTransport, jsonFactory, null) .setApplicationName("Sample Application"); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try{ String conversationId = "CONVERSATION_ID"; String messageId = "MESSAGE_ID"; // Create client library reference Businessmessages.Builder builder = getBusinessMessagesBuilder(); // Create a new read receipt Businessmessages.Conversations.Messages.UpdateReceipt request = builder.build().conversations().messages() .updateReceipt("conversations/" + conversationId + "/messages/" + messageId + "/receipt", new BusinessMessagesReceipt().setReceiptType("READ")); // Set up retries with exponential backoff HttpRequest httpRequest = ((AbstractGoogleClientRequest) request).buildHttpRequest(); httpRequest.setUnsuccessfulResponseHandler(new HttpBackOffUnsuccessfulResponseHandler( new ExponentialBackOff())); // Execute request httpRequest.execute(); } catch (Exception e) { e.printStackTrace(); } } }Mã này dựa trên Doanh nghiệp Java Thư viện ứng dụng Tin nhắn.
Python
from oauth2client.service_account import ServiceAccountCredentials from businessmessages import businessmessages_v1_client as bm_client from businessmessages.businessmessages_v1_messages import ( BusinessMessagesReceipt) credentials = ServiceAccountCredentials.from_json_keyfile_name( 'PATH_TO_SERVICE_ACCOUNT_KEY', scopes=['https://www.googleapis.com/auth/businessmessages']) client = bm_client.BusinessmessagesV1(credentials=credentials) conversation_id = 'CONVERSATION_ID' message_id = 'MESSAGE_ID' read_receipt = BusinessMessagesReceipt( name=f"conversations/{conversation_id}/messages/{message_id}/receipt", receiptType=BusinessMessagesReceipt.ReceiptTypeValueValuesEnum.READ ) # Send the message bm_client.BusinessmessagesV1.ConversationsMessagesService( client=client).UpdateReceipt(request=read_receipt)Mã này dựa trên Kinh doanh Python Thư viện ứng dụng Tin nhắn.
Để biết các lựa chọn về định dạng và giá trị, hãy xem
ReceiptType
.