Android SDK
Respondo destek sohbetini uygulamanızın üzerinde alttan açılan bir sayfa olarak açan, ince bir Kotlin ve Jetpack Compose istemcisi.
Gereksinimler#
minSdk24 (Android 7.0), compileSdk 35.- Kotlin 2.x ve Jetpack Compose (SDK, Compose UI ile birlikte gelir).
- JVM hedefi 17.
SDK kendi geçişli bağımlılıklarını (Coroutines, kotlinx.serialization, OkHttp, Coil, Compose) çeker ve manifest’inde INTERNET iznini bildirir — elle eklenecek bir şey yok.
Kurulum#
Kütüphane Maven Central üzerinde ai.respondo:respondo-sdk olarak yayımlanır. mavenCentral() deposunun repositories listenizde olduğundan emin olun (yeni bir Android projesinde varsayılan olarak vardır), ardından bağımlılığı koordinatıyla ekleyin.
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}dependencies {
implementation("ai.respondo:respondo-sdk:0.1.0")
}Başlatma#
Respondo.init’i bir kez çağırın, Compose ağacınızda RespondoChatHost()’u bir kez yerleştirin ve sohbeti kendi düğmenizden açın.
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>", // panelden alınır
channelId = "<channel-uuid>", // isteğe bağlı
// baseUrl atlanırsa -> https://api.respondo.ai
),
)
setContent {
MaterialTheme {
Box(modifier = Modifier.fillMaxSize()) {
Button(onClick = { Respondo.open() }) { Text("Destek") }
RespondoChatHost() // sohbet durumu OPEN olduğunda SDK sayfayı gösterir
}
}
}
}
}Tüm çağrılar Respondo singleton’ı üzerinden geçer. Bunlar idempotenttir, herhangi bir thread’den güvenlidir ve init tamamlanmadan önce yapılan çağrılar tamponlanıp yeniden oynatılır.
Kullanıcıları tanımlama#
Varsayılan olarak her ziyaretçi anonimdir. İlk açılışta SDK, kararlı bir visitor_id oluşturur ve onu yerel depoda tutar; böylece geri dönen bir kullanıcı konuşmasını yeniden bulur. Gömülecek bir API anahtarı yoktur — her konuşma, backend’in ürettiği ve her mesajda ilerlettiği konuşma başına bir oturum belirteciyle korunur; böylece anonim bir ziyaretçinin asla yeniden kimlik doğrulaması gerekmez.
Kullanıcınız oturum açtığında identify’i bir kez çağırın. Bu, gerçek kimliklerini iliştirir; böylece geçmişleri cihazlar ve yeniden kurulumlar arasında onları takip eder ve gelen kutunuzda konuşmanın yanında anonim bir ziyaretçi yerine adları ile e-postaları görünür.
userHash, backend’inizin ajanın identity_secret’ından hesapladığı bir imzadır — HMAC-SHA256(secret, userId) (veya userId yoksa e-posta), küçük harfli hex olarak kodlanır. Bu gizli anahtar, kimliğin gerçek olduğunu kanıtlar; bu yüzden yalnızca backend’inizde bulunmalı ve asla uygulamayla gönderilmemelidir. Tam formül ve sunucu tarafı örnekler için Kimlik doğrulama sayfasına bakın.
import ai.respondo.sdk.RespondoIdentity
// userHash backend'inizden gelir (userId üzerinden HMAC-SHA256) —
// asla uygulamada hesaplamayın.
Respondo.identify(
RespondoIdentity(
userId = session.userId,
email = session.email,
name = session.fullName,
userHash = session.respondoUserHash,
),
)
// Çıkışta: push belirtecini bırakın, oturumu iptal edin, taze bir anonim ziyaretçi başlatın.
Respondo.clearPushToken()
Respondo.reset()Hash eksik veya yanlışsa hiçbir hata fırlatılmaz: backend, ziyaretçiyi sessizce anonim tutar, sohbet çalışmaya devam eder ve geçerli bir hash sağlanana kadar yalnızca cihazlar arası bağlantıyı kaybedersiniz. Doğrulama yalnızca ajanın ayarlanmış bir identity_secret’ı olduğunda çalışır — geliştirme sırasında onu boş bırakın; o zaman userId / e-posta olduğu gibi kabul edilir.
Gözlemlenebilirler & geri çağırmalar#
Durumu reaktif olarak StateFlow ile (Compose için harika) ya da imperatif olarak RespondoListener üzerinden (uygulama simgesi rozeti için harika) okuyun.
// Reaktif: okunmamış sayısı bir StateFlow olarak.
val unread by Respondo.unreadCount.collectAsState()
// İmperatif: rozetler ve analitik için dinleyici.
Respondo.setListener(object : RespondoListener {
override fun onUnreadChanged(count: Int) { updateAppIconBadge(count) }
override fun onUrlRequested(url: String): Boolean = tryOpenInternally(url)
})Ekran takibi#
Proaktif teaser’ların ve sayfa düzeyi hedeflemenin eşleşebilmesi için geçerli ekranı her gezinmede bildirin. Temizlemek için null geçirin; her değişimde proaktif teaser yeni ekran için yeniden değerlendirilir.
Respondo.setCurrentScreen("pricing")Sonraki adımlar#
Çevrimdışı temsilci yanıtları için Push bildirimleri’ni ve oturum açmış kullanıcılar için Kimlik doğrulama’yı kurun. Tam API yüzeyi, XML host’ları için Fragment sarmalayıcısı ve sorun giderme, Android SDK başlangıç kılavuzunda ele alınır; SDK kaynakları GitHub üzerinde herkese açıktır.