Android SDK
thin client แบบ Kotlin และ Jetpack Compose ที่เปิดแชทซัพพอร์ต Respondo เป็น bottom sheet ทับบนแอปของคุณ
ข้อกำหนด#
minSdk24 (Android 7.0), compileSdk 35- Kotlin 2.x และ Jetpack Compose (SDK มาพร้อม Compose UI)
- JVM target 17
SDK ดึง dependency ทางอ้อมของตนเอง (Coroutines, kotlinx.serialization, OkHttp, Coil, Compose) และประกาศสิทธิ์ INTERNET ไว้ใน manifest ของตนเอง — ไม่ต้องเพิ่มด้วยมือ
การติดตั้ง#
ไลบรารีเผยแพร่ไปที่ Maven Central ในชื่อ ai.respondo:respondo-sdk. ตรวจสอบให้แน่ใจว่ามี mavenCentral()อยู่ใน repository ของคุณ (โดยค่าเริ่มต้นจะมีอยู่แล้วในโปรเจกต์ Android ใหม่) จากนั้นเพิ่ม dependency ตาม coordinate
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}dependencies {
implementation("ai.respondo:respondo-sdk:0.1.0")
}เริ่มต้นใช้งาน#
เรียก Respondo.init หนึ่งครั้ง, mount RespondoChatHost() หนึ่งครั้งใน Compose tree ของคุณ แล้วเปิดแชทจากปุ่มของคุณเอง
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() // SDK แสดง sheet เมื่อสถานะแชทเป็น OPEN
}
}
}
}
}การเรียกทั้งหมดผ่าน singleton Respondo ซึ่งเป็น idempotent, ปลอดภัยจากทุก thread และการเรียกก่อนที่ init จะเสร็จจะถูกบัฟเฟอร์ไว้และเล่นซ้ำ
การระบุตัวตนผู้ใช้#
โดยค่าเริ่มต้นผู้เข้าชมทุกคนเป็นนิรนาม เมื่อเปิดครั้งแรก SDK จะสร้าง visitor_id ที่เสถียรและเก็บไว้ในที่จัดเก็บภายในเครื่อง ดังนั้นผู้ใช้ที่กลับมาจะพบบทสนทนาของตนอีกครั้ง ไม่มี API key ให้ฝัง — แต่ละบทสนทนาถูกปกป้องด้วย session token ต่อบทสนทนา ที่ backend สร้างขึ้นและเลื่อนไปข้างหน้าในทุกข้อความ ดังนั้นผู้เข้าชมนิรนามไม่ต้องยืนยันตัวตนใหม่
เรียก identify เมื่อผู้ใช้ของคุณล็อกอินแล้ว การกระทำนี้จะแนบตัวตนจริงของพวกเขา เพื่อให้ประวัติติดตามไปกับ พวกเขาข้ามอุปกรณ์และการติดตั้งใหม่ และชื่อกับอีเมลของพวกเขาจะปรากฏถัดจากบทสนทนาในกล่องข้อความ ของคุณแทนที่จะเป็นผู้เข้าชมนิรนาม
userHash คือลายเซ็นที่ backend ของคุณ คำนวณจาก identity_secret ของเอเจนต์ — HMAC-SHA256(secret, userId) (หรืออีเมลเมื่อไม่มี userId) เข้ารหัสเป็น hex ตัวพิมพ์เล็ก secret เป็นเครื่องพิสูจน์ว่าตัวตนนั้นเป็นของจริง จึงต้องอยู่บน backend ของคุณเท่านั้น และต้องไม่ถูกส่งไปในแอปเด็ดขาด ดูหน้า การยืนยันตัวตนสำหรับสูตรเต็มและตัวอย่างฝั่งเซิร์ฟเวอร์
import ai.respondo.sdk.RespondoIdentity
// userHash มาจาก backend ของคุณ (HMAC-SHA256 บน userId) —
// อย่าคำนวณมันในแอป
Respondo.identify(
RespondoIdentity(
userId = session.userId,
email = session.email,
name = session.fullName,
userHash = session.respondoUserHash,
),
)
// เมื่อออกจากระบบ: ทิ้ง push token, เพิกถอน session, เริ่มผู้เข้าชมนิรนามใหม่
Respondo.clearPushToken()
Respondo.reset()หากไม่มี hash หรือ hash ผิด จะไม่มีการโยน exception ใด ๆ: backend จะเก็บผู้เข้าชมให้เป็นนิรนามอย่างเงียบ ๆ แชทยังทำงานต่อไป และคุณเพียงเสียลิงก์ข้ามอุปกรณ์ จนกว่าจะมีการส่ง hash ที่ถูกต้องมา การยืนยันจะทำงานก็ต่อเมื่อเอเจนต์มี identity_secret ตั้งไว้ — ปล่อยว่างไว้ระหว่างการพัฒนา แล้ว userId / อีเมล จะถูกยอมรับตามที่เป็น
Observable และ callback#
อ่านสถานะแบบ reactive ในรูป StateFlow (เหมาะกับ Compose) หรือแบบ imperative ผ่าน RespondoListener (เหมาะกับ badge บนไอคอนแอป)
// Reactive: จำนวนที่ยังไม่อ่านเป็น StateFlow
val unread by Respondo.unreadCount.collectAsState()
// Imperative: listener สำหรับ badge และ analytics
Respondo.setListener(object : RespondoListener {
override fun onUnreadChanged(count: Int) { updateAppIconBadge(count) }
override fun onUrlRequested(url: String): Boolean = tryOpenInternally(url)
})การติดตามหน้าจอ#
รายงานหน้าจอปัจจุบันในทุกการนำทาง เพื่อให้ teaser เชิงรุกและการกำหนดเป้าหมายระดับหน้าจับคู่กับมันได้ ส่ง null เพื่อล้างค่า; ในแต่ละการเปลี่ยนแปลง teaser เชิงรุกจะถูกประเมินใหม่สำหรับหน้าจอใหม่
Respondo.setCurrentScreen("pricing")ขั้นตอนถัดไป#
ตั้งค่า พุชการแจ้งเตือนสำหรับคำตอบของเจ้าหน้าที่ขณะออฟไลน์ และ การยืนยันตัวตนสำหรับผู้ใช้ที่ล็อกอินแล้ว ผิวสัมผัส API เต็มรูปแบบ, Fragment wrapper สำหรับ host แบบ XML และการแก้ปัญหา ครอบคลุมอยู่ในคู่มือเริ่มต้นใช้งาน Android SDK; ซอร์สของ SDK เปิดเป็นสาธารณะบน GitHub