डॉक्युमेंटेशन

Android SDK

Kotlin आणि Jetpack Compose वरचा हलका क्लायंट, जो Respondo सपोर्ट चॅट तुमच्या ॲपवर बॉटम शीट म्हणून उघडतो.

आवश्यकता#

  • minSdk 24 (Android 7.0), compileSdk 35.
  • Kotlin 2.x आणि Jetpack Compose (SDK सोबतच Compose UI येते).
  • JVM target 17.

SDK स्वतःच्या ट्रान्झिटिव्ह डिपेंडन्सी (Coroutines, kotlinx.serialization, OkHttp, Coil, Compose) स्वतःच आणते आणि आपल्या मॅनिफेस्टमध्ये INTERNET परवानगी जाहीर करते — हाताने काहीही जोडायची गरज नाही.

इन्स्टॉलेशन#

ही लायब्ररी Maven Central वर ai.respondo:respondo-sdk म्हणून प्रकाशित केली आहे. याची खात्री करा की mavenCentral() तुमच्या रेपॉझिटरीजमध्ये आहे (नव्या Android प्रकल्पात ते डीफॉल्टनुसार असतेच), आणि मग कोऑर्डिनेटने डिपेंडन्सी जोडा.

settings.gradle.ktskotlin
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
}
app/build.gradle.ktskotlin
dependencies {
    implementation("ai.respondo:respondo-sdk:0.1.0")
}

इनिशियलाइझ करणे#

Respondo.init एकदाच कॉल करा, तुमच्या Compose ट्रीमध्ये RespondoChatHost() एकदाच माउंट करा आणि चॅट स्वतःच्या बटणातून उघडा.

MainActivity.ktkotlin
import ai.respondo.sdk.Respondo
import ai.respondo.sdk.RespondoConfig
import ai.respondo.sdk.ui.RespondoChatHost

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        Respondo.init(
            context = this,
            config = RespondoConfig(
                agentId = "<agent-uuid>",   // डॅशबोर्डमधून
                channelId = "<channel-uuid>", // ऐच्छिक
                // baseUrl वगळल्यास -> https://api.respondo.ai
            ),
        )

        setContent {
            MaterialTheme {
                Box(modifier = Modifier.fillMaxSize()) {
                    Button(onClick = { Respondo.open() }) { Text("Support") }
                    RespondoChatHost() // चॅटची स्थिती OPEN असताना SDK शीट दाखवते
                }
            }
        }
    }
}

सर्व कॉल Respondo सिंगलटनमधून जातात. ते आयडेम्पोटंट आहेत, कोणत्याही थ्रेडमधून सुरक्षित आहेत, आणि init पूर्ण होण्याआधी केलेले कॉल बफर होऊन नंतर पुन्हा चालवले जातात.

वापरकर्त्यांची ओळख#

डीफॉल्टनुसार प्रत्येक अभ्यागत अनामिक असतो. पहिल्या लाँचला SDK स्थिर visitor_id तयार करते आणि तो लोकल स्टोरेजमध्ये ठेवते, त्यामुळे परत येणाऱ्या वापरकर्त्याला त्याचे संभाषण पुन्हा सापडते. ॲपमध्ये कोणतीही API की ठेवावी लागत नाही — प्रत्येक संभाषण त्या संभाषणापुरत्या सेशन टोकनने संरक्षित असते; बॅकएंड ते टोकन तयार करतो आणि प्रत्येक मेसेजला पुढे सरकवतो, त्यामुळे अनामिक अभ्यागताला कधीही पुन्हा प्रमाणीकरण करावे लागत नाही.

तुमचा वापरकर्ता साइन इन झाल्यावर identify कॉल करा. यामुळे त्याची खरी ओळख जोडली जाते, त्याचा इतिहास वेगवेगळ्या डिव्हाइसवर आणि पुन्हा इन्स्टॉल केल्यावरही त्याच्यासोबत राहतो, आणि तुमच्या इनबॉक्समध्ये संभाषणाशेजारी अनामिक अभ्यागताऐवजी त्याचे नाव आणि email दिसतात.

