发送消息

大约 9 分钟

发送消息

单聊、群聊、聊天室中发消息回调的公共参数如下表所示:

参数类型描述
callIdStringcallId 为每个回调请求的唯一标识,格式为 “App Key_发送的消息的 ID”。
eventTypeString“chat” 上行消息、“chat_offline” 离线消息。
timestamplong环信 IM 服务器接收到此消息的 Unix 时间戳,单位为毫秒。
chat_typeString会话类型(默认全选):
- "chat":单聊回调;
- "groupchat":群聊回调包含了群组和聊天室的消息回调;
- "notify":通知回调包含了 Thread 和 Reaction 的回调,需要结合 payload 中的 type 字段确定具体类型。
group_idStringchat_typegroupchat 有此参数,表示回调消息所在的群组或聊天室。
fromString消息的发送方。
toString消息的接收方。
msg_idString发送的消息 ID。
payloadobject事件内容,与通过 REST API 发送过来的一致,查看 历史消息内容
securityVersionString安全校验版本,目前为 1.0.0。忽略此参数,以后会改成 Console 后台做设置。
securityString签名,格式如下: MD5(callId+secret+timestamp)。 Secret 见 Console 后台回调规则。
appkeyString你在环信管理后台注册的应用唯一标识。
hostString服务器名称。
content_typeString消息类型:
- chat:user:*:单聊消息
- chat:group:*:群组消息
- chat:room:*:聊天室消息
文本、图片、音视频等消息对应的参数值,详见发送单聊消息发送群组消息发送聊天室消息章节。

发送单聊消息

本节展示发送各类消息后,环信服务器向你的 App Server 发送的回调请求的包体示例。

content_typepayload 中类型触发事件
chat:user:*-单聊中发送任何类型的消息
chat:user:text{“bodies”:{“type”:“txt”}}单聊中发送文本消息
chat:user:image{“bodies”:{“type”:“img”}}单聊中发送图片消息
chat:user:voice{“bodies”:{“type”:“audio”}}单聊中发送语音消息
chat:user:location{“bodies”:{“type”:“loc”}}单聊中发送位置消息
chat:user:video{“bodies”:{“type”:“video”}}单聊中发送视频消息
chat:user:file{“bodies”:{“type”:“file”}}单聊中发送文件消息
chat:user:command{“bodies”:{“type”:“cmd”}}单聊中发送命令消息
chat:user:custom{“bodies”:{“type”:“custom”}}单聊中发送自定义消息
chat:user:txt{“bodies”:{“type”:“txt”,“subType”:“sub_combine”}}单聊中发送合并消息
chat:user:unknown{“bodies”:{“type”:“unknown”}}单聊中发送未知消息

文本和命令消息

下面的示例以文本消息为例展示回调请求中 payload:

字段数据类型描述
extobject消息扩展字段。
bodiesobject该回调的主体内容,包含以下两个字段 msgtype
msgString消息内容。
typeString消息类型:
- 文本消息:txt
- 命令消息:cmd
"payload":{
    "ext":{},
    "bodies":[{"msg":"rr","type":"txt"}]
}

图片消息

字段类型描述
extJson消息扩展字段。
bodiesobject该回调的主体内容,包含以下六个字段 filenamesecretfile_lengthsizeurltype
filenameString图片名称。
secretString成功上传文件后返回的 secret
file_lengthInt图片文件大小(单位:字节)。
sizeJson图片尺寸:height:高度,width:宽度。
urlString域名 /orgname/appname/chatfiles/ 成功上传文件返回的 UUID。参考请求示例。
typeString消息类型:img

回调请求的包体示例:

"payload":{
    "ext":{},
    "bodies":[{
        "filename":"image",
        "size":{"width":746,"height":1325},
        "secret":"EsYYqnkREeyZAUHNhFQyIhTJxWxvGOwyx1",
        "file_length":118179,
        "type":"img",
        "url":"https://XXXX.com/"
    }]
}

语音消息

字段类型描述
extJSON消息扩展字段。
filenameString文件名称。
secretString成功上传文件后返回的 secret。
file_lengthLong语音文件大小(单位:字节)。
LengthInt语音时间(单位:秒)。
urlString域名 /org_name/app_name/chatfiles/ 成功上传文件返回的 UUID。
typeString消息类型:audio

回调请求的包体示例:

"payload":{
    "ext":{},
    "bodies":[{
        "filename":"audio",
        "length":4,
        "secret":"anmSynkREey91e0Ksmmt2Ym6AzpRr9SxsUpF",
        "file_length":6374,
        "type":"audio",
        "url":"https://XXXX.com/"
    }]
}

视频消息

