Dokumentasi

Android SDK

Klien nipis Kotlin dan Jetpack Compose yang membuka sembang sokongan Respondo sebagai helaian bawah (bottom sheet) di atas aplikasi anda.

Keperluan#

  • minSdk 24 (Android 7.0), compileSdk 35.
  • Kotlin 2.x dan Jetpack Compose (SDK ini menyertakan UI Compose).
  • JVM target 17.

SDK menarik kebergantungan transitifnya sendiri (Coroutines, kotlinx.serialization, OkHttp, Coil, Compose) dan mengisytiharkan kebenaran INTERNET dalam manifesnya sendiri — tiada apa-apa yang perlu ditambah secara manual.

Pemasangan#

Pustaka ini diterbitkan di Maven Central sebagai ai.respondo:respondo-sdk. Pastikan mavenCentral() ada dalam repositori anda (secara lalai ia sudah ada dalam projek Android baharu), kemudian tambah kebergantungan itu mengikut koordinatnya.

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

Inisialisasi#

Panggil Respondo.init sekali sahaja, pasang RespondoChatHost() sekali dalam pokok Compose anda, dan buka sembang itu daripada butang anda sendiri.

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>",   // daripada papan pemuka
                channelId = "<channel-uuid>", // pilihan
                // baseUrl ditinggalkan -> https://api.respondo.ai
            ),
        )

        setContent {
            MaterialTheme {
                Box(modifier = Modifier.fillMaxSize()) {
                    Button(onClick = { Respondo.open() }) { Text("Support") }
                    RespondoChatHost() // SDK memaparkan helaian apabila keadaan sembang ialah OPEN
                }
            }
        }
    }
}

Semua panggilan melalui singleton Respondo. Panggilan itu idempoten, selamat dipanggil daripada mana-mana thread, dan panggilan yang dibuat sebelum init selesai akan ditimbal lalu dimainkan semula.

Mengenal pasti pengguna#

Secara lalai, setiap pelawat adalah tanpa nama. Pada pelancaran pertama, SDK menjana visitor_id yang stabil dan menyimpannya dalam storan setempat, jadi pengguna yang kembali menemui semula perbualannya. Tiada kunci API yang perlu dibenamkan — setiap perbualan dilindungi oleh token sesi khusus perbualan yang dijana backend dan digeser ke hadapan pada setiap mesej, jadi pelawat tanpa nama tidak perlu mengesahkan dirinya semula.

Panggil identify sebaik sahaja pengguna anda log masuk. Ini melekatkan identiti sebenarnya supaya sejarahnya mengikut merentas peranti dan pemasangan semula, dan nama serta e-melnya dipaparkan di sebelah perbualan dalam peti masuk anda, bukan sekadar pelawat tanpa nama.

userHash ialah tandatangan yang dikira oleh backend anda daripada identity_secret ejen — HMAC-SHA256(secret, userId) (atau e-mel apabila tiada userId), dikodkan sebagai hex huruf kecil. Rahsia itu membuktikan identiti tersebut tulen, jadi ia mesti berada hanya pada backend anda dan tidak sekali-kali dihantar bersama aplikasi. Lihat halaman Pengesahan identiti untuk formula penuh dan contoh di sisi pelayan.

Kotlinkotlin
import ai.respondo.sdk.RespondoIdentity

// userHash datang daripada backend anda (HMAC-SHA256 atas userId) —
// jangan sekali-kali mengiranya di dalam aplikasi.
Respondo.identify(
    RespondoIdentity(
        userId = session.userId,
        email = session.email,
        name = session.fullName,
        userHash = session.respondoUserHash,
    ),
)

// Semasa log keluar: buang token push, batalkan sesi, mulakan pelawat tanpa nama yang baharu.
Respondo.clearPushToken()
Respondo.reset()

Jika hash tiada atau salah, tiada ralat dilemparkan: backend senyap-senyap mengekalkan pelawat itu sebagai tanpa nama, sembang terus berfungsi, dan anda cuma kehilangan pautan merentas peranti sehingga hash yang sah dibekalkan. Pengesahan hanya berjalan apabila ejen mempunyai identity_secret yang ditetapkan — biarkan ia kosong semasa pembangunan dan userId / e-mel akan diterima seadanya.

Observable & panggilan balik#

Baca keadaan secara reaktif sebagai StateFlow (sesuai untuk Compose) atau secara imperatif melalui RespondoListener (sesuai untuk lencana pada ikon aplikasi).

Kotlinkotlin
// Reaktif: kiraan belum dibaca sebagai StateFlow.
val unread by Respondo.unreadCount.collectAsState()

// Imperatif: listener untuk lencana dan analitik.
Respondo.setListener(object : RespondoListener {
    override fun onUnreadChanged(count: Int) { updateAppIconBadge(count) }
    override fun onUrlRequested(url: String): Boolean = tryOpenInternally(url)
})

Penjejakan skrin#

Laporkan skrin semasa pada setiap navigasi supaya teguran proaktif dan penyasaran peringkat halaman boleh dipadankan dengannya. Hantar null untuk mengosongkannya; pada setiap perubahan, teguran proaktif dinilai semula untuk skrin baharu itu.

Kotlinkotlin
Respondo.setCurrentScreen("pricing")

Langkah seterusnya#

Sediakan Pemberitahuan push untuk balasan kakitangan sokongan ketika luar talian dan Pengesahan identiti untuk pengguna yang telah log masuk. Keseluruhan permukaan API, pembalut Fragment untuk hos XML, dan penyelesaian masalah dibincangkan dalam panduan permulaan Android SDK; sumber SDK ini terbuka di GitHub.