Appearance
监听会话事件
客服回了一条消息、对话结束了、连接断了 —— 这些时刻你想让 APP 做点什么,接事件回调。
两种接法,选一种
通用回调收所有事件,按事件名分发:
kotlin
// Android
override fun onEvent(name: String, payload: JSONObject?) {
when (name) {
"message:incoming" -> vibrate()
"conversation:start" -> track("发起咨询")
}
}swift
// iOS
func hecongChat(didReceiveEvent name: String, payload: [String: Any]?) {
// 同上
}具名回调每个事件一个方法,参数有类型,不用自己解析:
kotlin
override fun onIncomingMessage(msg: HecongMessage) { vibrate() }两种接法不要同时用
同一个事件两边都接的话,你的代码会被执行两次。挑一种接法用到底。
推荐接通用回调
具名回调写起来更顺手,但有一个代价:合从以后新增的会话事件,具名回调收不到,要等 SDK 出新版本、你升级依赖、你的 APP 发版、用户更新 APP。这条链路走完通常要几个月。
通用回调按事件名分发,新事件到了就直接能收到,中间这几步全都省了。新增的事件名在这一页更新,你加一个 case 就行。
可以监听哪些事件
| 事件名 | 具名回调(Android) | 什么时候触发 |
|---|---|---|
message:incoming | onIncomingMessage | 对方发来消息,可做震动或应用内提示 |
message | onMessage | 任意消息,包括客户自己发出的 |
conversation:start | onConversationStart | 新对话创建,适合埋点 |
conversation:end | onConversationEnd | 客服关闭对话,或超时归档 |
network:online / offline | onNetworkChanged | 连接断开或恢复,可用来提示「连接中断」 |
具名回调 onNetworkChanged 把两个事件名合并成了一个带布尔参数的方法,接通用回调时要分别处理这两个名字。
iOS 的具名回调是同名的代理方法,签名见接口速查。
事件名和网页接入完全一致,两端接入时的判断逻辑可以共用一套。
未读数不在这套事件里,它有单独的接口,见未读消息与红点。