Android SDK
Kotlin ਅਤੇ Jetpack Compose ਉੱਤੇ ਬਣਿਆ ਹਲਕਾ ਕਲਾਇੰਟ, ਜੋ Respondo ਦੀ ਸਹਾਇਤਾ ਚੈਟ ਨੂੰ ਤੁਹਾਡੀ ਐਪ ਉੱਤੇ ਬੌਟਮ ਸ਼ੀਟ ਵਜੋਂ ਖੋਲ੍ਹਦਾ ਹੈ।
ਲੋੜਾਂ#
minSdk24 (Android 7.0), compileSdk 35.- Kotlin 2.x ਅਤੇ Jetpack Compose (SDK ਆਪਣੇ ਨਾਲ Compose UI ਲਿਆਉਂਦਾ ਹੈ)।
- JVM target 17.
SDK ਆਪਣੀਆਂ ਟਰਾਂਜ਼ਿਟਿਵ ਨਿਰਭਰਤਾਵਾਂ (Coroutines, kotlinx.serialization, OkHttp, Coil, Compose) ਆਪ ਹੀ ਲੈ ਆਉਂਦਾ ਹੈ ਅਤੇ ਆਪਣੇ ਮੈਨੀਫ਼ੈਸਟ ਵਿੱਚ INTERNET ਇਜਾਜ਼ਤ ਦਾ ਐਲਾਨ ਕਰਦਾ ਹੈ — ਹੱਥੀਂ ਕੁਝ ਵੀ ਜੋੜਨ ਦੀ ਲੋੜ ਨਹੀਂ।
ਇੰਸਟਾਲੇਸ਼ਨ#
ਇਹ ਲਾਇਬ੍ਰੇਰੀ Maven Central ਉੱਤੇ ai.respondo:respondo-sdk ਵਜੋਂ ਪ੍ਰਕਾਸ਼ਿਤ ਹੈ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੀਆਂ ਰਿਪੋਜ਼ਟਰੀਆਂ ਵਿੱਚ mavenCentral() ਮੌਜੂਦ ਹੋਵੇ (ਨਵੇਂ Android ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਇਹ ਮੂਲ ਰੂਪ ਵਿੱਚ ਹੁੰਦੀ ਹੈ), ਫਿਰ ਕੋਆਰਡੀਨੇਟ ਰਾਹੀਂ ਨਿਰਭਰਤਾ ਜੋੜੋ।
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}dependencies {
implementation("ai.respondo:respondo-sdk:0.1.0")
}ਸ਼ੁਰੂਆਤੀ ਸੈੱਟਅੱਪ#
ਇੱਕ ਵਾਰ Respondo.init ਸੱਦੋ, ਆਪਣੇ Compose ਟ੍ਰੀ ਵਿੱਚ ਇੱਕ ਵਾਰ RespondoChatHost() ਮਾਊਂਟ ਕਰੋ, ਅਤੇ ਚੈਟ ਆਪਣੇ ਬਟਨ ਤੋਂ ਖੋਲ੍ਹੋ।
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() // ਚੈਟ ਦੀ ਸਥਿਤੀ OPEN ਹੋਣ ਉੱਤੇ SDK ਸ਼ੀਟ ਦਿਖਾਉਂਦਾ ਹੈ
}
}
}
}
}ਸਾਰੀਆਂ ਕਾਲਾਂ Respondo ਸਿੰਗਲਟਨ ਰਾਹੀਂ ਜਾਂਦੀਆਂ ਹਨ। ਇਹ ਆਈਡੈਮਪੋਟੈਂਟ ਹਨ, ਕਿਸੇ ਵੀ ਥ੍ਰੈੱਡ ਤੋਂ ਸੁਰੱਖਿਅਤ ਹਨ, ਅਤੇ init ਪੂਰਾ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਕੀਤੀਆਂ ਕਾਲਾਂ ਬਫ਼ਰ ਹੋ ਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਚਲਾਈਆਂ ਜਾਂਦੀਆਂ ਹਨ।
ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਪਛਾਣ#
ਮੂਲ ਰੂਪ ਵਿੱਚ ਹਰ ਵਿਜ਼ਿਟਰ ਗੁਮਨਾਮ ਹੁੰਦਾ ਹੈ। ਪਹਿਲੀ ਵਾਰ ਚੱਲਣ ਉੱਤੇ SDK ਇੱਕ ਸਥਿਰ visitor_id ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਉਸ ਨੂੰ ਲੋਕਲ ਸਟੋਰੇਜ ਵਿੱਚ ਸਾਂਭ ਲੈਂਦਾ ਹੈ, ਇਸ ਲਈ ਵਾਪਸ ਆਉਣ ਵਾਲੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਆਪਣੀ ਗੱਲਬਾਤ ਦੁਬਾਰਾ ਮਿਲ ਜਾਂਦੀ ਹੈ। ਕੋਈ API ਕੁੰਜੀ ਜੋੜਨ ਦੀ ਲੋੜ ਨਹੀਂ — ਹਰ ਗੱਲਬਾਤ ਆਪਣੇ ਵੱਖਰੇ ਸੈਸ਼ਨ ਟੋਕਨ ਨਾਲ ਸੁਰੱਖਿਅਤ ਹੁੰਦੀ ਹੈ, ਜਿਸ ਨੂੰ backend ਜਾਰੀ ਕਰਦਾ ਹੈ ਅਤੇ ਹਰ ਸੁਨੇਹੇ ਉੱਤੇ ਅੱਗੇ ਸਰਕਾ ਦਿੰਦਾ ਹੈ, ਸੋ ਗੁਮਨਾਮ ਵਿਜ਼ਿਟਰ ਨੂੰ ਕਦੇ ਦੁਬਾਰਾ ਪ੍ਰਮਾਣੀਕਰਨ ਨਹੀਂ ਕਰਨਾ ਪੈਂਦਾ।
ਜਿਵੇਂ ਹੀ ਤੁਹਾਡਾ ਵਰਤੋਂਕਾਰ ਲੌਗ-ਇਨ ਕਰ ਲਵੇ, identify ਸੱਦੋ। ਇਸ ਨਾਲ ਉਸ ਦੀ ਅਸਲ ਪਛਾਣ ਜੁੜ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਜੋ ਉਸ ਦਾ ਇਤਿਹਾਸ ਵੱਖ-ਵੱਖ ਡਿਵਾਈਸਾਂ ਅਤੇ ਮੁੜ-ਇੰਸਟਾਲ ਕਰਨ ਦੇ ਬਾਵਜੂਦ ਉਸ ਦੇ ਨਾਲ ਚੱਲੇ, ਅਤੇ ਤੁਹਾਡੇ ਇਨਬਾਕਸ ਵਿੱਚ ਗੱਲਬਾਤ ਦੇ ਨਾਲ ਗੁਮਨਾਮ ਵਿਜ਼ਿਟਰ ਦੀ ਥਾਂ ਉਸ ਦਾ ਨਾਂ ਅਤੇ email ਦਿਸਣ।
userHash ਇੱਕ ਦਸਤਖ਼ਤ ਹੈ, ਜਿਸ ਨੂੰ ਤੁਹਾਡਾ backend ਏਜੰਟ ਦੇ identity_secret ਤੋਂ ਕੱਢਦਾ ਹੈ — HMAC-SHA256(secret, userId) (ਜਾਂ ਜਦੋਂ userId ਨਾ ਹੋਵੇ ਤਾਂ email ਉੱਤੇ), ਅਤੇ ਨਤੀਜਾ ਛੋਟੇ ਅੱਖਰਾਂ ਵਾਲੇ hex ਵਿੱਚ ਹੁੰਦਾ ਹੈ। ਗੁਪਤ ਕੁੰਜੀ ਹੀ ਸਾਬਤ ਕਰਦੀ ਹੈ ਕਿ ਪਛਾਣ ਅਸਲੀ ਹੈ, ਇਸ ਲਈ ਇਹ ਸਿਰਫ਼ ਤੁਹਾਡੇ backend ਉੱਤੇ ਰਹਿਣੀ ਚਾਹੀਦੀ ਹੈ ਅਤੇ ਕਦੇ ਵੀ ਐਪ ਵਿੱਚ ਨਹੀਂ ਭੇਜੀ ਜਾਂਦੀ। ਪੂਰਾ ਫ਼ਾਰਮੂਲਾ ਅਤੇ ਸਰਵਰ ਵਾਲੀਆਂ ਉਦਾਹਰਨਾਂ ਲਈ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਪੰਨਾ ਵੇਖੋ।
import ai.respondo.sdk.RespondoIdentity
// userHash ਤੁਹਾਡੇ backend ਤੋਂ ਆਉਂਦਾ ਹੈ (userId ਉੱਤੇ HMAC-SHA256) —
// ਇਸ ਨੂੰ ਕਦੇ ਵੀ ਐਪ ਵਿੱਚ ਨਾ ਬਣਾਓ।
Respondo.identify(
RespondoIdentity(
userId = session.userId,
email = session.email,
name = session.fullName,
userHash = session.respondoUserHash,
),
)
// ਲੌਗਆਊਟ ਉੱਤੇ: ਪੁਸ਼ ਟੋਕਨ ਹਟਾਓ, ਸੈਸ਼ਨ ਰੱਦ ਕਰੋ, ਨਵਾਂ ਗੁਮਨਾਮ ਵਿਜ਼ਿਟਰ ਸ਼ੁਰੂ ਕਰੋ।
Respondo.clearPushToken()
Respondo.reset()ਜੇ ਹੈਸ਼ ਗ਼ੈਰ-ਮੌਜੂਦ ਜਾਂ ਗ਼ਲਤ ਹੋਵੇ ਤਾਂ ਕੁਝ ਵੀ ਟੁੱਟਦਾ ਨਹੀਂ: backend ਚੁੱਪਚਾਪ ਵਿਜ਼ਿਟਰ ਨੂੰ ਗੁਮਨਾਮ ਹੀ ਰੱਖਦਾ ਹੈ, ਚੈਟ ਚੱਲਦੀ ਰਹਿੰਦੀ ਹੈ, ਅਤੇ ਸਹੀ ਹੈਸ਼ ਮਿਲਣ ਤੱਕ ਤੁਸੀਂ ਸਿਰਫ਼ ਡਿਵਾਈਸਾਂ ਵਿਚਕਾਰਲਾ ਜੋੜ ਗੁਆ ਬੈਠਦੇ ਹੋ। ਪੁਸ਼ਟੀ ਸਿਰਫ਼ ਉਦੋਂ ਚੱਲਦੀ ਹੈ ਜਦੋਂ ਏਜੰਟ ਲਈ identity_secret ਸੈੱਟ ਹੋਵੇ — ਵਿਕਾਸ ਦੌਰਾਨ ਇਸ ਨੂੰ ਖਾਲੀ ਛੱਡੋ, ਫਿਰ userId / email ਜਿਵੇਂ ਦੇ ਤਿਵੇਂ ਮੰਨ ਲਏ ਜਾਂਦੇ ਹਨ।
ਆਬਜ਼ਰਵੇਬਲ ਤੇ ਕਾਲਬੈਕ#
ਸਥਿਤੀ ਨੂੰ ਰੀਐਕਟਿਵ ਢੰਗ ਨਾਲ StateFlow ਵਜੋਂ ਪੜ੍ਹੋ (Compose ਲਈ ਵਧੀਆ) ਜਾਂ RespondoListener ਰਾਹੀਂ ਇੰਪੈਰੇਟਿਵ ਢੰਗ ਨਾਲ (ਐਪ-ਆਈਕਨ ਬੈਜ ਲਈ ਵਧੀਆ)।
// ਰੀਐਕਟਿਵ: ਨਾ-ਪੜ੍ਹੇ ਸੁਨੇਹਿਆਂ ਦੀ ਗਿਣਤੀ StateFlow ਵਜੋਂ।
val unread by Respondo.unreadCount.collectAsState()
// ਇੰਪੈਰੇਟਿਵ: ਬੈਜਾਂ ਅਤੇ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ listener।
Respondo.setListener(object : RespondoListener {
override fun onUnreadChanged(count: Int) { updateAppIconBadge(count) }
override fun onUrlRequested(url: String): Boolean = tryOpenInternally(url)
})ਸਕਰੀਨ ਟਰੈਕਿੰਗ#
ਹਰ ਨੈਵੀਗੇਸ਼ਨ ਉੱਤੇ ਮੌਜੂਦਾ ਸਕਰੀਨ ਦੀ ਸੂਚਨਾ ਦਿਓ, ਤਾਂ ਜੋ ਪਹਿਲ ਕਰਨ ਵਾਲੇ ਟੀਜ਼ਰ ਅਤੇ ਪੰਨਾ-ਪੱਧਰੀ ਟਾਰਗੇਟਿੰਗ ਇਸ ਨਾਲ ਮੇਲ ਕਰ ਸਕਣ। ਖ਼ਾਲੀ ਕਰਨ ਲਈ null ਭੇਜੋ; ਹਰ ਬਦਲਾਅ ਉੱਤੇ ਨਵੀਂ ਸਕਰੀਨ ਲਈ ਪਹਿਲ ਕਰਨ ਵਾਲਾ ਟੀਜ਼ਰ ਮੁੜ ਪਰਖਿਆ ਜਾਂਦਾ ਹੈ।
Respondo.setCurrentScreen("pricing")ਅੱਗੇ ਦੇ ਕਦਮ#
ਸਹਾਇਤਾ ਕਰਮੀਆਂ ਦੇ ਆਫ਼ਲਾਈਨ ਜਵਾਬਾਂ ਲਈ ਪੁਸ਼ ਸੂਚਨਾਵਾਂ ਅਤੇ ਲੌਗ-ਇਨ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਸੈੱਟ ਕਰੋ। ਪੂਰਾ API, XML ਹੋਸਟਾਂ ਲਈ Fragment ਰੈਪਰ ਅਤੇ ਸਮੱਸਿਆ-ਨਿਵਾਰਨ Android SDK ਦੀ ਸ਼ੁਰੂਆਤੀ ਗਾਈਡ ਵਿੱਚ ਦਿੱਤੇ ਹਨ; SDK ਦੇ ਸਰੋਤ GitHub ਉੱਤੇ ਜਨਤਕ ਹਨ।