दस्तावेज़

पुश नोटिफ़िकेशन

ऐप बंद होने पर भी ऑपरेटर के जवाब और कैम्पेन पहुँचाएँ, सही बातचीत में सीधे ले जाने वाले डीप लिंक के साथ। आपका ऐप पुश सबसिस्टम का मालिक है; SDK टोकन रजिस्टर करता है और बातचीत खोलता है।

Respondo क्या भेजता है#

  • मैसेज पुश — किसी ऐसी बातचीत में एक ऑपरेटर या AI का जवाब जिसका विज़िटर हिस्सा है।
  • कैम्पेन पुश — आउटबाउंड पुश कैम्पेन, जो एक ओपन बीकन भी रिपोर्ट करते हैं।

मैसेज पुश हमेशा इस रूप का एक डीप लिंक ले जाते हैं: respondo://conversation/<id>। कैम्पेन पुश कैम्पेन पर कॉन्फ़िगर किया गया डीप लिंक ले जाते हैं — वह वैकल्पिक है, और सेट न होने पर पुश में कोई डीप लिंक नहीं होता।

Apple (APNs)#

iOS पुश सीधे APNs पर चलता है — कोई Firebase डिपेंडेंसी नहीं। अपने Apple Developer अकाउंट से प्राप्त करें:

  • एक APNs Auth Key (.p8 token key)।
  • उस key का Key ID।
  • आपका Team ID।
  • ऐप का bundle id।

Google (FCM)#

Android पुश Firebase Cloud Messaging से होकर जाता है। अपने Firebase प्रोजेक्ट से प्राप्त करें:

  • Cloud Messaging रोल वाला एक service account JSON।
  • Firebase project ID (Firebase console → Project settings) — डैशबोर्ड के पुश फ़ॉर्म में service-account JSON के साथ अपने अलग फ़ील्ड के रूप में दर्ज किया जाता है।
  • Android ऐप का package name, और ऐप को उसी Firebase प्रोजेक्ट से जोड़ें (google-services.json)।

Respondo में कॉन्फ़िगर करें#

डैशबोर्ड में अपने विजेट चैनल में APNs key और project ID सहित FCM service account जोड़ें। दोनों प्लेटफ़ॉर्म पर भेजने के लिए Respondo को बस इतना ही चाहिए।

API के ज़रिए क्रेडेंशियल सेट करना और पूरा फ़ील्ड रेफ़रेंस आपके SDK एक्सेस के साथ दिए गए पुश सेटअप गाइड में शामिल हैं।

Payload फ़ॉर्मैट#

payload हमेशा एक रूट respondo key के नीचे रहता है — इसकी मौजूदगी से ही SDK अपने पुश को दूसरों से अलग पहचानता है (iOS पर userInfo में, Android पर data["respondo"] में एक JSON स्ट्रिंग के रूप में)।

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"
  }
}

सभी मान फ़्लैट स्ट्रिंग हैं। नोटिफ़िकेशन का title और body प्लेटफ़ॉर्म ट्रांसपोर्ट से पहुँचाए जाते हैं — APNs पर aps.alert और FCM पर message.notification — respondo ऑब्जेक्ट के अंदर नहीं।

कैम्पेन पुश में एक delivery_id भी शामिल होता है जिसका उपयोग ओपन बीकन रिपोर्ट करने के लिए होता है, और वे कैम्पेन के पुश डेटा से अतिरिक्त फ़्लैट स्ट्रिंग कीज़ ले जा सकते हैं।

टैप और फ़ोरग्राउंड संभालना#

किसी नोटिफ़िकेशन टैप पर, कच्चा payload SDK को सौंपें। यह payload को पार्स करता है और सही बातचीत खोलता है, और अगर पुश Respondo का पुश नहीं है तो false लौटाता है (उस स्थिति में उसे ख़ुद संभालें)।

टैप संभालें (प्रति प्लेटफ़ॉर्म)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 — FirebaseMessaging.getToken() से FCM रजिस्ट्रेशन टोकन।
  • iOS (नेटिव) — didRegisterForRemoteNotificationsWithDeviceToken से APNs डिवाइस टोकन (hex)।
  • Flutter के ज़रिए iOS (firebase_messaging) — getAPNSToken() का उपयोग करें, getToken() का नहीं। iOS पर FCM टोकन पास करने से वह 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);
}