Android SDK
Een dunne Kotlin- en Jetpack Compose-client die de Respondo-supportchat opent als bottom sheet over je app.
Vereisten#
minSdk24 (Android 7.0), compileSdk 35.- Kotlin 2.x en Jetpack Compose (de SDK levert Compose-UI mee).
- JVM target 17.
De SDK haalt zijn eigen transitieve dependencies binnen (Coroutines, kotlinx.serialization, OkHttp, Coil, Compose) en declareert de INTERNET-permissie in zijn manifest — niets om met de hand toe te voegen.
Installatie#
De library is gepubliceerd op Maven Central als ai.respondo:respondo-sdk. Zorg dat mavenCentral() in je repositories staat (dat is standaard zo in een nieuw Android-project) en voeg de dependency vervolgens toe via zijn coördinaat.
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}dependencies {
implementation("ai.respondo:respondo-sdk:0.1.0")
}Initialiseren#
Roep Respondo.init één keer aan, mount RespondoChatHost() één keer in je Compose-boom, en open de chat vanaf je eigen knop.
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>", // uit het dashboard
channelId = "<channel-uuid>", // optioneel
// baseUrl weggelaten -> https://api.respondo.ai
),
)
setContent {
MaterialTheme {
Box(modifier = Modifier.fillMaxSize()) {
Button(onClick = { Respondo.open() }) { Text("Support") }
RespondoChatHost() // SDK toont de sheet wanneer de chatstatus OPEN is
}
}
}
}
}Alle aanroepen gaan via de Respondo-singleton. Ze zijn idempotent, veilig vanaf elke thread, en aanroepen die vóór het einde van init worden gedaan, worden gebufferd en opnieuw afgespeeld.
Gebruikers identificeren#
Standaard is elke bezoeker anoniem. Bij de eerste start genereert de SDK een stabiele visitor_id en bewaart die in de lokale opslag, zodat een terugkerende gebruiker zijn gesprek terugvindt. Er is geen API-sleutel om in te bedden — elk gesprek wordt beschermd door een sessietoken per gesprek dat de backend uitgeeft en bij elk bericht vooruit schuift, zodat een anonieme bezoeker zich nooit opnieuw hoeft te authenticeren.
Roep identify aan zodra je gebruiker is ingelogd. Dit koppelt zijn echte identiteit, zodat zijn geschiedenis hem volgt over apparaten en herinstallaties heen, en zijn naam en e-mail naast het gesprek in je inbox verschijnen in plaats van een anonieme bezoeker.
De userHash is een handtekening die je backend berekent uit de identity_secret van de agent — HMAC-SHA256(secret, userId) (of het e-mailadres als er geen userId is), gecodeerd als kleine-letter-hex. Het secret bewijst dat de identiteit echt is, dus het mag alleen op je backend leven en wordt nooit met de app meegeleverd. Zie de pagina Identiteitsverificatie voor de volledige formule en voorbeelden aan de serverkant.
import ai.respondo.sdk.RespondoIdentity
// De userHash komt van je backend (HMAC-SHA256 over de userId) —
// bereken hem nooit in de app.
Respondo.identify(
RespondoIdentity(
userId = session.userId,
email = session.email,
name = session.fullName,
userHash = session.respondoUserHash,
),
)
// Bij uitloggen: verwijder de push-token, trek de sessie in, start een verse anonieme bezoeker.
Respondo.clearPushToken()
Respondo.reset()Als de hash ontbreekt of onjuist is, wordt er niets gegooid: de backend houdt de bezoeker stil anoniem, de chat blijft werken, en je verliest simpelweg de koppeling tussen apparaten totdat een geldige hash wordt aangeleverd. Verificatie draait alleen wanneer de agent een identity_secret heeft ingesteld — laat die leeg tijdens de ontwikkeling en userId / e-mail worden as-is geaccepteerd.
Observables & callbacks#
Lees de status reactief als StateFlow (ideaal voor Compose) of imperatief via RespondoListener (ideaal voor een badge op het app-icoon).
// Reactief: aantal ongelezen als een StateFlow.
val unread by Respondo.unreadCount.collectAsState()
// Imperatief: listener voor badges en analytics.
Respondo.setListener(object : RespondoListener {
override fun onUnreadChanged(count: Int) { updateAppIconBadge(count) }
override fun onUrlRequested(url: String): Boolean = tryOpenInternally(url)
})Schermtracking#
Meld het huidige scherm bij elke navigatie, zodat proactieve teasers en targeting op paginaniveau ertegen kunnen matchen. Geef null door om het te wissen; bij elke wijziging wordt de proactieve teaser opnieuw geëvalueerd voor het nieuwe scherm.
Respondo.setCurrentScreen("pricing")Volgende stappen#
Stel Push-notificaties in voor antwoorden van medewerkers offline en Identiteitsverificatie voor ingelogde gebruikers. Het volledige API-oppervlak, de Fragment-wrapper voor XML-hosts en het oplossen van problemen komen aan bod in de getting-startedgids van de Android SDK; de SDK-bronnen zijn openbaar op GitHub.