字段类型描述
extJSON消息扩展字段。
bodiesobject该回调的主体内容,包含以下字段 thumb_secretthumbfilenamesecretfile_lengthsizeurltype
thumb_secretString成功上传视频缩略图后返回的 secret。
filenameString文件名称。
sizeJSON缩略图图片尺寸:height:高度,width:宽度。
thumbString成功上传视频缩略图返回的 UUID。
secretString成功上传视频文件后返回的 secret。
lengthInt视频播放长度。
file_lengthLong视频文件大小,单位为字节。
typeString消息类型:video
urlString视频文件的 URL 地址,格式为 https://{host}/{org_name}/{app_name}/chatfiles/{file_uuid},其中 file_uuid 为视频文件 ID。成功上传视频文件后,从文件上传的响应 body 中获取。

回调请求的包体示例:

"payload":{
    "ext":{},
    "bodies":[{
        "thumb_secret":"t1AECnqLEeyS81-d10_HOpjSZc8TD-ud40pFCkOStQrr7Mbc",
        "filename":"video.mp4",
        "size":{
          "width":360,
          "height":480},
        "thumb":"https://XXXX.com/XXXX/XXXX/chatfiles/b7500400-7a8b-11ec-8d83-7106bf6633e6",
        "length":10,
        "secret":"uFtZgHqLEeycBfuoalZCJPD7PVcoOu_RHTRa78bjU_KQAPr2",
        "file_length":601404,
        "type":"video",
        "url":"https://XXXX.com/XXXX/XXXX/chatfiles/b85b3270-7a8b-11ec-9735-6922a85eb891"
    }]
}

位置消息

字段类型描述
latString纬度。
typeString消息类型。位置消息为 loc
lngString经度。
addrString位置的文字描述。

回调请求的包体示例:

"payload":{
    "ext":{},
    "bodies":[{
        "lng":116.32309156766605,
        "type":"loc",
        "addr":"********",
        "lat":39.96612729238626
    }]
}

自定义消息

参数类型描述
customEventString用户自定义的事件类型,必须是 String,值必须满足正则表达式。 [a-zA-Z0-9-_/.]{1,32},最短 1 个字符 最长 32 个字符。
customExts/v2:customExtsArray/JSON用户自定义的事件属性。该参数为可选,不需要可以不传。
- customExts 为旧版参数,数组类型,最多可包含 16 个元素。
- v2:customExts 为新版参数,Map<String,String> 类型,最多可以包含 16 个元素。推荐使用该新版参数。
fromString表示消息发送者;无此字段 Server 会默认设置为 “from”:“admin”,有 from 字段但值为空串 (“”) 时请求失败。
extJSON扩展属性,支持 app 自定义内容。可以没有这个字段;但是如果有,值不能是 “ext:null” 这种形式,否则会发生错误。

回调请求的包体示例:

"payload": {
    "ext": {}, 
    "bodies": [{ 
        "customExts": [ {"name": 1 } ],
        "v2:customExts":{"k":"v","k1":"v1"},
        "customEvent": "flower", 
        "type": "custom" 
    }] 
}

合并消息

参数类型描述
combineLevelInt合并消息的嵌套层级数。
file_lengthInt合并消息附件的大小,单位为字节。
filenameString合并消息的附件名称。
msgString合并消息的兼容文本。当支持合并消息的 SDK 向不支持合并消息的低版本 SDK 发送消息时,低版本的 SDK 会将该属性解析为文本消息的消息内容。
secretString合并消息附件的访问密钥。如果文件上传 时设置了文件访问限制,则该字段存在。
subTypeString消息类型。合并消息为 sub_combine
summaryString合并消息的概要。
titleString合并消息的标题。
urlString合并消息的附件的 URL 地址。你可以访问该 URL 下载该附件。
extJSON合并消息的扩展信息。
fromString合并消息的发送方的用户 ID。
toString接收方的用户 ID。
typeString会话类型:
- chat: 单聊;
- groupchat: 群聊;
- chatroom: 聊天室。

例如,下面示例为源消息包括文本、图片和文件消息的合并消息格式:

  "payload": {
        "bodies": [
            {
                "combineLevel": 1,
                "file_length": 1059,
                "filename": "17326799853580001",
                "msg": "当前版本过低,无法展示对应内容。",
                "secret": "CeycYKx0Ee-I3fU0d5v4X9BduteO1RZNVsePAgkDQ9sxoVJM",
                "subType": "sub_combine",
                "summary": "wzy1: 你在哪里?\nwzy1: 你在哪里?\nwzy1: 你在哪里?",
                "title": "聊天记录",
                "type": "txt",
                "url": "https://a1-hsb.easemob.com/easemob-demo/testy/chatfiles/09ec7550-ac74-11ef-83ce-4719989e3c82"
            }
        ],
        "ext": {
            "ease_chat_uikit_user_info": {
                "nickname": "公子小白有点黑"
            }
        },
        "from": "user1",
        "to": "user2",
        "type": "chat"
    }

