Gửi và nhận biên nhận tin nhắn

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 UserMessageReceipts.

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.