userHash ही स्वाक्षरी तुमचा बॅकएंड एजंटच्या identity_secret वरून काढतो — HMAC-SHA256(secret, userId) (किंवा userId नसेल तेव्हा email वरून), लोअरकेस hex मध्ये एन्कोड केलेली. ही सीक्रेट ओळख खरी असल्याचे सिद्ध करते, म्हणून ती फक्त तुमच्या बॅकएंडवरच राहिली पाहिजे आणि ॲपसोबत कधीही पाठवली जात नाही. संपूर्ण सूत्र आणि सर्व्हरवरची उदाहरणे ओळख पडताळणी पानावर पाहा.

Kotlinkotlin
import ai.respondo.sdk.RespondoIdentity

// userHash तुमच्या बॅकएंडकडून येतो (userId वर HMAC-SHA256) —
// तो ॲपमध्ये कधीही काढू नका.
Respondo.identify(
    RespondoIdentity(
        userId = session.userId,
        email = session.email,
        name = session.fullName,
        userHash = session.respondoUserHash,
    ),
)

// लॉगआउटवर: पुश टोकन काढून टाका, सेशन रद्द करा, नवा अनामिक अभ्यागत सुरू करा.
Respondo.clearPushToken()
Respondo.reset()

हॅश नसेल किंवा चुकीचा असेल, तर काहीही एरर देत नाही: बॅकएंड गुपचूप अभ्यागताला अनामिक ठेवतो, चॅट चालूच राहते आणि वैध हॅश मिळेपर्यंत तुम्ही फक्त क्रॉस-डिव्हाइस दुवा गमावता. एजंटला identity_secret दिलेला असेल तेव्हाच पडताळणी चालते — डेव्हलपमेंटदरम्यान तो रिकामा ठेवा, म्हणजे userId / email जसेच्या तसे स्वीकारले जातात.

ऑब्झर्व्हेबल आणि कॉलबॅक#

स्थिती रिॲक्टिव्ह पद्धतीने StateFlow म्हणून वाचा (Compose साठी उत्तम) किंवा RespondoListener द्वारे इंपरेटिव्ह पद्धतीने वाचा (ॲप-आयकॉनवरील बॅजसाठी उत्तम).

Kotlinkotlin
// रिॲक्टिव्ह: न वाचलेल्यांची संख्या StateFlow म्हणून.
val unread by Respondo.unreadCount.collectAsState()

// इंपरेटिव्ह: बॅज आणि ॲनालिटिक्ससाठी लिसनर.
Respondo.setListener(object : RespondoListener {
    override fun onUnreadChanged(count: Int) { updateAppIconBadge(count) }
    override fun onUrlRequested(url: String): Boolean = tryOpenInternally(url)
})

स्क्रीन ट्रॅकिंग#

प्रत्येक नेव्हिगेशनला सध्याची स्क्रीन कळवा, म्हणजे प्रोॲक्टिव्ह टीझर आणि पान-पातळीवरचे टार्गेटिंग तिच्याशी जुळवता येते. साफ करण्यासाठी null पाठवा; प्रत्येक बदलावर नव्या स्क्रीनसाठी प्रोॲक्टिव्ह टीझरचे पुनर्मूल्यांकन होते.

Kotlinkotlin
Respondo.setCurrentScreen("pricing")

पुढील पायऱ्या#

सपोर्ट प्रतिनिधी ऑफलाइन असताना येणाऱ्या उत्तरांसाठी पुश नोटिफिकेशन आणि साइन इन केलेल्या वापरकर्त्यांसाठी ओळख पडताळणी सेट करा. संपूर्ण API, XML होस्टसाठीचा Fragment रॅपर आणि अडचणी सोडवण्याचे मार्गदर्शन Android SDK च्या सुरुवातीच्या गाइडमध्ये आहे; SDK चे सोर्स GitHub वर खुले आहेत.