目录

实时消息回调

实时消息回调,即IM服务器会在事件发生之前或之后,向客户的应用服务器发送请求,应用服务器可以据此进行必要的数据同步(发送后回调),或者根据业务需求干预事件的后续处理流程(发送前回调)。

回调分类

从处理角度看,回调分为以下两类:

1、发送前回调

使用场景

应用服务器可以通过发送前回调实时监控用户的聊天消息,包括:

回调发生时机

IM 服务器收到用户发送的单聊消息之后、将该消息下发给目标用户之前。

功能说明

以下是发送前回调功能说明,在高并发可用性的基础上的使用限制说明,请按照此限制正确使用回调。

开通规则配置

配置说明类型是否可选key默认值
回调地址stringtargetUrl回调 URL
超时时间inttimeout默认200,单位为毫秒
降级默认行为intdefaultAction0: 通过 1: 拒绝
渠道stringinterested[“groupchat”, “chat”, “chatroom”]
消息类型stringmsgTypes“all”: 全部聊天消息, [“TEXT”, “FILE”]

规则说明:

  1. 规则可以有多条,每个规则的名称必须是唯一的。
  2. IM服务器回调应用服务器的超时时间默认为200ms,支持自定义“超时时间”。如果回调超时无应答,消息默认会正常下发,支持在修改处理逻辑。
  3. 消息类型目前包括,“TEXT”,“IMAGE”, “VIDEO”,“LOCATION”,“VOICE”,“FILE”。

接口参数说明

采用 POST 方式,正文部分为 JSON 格式的字符串,字符集为 UTF-8。

Request Body

名称类型
callId每个回调的ID都不一样
timestamp环信接收到此消息的时间戳
chat_type“chat”单聊回调、“groupchat”群聊回调包含了群组和聊天室的消息回调,默认全选
group_id群聊时才有此参数,回调消息所在的群组
from消息的发送方
to消息的接收方
msg_id消息的 ID
payload消息内容,与通过REST API发送过来的一致,查看消息格式文档
security签名。格式如下: MD5(callId+密钥+timestamp)。

请求示例

{
    "callId":"",
    "eventType":"chat_offline",
    "timestamp":0,
    "chat_type":"groupchat", 
    "group_id":'',
    "from":"",
    "to":"",
    "msg_id":"",
    "payload":{
    // 具体的消息内容
    },
    "securityVersion":"",
    "security":""
}

应答包字段说明

Response Body 在返回值中查看data字段包含的信息

参数说明
valid 消息是否合法

返回的结果示例:

{
	valid: true
}

2、发送后回调

使用场景

发送后回调经常用在App后台需要实现必要的数据同步的场景。比如:

注:如果您对聊天消息没有实时性需求,可以直接通过免费的聊天记录拉取 REST API 获取聊天记录,无需使用发送后回调。

功能说明

以下是发送后回调功能说明,在高并发可用性的基础上的使用限制说明,请按照此限制正确使用回调。

开通规则配置

APPKEY 可以配置回调规则的数据格式,可以配置多个回调规则(默认最多开通2个规则),开通服务后才允许用户配置,前往Console后台配置

环信对回调地址http,https均支持。

参数说明
规则名称填写唯一的规则名称(不能用中文)
消息类型需要回调的类型,目前有两种消息类型可以回调(chat为上行消息;chat_offline为离线消息,可以同时选择)
回调地址 环信会把消息推送到填写的URL地址上,可以针对不同类型的消息配置不同的回调地址。
密钥(可选)默认情况下,环信发给 URL(也就是您自己服务器的)的数据,签名时使用的密钥是环信生成的,Console后台可查看。如果您想提供自己的密钥用来替换默认的,可以联系商务沟通

chat 上行消息

这个消息跟通过 REST 导出聊天记录查询到的消息一致。比如:一个用户(u1)给另一个用户(u2)发送消息,那么就会产生一条 chat 消息,与接收方是否在线无关。接收到的消息里面 from 为 u1,to 为 u2。一个用户(u1)给一个群(g1)发送消息,那么会产生一条 chat 消息,接收到的消息里面 from 为 u1,to 为 g1,且返回值包含 group_id 字段。

chat_offline 离线消息

APP 可以根据这个消息做 APNS 推送等个性化的推广。例如:给一个用户发送消息,如果用户不在线,那么会产生一条离线消息。如果给一个群发送消息,那么群里有几个用户不在线,就会产生几条离线消息,那么这几条离线消息的to为接收消息用户的id,并不是群组id。

chat_type的选择

接口参数说明

目前支持 HTTP/HTTPS 方式的回调,采用 POST 方式,正文部分为 JSON 格式的字符串,字符集为 UTF-8。

回调时,会对发送的正文做 MD5 签名。环信这边 MD5 使用的是org.apache.commons.codec.digest.DigestUtils#md5Hex

APP 的响应内容不能超过1000个字符。

回调消息的参数说明

参数说明
callId每个回调的ID都不一样
eventType必填。“chat“上行消息、“chat_offline”离线消息,可以都选择
timestamp环信接收到此消息的时间戳
chat_type“chat”单聊回调、“groupchat”群聊回调包含了群组和聊天室的消息回调,默认全选
group_id群聊时才有此参数,回调消息所在的群组
from消息的发送方
to消息的接收方
msg_id消息的 ID
payload消息内容,与通过REST API发送过来的一致,查看消息格式文档
securityVersion安全校验版本,目前为1.0.0。忽略此参数,以后会改成Console后台做设置
security签名。格式如下: MD5(callId+密钥+timestamp)。

回调成功返回的示例

{
    "callId":"",
    "eventType":"chat_offline",
    "timestamp":0,
    "chat_type":"groupchat", 
    "group_id":'',
    "from":"",
    "to":"",
    "msg_id":"",
    "payload":{
    // 具体的消息内容
    },
    "securityVersion":"",
    "security":""
}

Payload 数据格式说明

应答包字段说明

环信不验证回调响应的response内容,只要您服务器给我们返回http状态码是200即可。