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 -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"
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 ');
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();
}
}
}
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)
Để biết các lựa chọn về định dạng và giá trị, hãy xem
ReceiptType
.