డాక్యుమెంటేషన్

Android SDK

మీ యాప్‌పైన Respondo సపోర్ట్ చాట్‌ను బాటమ్ షీట్‌గా తెరిచే తేలికపాటి Kotlin, Jetpack Compose క్లయింట్.

అవసరాలు#

  • 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ని కాల్ చేయండి. ఇది వారి అసలు గుర్తింపును జతచేస్తుంది, తద్వారా పరికరాలు మారినా, యాప్ మళ్లీ ఇన్‌స్టాల్ చేసినా వారి చరిత్ర వారితోనే ఉంటుంది; మీ ఇన్‌బాక్స్‌లో సంభాషణ పక్కన అనామక సందర్శకుడికి బదులు వారి పేరు, ఈమెయిల్ కనిపిస్తాయి.

userHash అనేది ఏజెంట్ యొక్క identity_secret నుంచి మీ బ్యాకెండ్ లెక్కించే సంతకం — HMAC-SHA256(secret, userId) (userId లేనప్పుడు ఈమెయిల్‌పై), చిన్న అక్షరాల 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 / ఈమెయిల్ ఉన్నదున్నట్టుగానే ఆమోదించబడతాయి.

అబ్జర్వబుల్‌లు & కాల్‌బ్యాక్‌లు#

స్థితిని రియాక్టివ్‌గా 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 పంపండి; ప్రతి మార్పులోనూ కొత్త స్క్రీన్‌కు ముందస్తు టీజర్ మళ్లీ మూల్యాంకనం అవుతుంది.

ఇదే పేరు పాప్-అప్ సర్వేల స్క్రీన్ నియమాలతో పోల్చబడుతుంది, కాబట్టి అనువదించిన శీర్షికలకు బదులుగా «Checkout» వంటి స్థిరమైన ఐడెంటిఫైయర్‌లను ఉపయోగించండి. పేజీ చిరునామా నియమాలు వెబ్‌సైట్‌లలో మాత్రమే వర్తిస్తాయి.

Kotlinkotlin
Respondo.setCurrentScreen("pricing")

కోడ్ నుండి సర్వే తెరవండి#

వినియోగదారు ఏ స్క్రీన్‌లో ఉన్నా చురుకైన పాప్-అప్ సర్వేను వెంటనే తెరుస్తుంది; Show on, స్క్రీన్ నియమాలు, స్క్రీన్‌పై గడిపిన సమయం, ట్రిగర్ ఈవెంట్, ప్రేక్షకులను దాటవేస్తుంది. ఐడీని సర్వే ఎడిటర్ నుండి కాపీ చేయండి (Additional ways to share). వినియోగదారు ఇప్పటికే సమాధానమిచ్చిన సర్వే మళ్లీ చూపబడదు.

Kotlinkotlin
Respondo.startSurvey("<survey-id>")

తదుపరి దశలు#

ఆఫ్‌లైన్‌లో వచ్చే ఆపరేటర్ జవాబుల కోసం పుష్ నోటిఫికేషన్‌లు, సైన్ ఇన్ అయిన వినియోగదారుల కోసం గుర్తింపు ధ్రువీకరణ అమర్చుకోండి. పూర్తి API ఉపరితలం, XML హోస్ట్‌ల కోసం Fragment ర్యాపర్, సమస్యల పరిష్కారం — ఇవన్నీ Android SDK ప్రారంభ మార్గదర్శిలో ఉన్నాయి; SDK సోర్స్‌లు GitHubలో బహిరంగంగా అందుబాటులో ఉన్నాయి.