Dokumentasi

Notifikasi push

Kirimkan balasan agen dan kampanye saat aplikasi tertutup, dengan deep link langsung ke percakapan yang tepat. Aplikasi Anda memiliki subsistem push; SDK mendaftarkan token dan membuka percakapan.

Apa yang dikirim Respondo#

  • Push pesan — balasan agen atau AI dalam percakapan yang diikuti pengunjung.
  • Push kampanye — kampanye push keluar, yang juga melaporkan beacon pembukaan.

Push pesan selalu membawa deep link berbentuk respondo://conversation/<id>. Push kampanye membawa deep link yang dikonfigurasi pada kampanye — bersifat opsional, dan jika tidak disetel, push tidak berisi deep link.

Apple (APNs)#

Push iOS berjalan langsung di APNs — tanpa dependensi Firebase. Dari akun Apple Developer Anda, dapatkan:

  • Sebuah APNs Auth Key (kunci token .p8).
  • Key ID dari kunci tersebut.
  • Team ID Anda.
  • bundle id aplikasi.

Google (FCM)#

Push Android berjalan melalui Firebase Cloud Messaging. Dari proyek Firebase Anda, dapatkan:

  • Sebuah JSON service account dengan peran Cloud Messaging.
  • Firebase project ID (Firebase console → Project settings) — dimasukkan sebagai field tersendiri di formulir push dashboard bersama JSON service account.
  • package name aplikasi Android, dan hubungkan aplikasi ke proyek Firebase yang sama (google-services.json).

Konfigurasi di Respondo#

Tambahkan kunci APNs dan service account FCM beserta project ID-nya ke channel widget Anda di dashboard. Hanya itu yang dibutuhkan Respondo untuk mengirim ke kedua platform.

Menyetel kredensial melalui API dan referensi field lengkap dibahas dalam panduan penyiapan push yang disertakan dengan akses SDK Anda.

Format payload#

Payload selalu berada di bawah kunci root respondo — keberadaannya adalah cara SDK membedakan push miliknya dari yang lain (di iOS pada userInfo, di Android sebagai string JSON dalam 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"
  }
}

Semua nilai berupa string datar. Judul dan isi notifikasi dikirim oleh transport platform — aps.alert di APNs dan message.notification di FCM — bukan di dalam objek respondo.

Push kampanye juga menyertakan delivery_id yang digunakan untuk melaporkan beacon pembukaan, dan dapat membawa key string datar tambahan dari data push kampanye.

Menangani ketukan & foreground#

Saat notifikasi diketuk, serahkan payload mentah ke SDK. SDK mem-parse payload dan membuka percakapan yang tepat, mengembalikan false jika push bukan push Respondo (tangani sendiri dalam kasus itu).

Menangani ketukan (per platform)text
Android:  RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS:      Respondo.handlePush(userInfo: userInfo)
Flutter:  Respondo.handlePushData(message.data)

Duplikat digabungkan berdasarkan message_id, dan selama percakapan yang sama terbuka di foreground notifikasi sistem ditekan — SDK menangani keduanya secara otomatis.

Mendaftarkan token perangkat#

Aplikasi Anda memperoleh token perangkat dari subsistem push-nya dan meneruskannya ke setPushToken. Panggil clearPushToken saat logout.

Token mana yang harus diteruskan. Backend mengarahkan setiap pengiriman berdasarkan platform — iOS langsung ke APNs, Android ke FCM — jadi Anda harus mendaftarkan token dari transport native platform tersebut, bukan token apa pun yang kebetulan dikembalikan library push Anda:
  • Android — token registrasi FCM dari FirebaseMessaging.getToken().
  • iOS (native) — token perangkat APNs (hex) dari didRegisterForRemoteNotificationsWithDeviceToken.
  • iOS via Flutter (firebase_messaging) — gunakan getAPNSToken(), bukan getToken(). Meneruskan token FCM di iOS mengirimkannya ke APNs, di mana ia bukan token perangkat yang valid dan push tidak pernah tiba. getAPNSToken() bisa bernilai null pada saat-saat pertama setelah peluncuran — coba lagi setelah jeda singkat bila demikian.
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 memerlukan token APNs; Android memerlukan token FCM.
final token = Platform.isIOS
    ? await FirebaseMessaging.instance.getAPNSToken()
    : await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);

// FCM merotasi token registrasinya; jaga Android tetap sinkron.
if (!Platform.isIOS) {
  FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}