Android SDK
Klien Kotlin dan Jetpack Compose yang tipis, yang membuka chat dukungan Respondo sebagai bottom sheet di atas aplikasi Anda.
Persyaratan#
minSdk24 (Android 7.0), compileSdk 35.- Kotlin 2.x dan Jetpack Compose (SDK menyertakan Compose UI).
- Target JVM 17.
SDK menarik dependensi transitifnya sendiri (Coroutines, kotlinx.serialization, OkHttp, Coil, Compose) dan mendeklarasikan izin INTERNET di manifestnya — tidak ada yang perlu ditambahkan secara manual.
Instalasi#
Library ini dipublikasikan ke Maven Central sebagai ai.respondo:respondo-sdk. Pastikan mavenCentral() ada di repositori Anda (secara default sudah ada di proyek Android baru), lalu tambahkan dependensinya berdasarkan koordinat.
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}dependencies {
implementation("ai.respondo:respondo-sdk:0.1.0")
}Inisialisasi#
Panggil Respondo.init sekali, pasang RespondoChatHost() sekali di pohon Compose Anda, dan buka chat dari tombol Anda sendiri.
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>", // dari dashboard
channelId = "<channel-uuid>", // opsional
// baseUrl dihilangkan -> https://api.respondo.ai
),
)
setContent {
MaterialTheme {
Box(modifier = Modifier.fillMaxSize()) {
Button(onClick = { Respondo.open() }) { Text("Support") }
RespondoChatHost() // SDK menampilkan sheet saat status chat OPEN
}
}
}
}
}Semua panggilan melewati singleton Respondo. Panggilan bersifat idempoten, aman dari thread mana pun, dan panggilan yang dibuat sebelum init selesai akan disimpan di buffer lalu diputar ulang.
Mengenali pengguna#
Secara default setiap pengunjung bersifat anonim. Pada peluncuran pertama SDK menghasilkan visitor_id yang stabil dan menyimpannya di penyimpanan lokal, sehingga pengguna yang kembali menemukan percakapannya lagi. Tidak ada kunci API yang perlu disematkan — setiap percakapan dilindungi oleh token sesi per percakapan yang dicetak backend dan digeser maju pada setiap pesan, sehingga pengunjung anonim tidak pernah harus melakukan autentikasi ulang.
Panggil identify setelah pengguna Anda masuk. Ini melampirkan identitas asli mereka sehingga riwayatnya mengikuti mereka di berbagai perangkat dan pemasangan ulang, dan nama serta email mereka muncul di samping percakapan di inbox Anda alih-alih pengunjung anonim.
userHash adalah tanda tangan yang dihitung backend Anda dari identity_secret milik agen — HMAC-SHA256(secret, userId) (atau email bila tidak ada userId), dikodekan sebagai hex huruf kecil. Secret ini membuktikan bahwa identitas asli, jadi ia harus hanya berada di backend Anda dan tidak pernah dikirim di dalam aplikasi. Lihat halaman Verifikasi identitas untuk formula lengkap dan contoh sisi server.
import ai.respondo.sdk.RespondoIdentity
// userHash berasal dari backend Anda (HMAC-SHA256 atas userId) —
// jangan pernah menghitungnya di dalam aplikasi.
Respondo.identify(
RespondoIdentity(
userId = session.userId,
email = session.email,
name = session.fullName,
userHash = session.respondoUserHash,
),
)
// Saat logout: buang token push, cabut sesi, mulai pengunjung anonim baru.
Respondo.clearPushToken()
Respondo.reset()Jika hash hilang atau salah, tidak ada yang dilempar: backend diam-diam menjaga pengunjung tetap anonim, chat tetap berfungsi, dan Anda hanya kehilangan tautan lintas perangkat sampai hash yang valid diberikan. Verifikasi hanya berjalan saat agen memiliki identity_secret yang disetel — biarkan kosong selama pengembangan dan userId / email diterima apa adanya.
Observable & callback#
Baca status secara reaktif sebagai StateFlow (bagus untuk Compose) atau secara imperatif melalui RespondoListener (bagus untuk badge ikon aplikasi).
// Reaktif: jumlah belum dibaca sebagai StateFlow.
val unread by Respondo.unreadCount.collectAsState()
// Imperatif: listener untuk badge dan analitik.
Respondo.setListener(object : RespondoListener {
override fun onUnreadChanged(count: Int) { updateAppIconBadge(count) }
override fun onUrlRequested(url: String): Boolean = tryOpenInternally(url)
})Pelacakan layar#
Laporkan layar saat ini pada setiap navigasi agar teaser proaktif dan penargetan tingkat halaman dapat mencocokkannya. Teruskan null untuk menghapusnya; pada setiap perubahan, teaser proaktif dievaluasi ulang untuk layar baru.
Respondo.setCurrentScreen("pricing")Langkah berikutnya#
Siapkan Notifikasi push untuk balasan agen saat offline dan Verifikasi identitas untuk pengguna yang masuk. Permukaan API lengkap, wrapper Fragment untuk host XML, dan pemecahan masalah dibahas dalam panduan memulai Android SDK; kode sumber SDK bersifat publik di GitHub.