Skip to content

监听会话事件 ​

客服回了一条消息、对话结束了、连接断了 —— 这些时刻你想让 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:incomingonIncomingMessage对方发来消息,可做震动或应用内提示
messageonMessage任意消息,包括客户自己发出的
conversation:startonConversationStart新对话创建,适合埋点
conversation:endonConversationEnd客服关闭对话,或超时归档
network:online / offlineonNetworkChanged连接断开或恢复,可用来提示「连接中断」

具名回调 onNetworkChanged 把两个事件名合并成了一个带布尔参数的方法,接通用回调时要分别处理这两个名字。

iOS 的具名回调是同名的代理方法,签名见接口速查。

事件名和网页接入完全一致,两端接入时的判断逻辑可以共用一套。

未读数不在这套事件里,它有单独的接口,见未读消息与红点。

下一步 ​