Webhook 回调
概述
WuKongIM 的一些数据将通过 webhook 的形式回调给第三方应用服务,比如用户在线状态,需要推送的消息,所有消息等等。所有 webhook 都是 POST 请求,事件名通过 query 参数传入。 例如,第三方的服务器提供的 webhook 地址为http://example.com/webhook,那么在线状态的 webhook 为:
Webhook 工作流程

事件类型
1. 用户在线状态通知
每个用户的上线和下线都会通过此 webhook 通知给第三方服务器。 事件名:user.onlinestatus
请求方式:POST
请求 URL:{webhook_url}?event=user.onlinestatus
请求体
请求体是一个字符串数组,每个元素格式为:数据字段说明
| 位置 | 字段名 | 类型 | 说明 |
|---|---|---|---|
| 1 | 用户UID | string | 用户唯一标识符 |
| 2 | 设备标识 | integer | 0=APP, 1=Web端 |
| 3 | 在线状态 | integer | 0=离线, 1=在线 |
| 4 | 连接ID | integer | 当前设备在服务器的建立连接的ID |
| 5 | 设备在线数量 | integer | 同一用户同一设备类型的在线数量 |
| 6 | 用户总在线数量 | integer | 用户所有设备的在线数量 |
2. 离线消息通知
离线消息通知主要是将需要通过离线推送的消息通知给第三方服务器,第三方服务器收到此 webhook 后需要将此消息内容调用手机厂商推送接口,将消息推给 ToUIDs 列表的用户。 事件名:msg.offline
请求方式:POST
请求 URL:{webhook_url}?event=msg.offline
请求体
请求体是一个 MessageResp 消息对象:消息头部信息
消息设置标识
服务端的消息ID(全局唯一)
字符串类型服务端的消息ID(全局唯一)
客户端消息唯一编号
消息序列号(频道唯一,有序递增)
发送者UID
频道ID
频道类型
服务器消息时间戳(10位,到秒)
Base64编码的消息内容
3. 所有消息通知
WuKongIM 服务端会将所有消息推送给第三方服务器。为了降低第三方服务器的压力,并不是一条一条推送,做了延迟处理,默认是 500 毫秒(webhook.msgNotifyEventPushInterval)批量推送一次,这个可自己视情况配置。
事件名:msg.notify
请求方式:POST
请求 URL:{webhook_url}?event=msg.notify
请求体
请求体是一个 MessageResp 消息对象数组,每个消息对象包含以下字段:消息头部信息
消息设置标识
服务端的消息ID(全局唯一)
字符串类型服务端的消息ID(全局唯一)
客户端消息唯一编号
消息序列号(频道唯一,有序递增)
发送者UID
频道ID
频道类型
服务器消息时间戳(10位,到秒)
Base64编码的消息内容
配置 Webhook
在 WuKongIM 配置文件中设置 webhook URL:最佳实践
- 响应速度:webhook 处理应该尽可能快,避免阻塞 WuKongIM 服务
- 幂等性:确保 webhook 处理是幂等的,可以安全地重试
- 错误处理:返回适当的 HTTP 状态码,2xx 表示成功
- 异步处理:对于复杂的业务逻辑,建议异步处理
- 监控告警:监控 webhook 的成功率和响应时间
- 安全验证:验证请求来源,防止恶意请求
故障排除
常见问题
- Webhook 未收到:检查 URL 配置和网络连通性
- 处理超时:优化处理逻辑,减少响应时间
- 重复处理:实现幂等性处理机制
- 消息丢失:确保返回正确的 HTTP 状态码

