Tài liệu

Thông báo đẩy

Gửi phản hồi của nhân viên và các chiến dịch khi ứng dụng đã đóng, với một deep link thẳng vào đúng cuộc hội thoại. Ứng dụng của bạn sở hữu hệ thống con push; SDK đăng ký token và mở các cuộc hội thoại.

Respondo gửi gì#

  • Push tin nhắn — một phản hồi của nhân viên hoặc AI trong một cuộc trò chuyện mà khách truy cập là một phần trong đó.
  • Push chiến dịch — các chiến dịch push gửi đi, cũng báo cáo một beacon mở.

Push tin nhắn luôn mang một deep link dạng respondo://conversation/<id>. Push chiến dịch mang deep link được cấu hình trên chiến dịch — nó là tùy chọn, và khi không được đặt thì push không chứa deep link nào.

Apple (APNs)#

Push iOS chạy trực tiếp trên APNs — không phụ thuộc Firebase. Từ tài khoản Apple Developer của bạn, hãy lấy:

  • Một APNs Auth Key (token key .p8).
  • Key ID của khóa đó.
  • Team ID của bạn.
  • bundle id của ứng dụng.

Google (FCM)#

Push Android đi qua Firebase Cloud Messaging. Từ dự án Firebase của bạn, hãy lấy:

  • Một service account JSON với vai trò Cloud Messaging.
  • Firebase project ID (Firebase console → Cài đặt dự án) — được nhập trong một trường riêng trong biểu mẫu push của dashboard, bên cạnh service-account JSON.
  • package name của ứng dụng Android, và kết nối ứng dụng với cùng dự án Firebase (google-services.json).

Cấu hình trong Respondo#

Thêm khóa APNs và service account FCM cùng project ID của nó vào kênh widget của bạn trong dashboard. Đó là tất cả những gì Respondo cần để gửi đến cả hai nền tảng.

Việc đặt thông tin đăng nhập qua API và tham chiếu trường đầy đủ được đề cập trong hướng dẫn thiết lập push đi kèm với quyền truy cập SDK của bạn.

Định dạng payload#

Payload luôn nằm dưới một khóa gốc respondo — sự hiện diện của nó là cách SDK phân biệt push của chính nó với những cái khác (trên iOS trong userInfo, trên Android dưới dạng một chuỗi JSON trong data["respondo"]).

payload respondojson
{
  "respondo": {
    "type": "message",
    "conversation_id": "a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90",
    "message_id": "e9a3c1f6-4b8d-4e0a-b5f3-1d7b2a4e9c63",
    "deep_link": "respondo://conversation/a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90"
  }
}

Mọi giá trị đều là chuỗi phẳng. Tiêu đề và nội dung thông báo được chuyển bởi transport của nền tảng — aps.alert trên APNs và message.notification trên FCM — không nằm bên trong đối tượng respondo.

Push chiến dịch cũng bao gồm một delivery_id dùng để báo cáo beacon mở, và có thể mang thêm các khóa chuỗi phẳng từ dữ liệu push của chiến dịch.

Xử lý chạm & tiền cảnh#

Khi một thông báo được chạm, hãy trao payload thô cho SDK. Nó phân tích payload và mở đúng cuộc hội thoại, trả về false nếu push không phải là push của Respondo (trong trường hợp đó bạn tự xử lý nó).

Xử lý một cú chạm (theo nền tảng)text
Android:  RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS:      Respondo.handlePush(userInfo: userInfo)
Flutter:  Respondo.handlePushData(message.data)

Các bản trùng lặp được gộp lại theo message_id, và trong khi cùng một cuộc hội thoại đang mở ở tiền cảnh thì thông báo hệ thống bị chặn — SDK xử lý cả hai một cách tự động.

Đăng ký device token#

Ứng dụng của bạn lấy device token từ hệ thống con push của nó và truyền nó cho setPushToken. Gọi clearPushToken khi đăng xuất.

Token nào cần truyền. Backend định tuyến mỗi lần gửi theo nền tảng — iOS đi thẳng đến APNs, Android đi đến FCM — nên bạn phải đăng ký token của transport native của nền tảng, chứ không phải bất cứ thứ gì mà thư viện push của bạn tình cờ trả về:
  • Android — token đăng ký FCM từ FirebaseMessaging.getToken().
  • iOS (native) — device token APNs (hex) từ didRegisterForRemoteNotificationsWithDeviceToken.
  • iOS qua Flutter (firebase_messaging) — dùng getAPNSToken(), không phải getToken(). Truyền token FCM trên iOS sẽ gửi nó đến APNs, nơi nó không phải là một device token hợp lệ và push không bao giờ đến. getAPNSToken() có thể null trong những khoảnh khắc đầu tiên sau khi khởi chạy — nếu vậy hãy thử lại sau một khoảng trễ ngắn.
Android — FirebaseMessagingServicekotlin
override fun onNewToken(token: String) {
    Respondo.setPushToken(token)
}
iOS — AppDelegateswift
func application(
    _ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
    let token = deviceToken.map { String(format: "%02x", $0) }.joined()
    Respondo.setPushToken(token)
}
Flutter — firebase_messagingdart
// iOS cần token APNs; Android cần token FCM.
final token = Platform.isIOS
    ? await FirebaseMessaging.instance.getAPNSToken()
    : await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);

// FCM xoay vòng token đăng ký của nó; giữ Android đồng bộ.
if (!Platform.isIOS) {
  FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}