向单个用户发送单聊消息
功能说明
管理员向账号发消息,接收方看到消息发送者是管理员。
管理员指定某一账号向其他账号发消息,接收方看到发送者不是管理员,而是管理员指定的账号。
该接口不会检查发送者和接收者的好友关系(包括黑名单),同时不会检查发送者是否被禁言。
该接口默认不会检查接收者对发送者是否设置了免打扰,如需检查,请在"SendMsgControl"字段填上"WithMuteNotifications"。
单聊消息 MsgSeq 字段的作用及说明:该字段在发送消息时由用户自行指定,该值可以重复,非后台生成,非全局唯一。与群聊消息的 MsgSeq 字段不同,群聊消息的 MsgSeq 由后台生成,每个群都维护一个 MsgSeq,从1开始严格递增。单聊消息历史记录对同一个会话的消息先以时间戳排序,同秒内的消息再以 MsgSeq 排序。
注意
使用服务端集成 REST API 发送单聊消息时,存在是否将消息同步至发送方(管理员账号或者由管理员指定的某账号)问题,同步方式包括在线终端和漫游,REST API 提供 SyncOtherMachine 参数用于说明是否进行同步,详细使用方式参见下文请求包示例。
请求 URL 示例
https://xxxxxx/v4/openim/sendmsg?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
请求参数说明
参数 | 说明 |
xxxxxx | SDKAppID 所在国家/地区对应的专属域名: 中国: console.tim.qq.com 新加坡: adminapisgp.im.qcloud.com 首尔: adminapikr.im.qcloud.com 法兰克福: adminapiger.im.qcloud.com 硅谷: adminapiusa.im.qcloud.com 雅加达: adminapiidn.im.qcloud.com |
v4/openim/sendmsg | 请求接口 |
sdkappid | 创建应用时即时通信 IM 控制台分配的 SDKAppID |
identifier | |
usersig | |
random | 请输入随机的32位无符号整数,取值范围0 - 4294967295 |
contenttype | 请求格式固定值为 json |
最高调用频率
200次/秒。
请求包示例
管理员向其它账号发消息
注意
若不希望将消息同步至 From_Account,则 SyncOtherMachine 填写2;若希望将消息同步至 From_Account,则 SyncOtherMachine 填写1。
{"SyncOtherMachine": 2, // 消息不同步至发送方"To_Account": "lumotuwe2","MsgSeq": 93847636,"MsgRandom": 1287657,"MsgBody": [{"MsgType": "TIMTextElem","MsgContent": {"Text": "hi, beauty"}}],"CloudCustomData": "your cloud custom data","SupportMessageExtension": 0}
管理员向其它账号发消息,同时指定消息不回调
注意
若不希望将消息同步至 From_Account,则 SyncOtherMachine 填写2;若希望将消息同步至 From_Account,则 SyncOtherMachine 填写1。
{"SyncOtherMachine": 2, // 消息不同步至发送方"To_Account": "lumotuwe2","MsgSeq": 93847636,"MsgRandom": 1287657,"ForbidCallbackControl":["ForbidBeforeSendMsgCallback","ForbidAfterSendMsgCallback"], // 禁止回调控制选项"MsgBody": [{"MsgType": "TIMTextElem","MsgContent": {"Text": "hi, beauty"}}],"CloudCustomData": "your cloud custom data"}
管理员指定某一账号向其它账号发送消息,同时设置离线推送信息,并且不将消息同步至 From_Account
注意
若不希望将消息同步至 From_Account,则 SyncOtherMachine 填写2。
{"SyncOtherMachine": 2,"From_Account": "lumotuwe1","To_Account": "lumotuwe2","MsgSeq": 93847636,"MsgRandom": 1287657,"MsgBody": [{"MsgType": "TIMTextElem","MsgContent": {"Text": "hi, beauty"}}],"CloudCustomData": "your cloud custom data","OfflinePushInfo": {"PushFlag": 0,"Desc": "离线推送内容","Ext": "这是透传的内容","AndroidInfo": {"Sound": "android.mp3"},"ApnsInfo": {"Sound": "apns.mp3","BadgeMode": 1, // 这个字段缺省或者为 0 表示需要计数,为 1 表示本条消息不需要计数,即右上角图标数字不增加"Title":"apns title", // apns title"SubTitle":"apns subtitle", // apns subtitle"Image":"www.image.com" // image url}}}
管理员指定某一账号向另一账号发送消息,同时指定消息只下发给在线用户,而且不存历史聊天记录(指定 OnlineOnlyFlag 为1)
注意
若希望将消息同步至 From_Account,则 SyncOtherMachine 填写1。
{"SyncOtherMachine": 1, // 消息同步至发送方"From_Account": "lumotuwe1","To_Account": "lumotuwe2","OnlineOnlyFlag": 1,"MsgSeq": 93847636,"MsgRandom": 1287657,"MsgBody": [{"MsgType": "TIMTextElem","MsgContent": {"Text": "hi, beauty"}}],"CloudCustomData": "your cloud custom data"}
请求包字段说明
字段 | 类型 | 属性 | 说明 |
SyncOtherMachine | Integer | 选填 | 1:把消息同步到 From_Account 在线终端和漫游上 2:消息不同步至 From_Account 3:消息不同步至 To_Account 若不填写默认情况下会将消息存 From_Account 漫游 |
From_Account | String | 选填 | 消息发送方 UserID(用于指定发送消息方账号) |
To_Account | String | 必填 | 消息接收方 UserID |
OnlineOnlyFlag | Integer | 选填 | 默认为 0,表示消息存历史聊天记录 1表示消息不存历史聊天记录,即发送消息时,若接收方在线,则能收到此消息,若接收方不在线,则收不到该消息。适用于实现一些实时状态类的功能,如实现“对方正在输入”功能 |
MsgSeq | Integer | 选填 | 消息序列号(32位无符号整数),后台会根据该字段去重及进行同秒内消息的排序,详细规则请看本接口的功能说明。若不填该字段,则由后台填入随机数 |
MsgRandom | Integer | 必填 | 消息随机数(32位无符号整数),后台用于同一秒内的消息去重。请确保该字段填的是随机数 |
ForbidCallbackControl | Array | 选填 | 消息回调禁止开关,只对本条消息有效,ForbidBeforeSendMsgCallback 表示禁止发消息前回调,ForbidAfterSendMsgCallback 表示禁止发消息后回调 |
SendMsgControl | Array | 选填 | 消息发送控制选项,是一个 String 数组,只对本条消息有效。 "NoUnread"表示该条消息不计入未读数。 "NoLastMsg"表示该条消息不更新会话列表。 "WithMuteNotifications"表示该条消息的接收方对发送方设置的免打扰选项生效(默认不生效)。 "NoMsgCheck"表示开启云端审核后,该条消息不送审。 示例: "SendMsgControl": ["NoUnread","NoLastMsg","WithMuteNotifications","NoMsgCheck"] |
MsgBody | Array | 必填 | |
MsgType | String | 必填 | TIM 消息对象类型,目前支持的消息对象包括: TIMTextElem(文本消息) TIMLocationElem(位置消息) TIMFaceElem(表情消息) TIMCustomElem(自定义消息) TIMSoundElem(语音消息) TIMImageElem(图像消息) TIMFileElem(文件消息) TIMVideoFileElem(视频消息) |
MsgContent | Object | 必填 | 对于每种 MsgType 用不同的 MsgContent 格式,具体可参考 消息格式描述 |
CloudCustomData | String | 选填 | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
SupportMessageExtension | Integer | 选填 | 该条消息是否支持消息扩展,0为不支持,1为支持。 |
OfflinePushInfo | Object | 选填 | 离线推送信息配置,具体可参考 消息格式描述 |
IsNeedReadReceipt | Integer | 选填 | 该条消息是否需要已读回执,0为不需要,1为需要,默认为0 |
应答包体示例
正常应答
{"ActionStatus": "OK","ErrorInfo": "","ErrorCode": 0,"MsgTime": 1572870301,"MsgKey": "89541_2574206_1572870301"}
异常应答
{"ActionStatus": "FAIL","ErrorInfo": "Fail to Parse json data of body, Please check it","ErrorCode": 90001}
应答包字段说明
字段 | 类型 | 说明 |
ActionStatus | String | 请求处理的结果,OK 表示处理成功,FAIL 表示失败 |
ErrorCode | Integer | 错误码,0表示成功,非0表示失败 |
ErrorInfo | String | 错误信息 |
MsgTime | Integer | 消息时间戳,UNIX 时间戳 |
MsgKey | String | 消息唯一标识,用于撤回。长度不超过50个字符 |
错误码说明
除非发生网络错误(例如502错误),否则该接口的 HTTP 返回码均为200。真正的错误码,错误信息是通过应答包体中的 ErrorCode、ErrorInfo 来表示的。
公共错误码(60000到79999)参见 错误码 文档。
本 API 私有错误码如下:
错误码 | 描述 |
20001 | 请求包非法 |
20002 | UserSig 或 A2 失效 |
20003 | 消息发送方或接收方 UserID 无效或不存在,请检查 UserID 是否已导入即时通信 IM |
20004 | 网络异常,请重试 |
20005 | 服务器内部错误,请重试 |
20006 | 触发发送单聊消息之前回调,App 后台返回禁止下发该消息 |
90001 | JSON 格式解析失败,请检查请求包是否符合 JSON 规范 |
90002 | |
90003 | JSON 格式请求包体中缺少 To_Account 字段或者 To_Account 字段不是 String 类型 |
90005 | JSON 格式请求包体中缺少 MsgRandom 字段或者 MsgRandom 字段不是 Integer 类型 |
90007 | JSON 格式请求包体中 MsgBody 类型不是 Array 类型,请将其修改为 Array 类型 |
90009 | 请求需要 App 管理员权限 |
90010 | |
90012 | To_Account 没有注册或不存在,请确认 To_Account 是否导入即时通信 IM 或者是否拼写错误 |
90026 | 消息离线存储时间错误(最多不能超过7天) |
90031 | JSON 格式请求包体中 SyncOtherMachine 字段不是 Integer 类型 |
90044 | JSON 格式请求包体中 MsgLifeTime 字段不是 Integer 类型 |
91000 | 服务内部错误,请重试 |
90992 | 服务内部错误,请重试;如果所有请求都返回该错误码,且 App 配置了第三方回调,请检查 App 服务器是否正常向即时通信 IM 后台服务器返回回调结果 |
93000 | JSON 数据包超长,消息包体请不要超过12k |
90048 | 请求的用户账号不存在 |
接口调试工具
参考
批量发单聊消息(v4/openim/batchsendmsg)
查询单聊消息(v4/openim/admin_getroammsg)
撤回单聊消息(v4/openim/admin_msgwithdraw)