Документація

Push-сповіщення

Доставляйте відповіді операторів і кампанії, поки застосунок закритий, із глибоким посиланням прямісінько в потрібну розмову. Ваш застосунок володіє push-підсистемою; SDK реєструє токени й відкриває розмови.

Що надсилає Respondo#

  • Push повідомлень — відповідь оператора або AI в розмові, у якій бере участь відвідувач.
  • Push кампаній — вихідні push-кампанії, які також повідомляють про відкриття маячком (beacon).

Push повідомлень завжди несуть глибоке посилання виду respondo://conversation/<id>. Push кампаній несуть глибоке посилання, налаштоване на кампанії — воно необов’язкове, і коли його не задано, push не містить глибокого посилання.

Apple (APNs)#

Push для iOS працює безпосередньо через APNs — без залежності від Firebase. У своєму обліковому записі Apple Developer отримайте:

  • Ключ автентифікації APNs (токен-ключ .p8).
  • Key ID цього ключа.
  • Ваш Team ID.
  • Bundle id застосунку.

Google (FCM)#

Push для Android іде через Firebase Cloud Messaging. У своєму проєкті Firebase отримайте:

  • JSON сервісного акаунта з роллю Cloud Messaging.
  • Firebase project ID (консоль Firebase → Project settings) — вводиться окремим полем у формі push у дашборді поряд із JSON сервісного акаунта.
  • Назву пакета Android-застосунку й підключіть застосунок до того самого проєкту Firebase (google-services.json).

Налаштування в Respondo#

Додайте ключ APNs і сервісний акаунт FCM з його project ID до каналу свого віджета в дашборді. Це все, що потрібно Respondo, щоб надсилати на обидві платформи.

Задавання облікових даних через API й повний довідник полів описані в посібнику з налаштування push, який постачається з вашим доступом до SDK.

Формат payload#

Payload завжди лежить під кореневим ключем respondo — саме за його наявністю SDK відрізняє власний push від чужих (на iOS у userInfo, на Android як JSON-рядок у 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"
  }
}

Усі значення — плоскі рядки. Заголовок і тіло сповіщення доставляються платформенним транспортом — aps.alert в APNs і message.notification у FCM — а не всередині об’єкта respondo.

Push кампаній також містять delivery_id, що використовується для повідомлення про відкриття маячком, і можуть нести додаткові плоскі рядкові ключі з push-даних кампанії.

Обробка натискань і переднього плану#

При натисканні на сповіщення передайте сирий payload у SDK. Він розбирає payload і відкриває потрібну розмову, повертаючи false, якщо push не є push від Respondo (у такому разі обробіть його самі).

Обробка натискання (за платформами)text
Android:  RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS:      Respondo.handlePush(userInfo: userInfo)
Flutter:  Respondo.handlePushData(message.data)

Дублікати згортаються за message_id, а поки та сама розмова відкрита на передньому плані, системне сповіщення пригнічується — SDK обробляє і те, і те автоматично.

Реєстрація токенів пристроїв#

Ваш застосунок отримує токен пристрою від своєї push-підсистеми й передає його в setPushToken. Викликайте clearPushToken при виході.

Який токен передавати. Бекенд маршрутизує кожну доставку за платформою — iOS іде безпосередньо в APNs, Android іде у FCM — тож ви маєте реєструвати токен нативного транспорту платформи, а не той, що випадково повертає ваша push-бібліотека:
  • Android — реєстраційний токен FCM із FirebaseMessaging.getToken().
  • iOS (нативно) — токен пристрою APNs (hex) із didRegisterForRemoteNotificationsWithDeviceToken.
  • iOS через Flutter (firebase_messaging) — використовуйте getAPNSToken(), а не getToken(). Передавання токена FCM на iOS надсилає його в APNs, де він не є валідним токеном пристрою, і push ніколи не приходять. getAPNSToken() може бути null у перші миті після запуску — у такому разі повторіть спробу після короткої затримки.
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 потрібен токен APNs; Android потрібен токен FCM.
final token = Platform.isIOS
    ? await FirebaseMessaging.instance.getAPNSToken()
    : await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);

// FCM ротує свій реєстраційний токен; тримайте Android у синхроні.
if (!Platform.isIOS) {
  FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}