发送群组消息

本节介绍在群组中发送各类消息后,环信服务器向你的 App Server 发送的回调请求的包体示例。

content_typepayload 中类型触发事件
chat:group:*-群组中发送任何类型的消息
chat:group:text{“bodies”:{“type”:“txt”}}群组中发送文本消息
chat:group:image{“bodies”:{“type”:“img”}}群组中发送图片消息
chat:group:voice{“bodies”:{“type”:“audio”}}群组中发送语音消息
chat:group:location{“bodies”:{“type”:“loc”}}群组中发送位置消息
chat:group:video{“bodies”:{“type”:“video”}}群组中发送视频消息
chat:group:file{“bodies”:{“type”:“file”}}群组中发送文件消息
chat:group:command{“bodies”:{“type”:“cmd”}}群聊中发送命令消息
chat:group:custom{“bodies”:{“type”:“custom”}}群组中发送自定义消息
chat:group:txt{“bodies”:{“type”:“txt”,“subType”:“sub_combine”}}群组中发送合并消息
chat:group:unknown{“bodies”:{“type”:“unknown”}}群组中发送未知消息

回调请求的包体中的主要字段和示例如下所示:

字段数据类型含义
extString消息扩展字段。
bodiesobject该回调的主体内容,包含以下两个字段 msgtype
msgString消息内容。
typeString消息类型,包括:
- 文本消息:txt
- 图片消息:img
- 语音消息:audio
- 位置消息:loc
- 视频消息:video
- 文件消息:file
- 命令消息:cmd
- 自定义消息:custom
- 未知消息:unknown

群组消息的 payload 与单聊消息相同,详见发送单聊消息

{
    "callId":"{appkey}_8924312242322", 
    "eventType":"chat_offline",
    "timestamp":1600060847294,
    "chat_type":"groupchat", 
    "group_id":"16934809238921545",
    "from":"user1",
    "to":"user2",
    "msg_id":"8924312242322",
    "payload":{
        // 具体的消息内容
    },
    "securityVersion":"1.0.0",
    "security":"2ca02c394bef9e7abc83958bcc3156d3"
 }

发送聊天室消息

本节介绍在聊天室中发送各类消息后,环信服务器向你的 App Server 发送的回调请求的包体示例。

content_typepayload 中类型触发事件
chat:room:*-聊天室中发送任何类型的消息
chat:room:text{“bodies”:{“type”:“txt”}}聊天室中发送文本消息
chat:room:image{“bodies”:{“type”:“img”}}聊天室中发送图片消息
chat:room:voice{“bodies”:{“type”:“audio”}}聊天室中发送语音消息
chat:room:location{“bodies”:{“type”:“loc”}}聊天室中发送位置消息
chat:room:video{“bodies”:{“type”:“video”}}聊天室中发送视频消息
chat:room:file{“bodies”:{“type”:“file”}}聊天室中发送文件消息
chat:room:command{“bodies”:{“type”:“cmd”}}聊天室中发送命令消息
chat:room:custom{“bodies”:{“type”:“custom”}}聊天室中发送自定义消息
chat:room:txt{“bodies”:{“type”:“txt”,“subType”:“sub_combine”}}聊天室中发送合并消息
chat:room:unknown{“bodies”:{“type”:“unknown”}}聊天室中发送未知消息

回调请求的包体中的主要字段和示例如下所示:

字段数据类型含义
extobject消息扩展字段。
bodiesobject该回调的主体内容,包含以下两个字段 msgtype
msgString消息内容。
typeString消息类型,包括:
- 文本消息:txt
- 图片消息:img
- 语音消息:audio
- 位置消息:loc
- 视频消息:video
- 文件消息:file
- 命令消息:cmd
- 自定义消息:custom
- 未知消息:unknown
{
    "callId":"{appkey}_8924312242322",
    "eventType":"chat_offline",
    "timestamp":1600060847294,
    "chat_type":"groupchat", 
    "group_id":"16934809238921545",
    "from":"user1",
    "to":"user2",
    "msg_id":"8924312242322", 
    "payload":{
        // 具体的消息内容
    },
    "securityVersion":"1.0.0",
    "security":"2ca02c394bef9e7abc83958bcc3156d3"
}

聊天室消息的 payload 与单聊消息相同,详见发送单聊消息