תיעוד

התראות דחיפה

מסרו תשובות נציגים וקמפיינים בזמן שהאפליקציה סגורה, עם קישור עמוק ישירות אל השיחה הנכונה. האפליקציה שלכם מחזיקה את תת-מערכת הדחיפה; ה-SDK רושם טוקנים ופותח שיחות.

מה Respondo שולח#

  • דחיפות הודעה — תשובה של נציג או AI בשיחה שהמבקר משתתף בה.
  • דחיפות קמפיין — קמפייני דחיפה יוצאים, שגם מדווחים על beacon פתיחה.

דחיפות הודעה תמיד נושאות קישור עמוק בצורה respondo://conversation/<id>. דחיפות קמפיין נושאות את הקישור העמוק שהוגדר בקמפיין — הוא אופציונלי, וכשאינו מוגדר הדחיפה אינה מכילה קישור עמוק.

Apple (APNs)#

דחיפה ב-iOS רצה על APNs ישירות — ללא תלות ב-Firebase. מחשבון ה-Apple Developer שלכם, השיגו:

  • מפתח אימות APNs (מפתח טוקן .p8).
  • ה-Key ID של אותו מפתח.
  • ה-Team ID שלכם.
  • ה-bundle id של האפליקציה.

Google (FCM)#

דחיפה ב-Android עוברת דרך Firebase Cloud Messaging. מפרויקט ה-Firebase שלכם, השיגו:

  • JSON של חשבון שירות עם תפקיד Cloud Messaging.
  • מזהה פרויקט ה-Firebase (מסוף Firebase → Project settings) — מוזן כשדה נפרד בטופס הדחיפה בלוח הבקרה לצד ה-JSON של חשבון השירות.
  • ה-package name של אפליקציית ה-Android, וחברו את האפליקציה לאותו פרויקט Firebase (google-services.json).

הגדרה ב-Respondo#

הוסיפו את מפתח ה-APNs ואת חשבון השירות של FCM עם מזהה הפרויקט שלו לערוץ הווידג׳ט שלכם בלוח הבקרה. זה כל מה ש-Respondo צריך כדי לשלוח לשתי הפלטפורמות.

הגדרת ההרשאות דרך ה-API והפניה המלאה לשדות מכוסות במדריך הגדרת הדחיפה שמסופק עם הגישה ל-SDK שלכם.

פורמט ה-payload#

ה-payload תמיד שוכן תחת מפתח שורש respondo — נוכחותו היא הדרך שבה ה-SDK מבחין בין הדחיפה שלו לבין אחרות (ב-iOS ב- userInfo, ב-Android כמחרוזת JSON ב- data["respondo"]).

respondo payloadjson
{
  "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.

דחיפות קמפיין כוללות גם delivery_id שמשמש לדיווח על beacon הפתיחה, ועשויות לשאת מפתחות מחרוזת שטוחים נוספים מנתוני הדחיפה של הקמפיין.

טיפול בהקשות ובמצב חזית#

בהקשה על התראה, מסרו את ה-payload הגולמי ל-SDK. הוא מנתח את ה-payload ופותח את השיחה הנכונה, ומחזיר false אם הדחיפה אינה דחיפה של Respondo (במקרה כזה טפלו בה בעצמכם).

טיפול בהקשה (לפי פלטפורמה)text
Android:  RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS:      Respondo.handlePush(userInfo: userInfo)
Flutter:  Respondo.handlePushData(message.data)

כפילויות מכווצות לפי message_id, ובזמן שאותה שיחה פתוחה בחזית ההתראה המערכתית מדוכאת — ה-SDK מטפל בשני המקרים אוטומטית.

רישום טוקנים של מכשירים#

האפליקציה שלכם משיגה את טוקן המכשיר מתת-מערכת הדחיפה שלה ומעבירה אותו ל- setPushToken. קראו ל- clearPushToken בהתנתקות.

איזה טוקן להעביר. ה-backend מנתב כל מסירה לפי פלטפורמה — iOS הולך ל-APNs ישירות, Android הולך ל-FCM — ולכן עליכם לרשום את הטוקן של התעבורה הנייטיבית של הפלטפורמה, לא את מה שספריית הדחיפה שלכם במקרה מחזירה:
  • Android — טוקן הרישום של FCM מ- FirebaseMessaging.getToken().
  • iOS (נייטיבי) — טוקן מכשיר APNs (hex) מ- didRegisterForRemoteNotificationsWithDeviceToken.
  • iOS דרך Flutter (firebase_messaging) — השתמשו ב- getAPNSToken(), לא ב-getToken(). העברת טוקן ה-FCM ב-iOS שולחת אותו ל-APNs, שם הוא אינו טוקן מכשיר תקין והדחיפות לעולם אינן מגיעות. 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);
}