群内发送普通消息
功能说明
App 管理员可以通过该接口在群组中发送普通消息。
接口调用说明
适用的群组类型
群组类型 ID | 是否支持此 REST API |
Private | 支持,同新版本中的 Work(好友工作群) |
Public | 支持 |
ChatRoom | 支持,同新版本中的 Meeting(临时会议群) |
AVChatRoom | 支持 |
Community(社群) | 支持 |
请求 URL 示例
https://xxxxxx/v4/group_open_http_svc/send_group_msg?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/group_open_http_svc/send_group_msg | 请求接口 |
sdkappid | 创建应用时即时通信 IM 控制台分配的 SDKAppID |
identifier | |
usersig | |
random | 请输入随机的32位无符号整数,取值范围0 - 4294967295 |
contenttype | 请求格式固定值为 json |
最高调用频率
200次/秒。
请求包示例
基础形式
发送普通群消息,消息的发送者为 App 管理员。
{"GroupId": "@TGS#2C5SZEAEF","Random": 8912345, // 随机数字,五分钟数字相同认为是重复消息"MsgBody": [ // 消息体,由一个 element 数组组成,详见字段说明{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red packet"}},{"MsgType": "TIMFaceElem", // 表情"MsgContent": {"Index": 6,"Data": "abc\u0000\u0001"}}],"CloudCustomData": "your cloud custom data","SupportMessageExtension": 0,"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}}}
指定消息发送者
可以指定某一位群成员作为消息发送者,在 From_Account 中设置。
其他用户收到群消息后,显示的消息来自 App 管理员指定的那一位群成员。
{"GroupId": "@TGS#2C5SZEAEF","From_Account": "leckie", // 指定消息发送者(选填)"Random": 8912345, // 随机数字,五分钟数字相同认为是重复消息"MsgBody": [ // 消息体,由一个element数组组成,详见字段说明{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red packet"}},{"MsgType": "TIMFaceElem", // 表情"MsgContent": {"Index": 6,"Data": "abc\u0000\u0001"}}]}
指定消息接收者
如果消息体中增加了 To_Account,里面指定消息接收者的信息,那么消息只会发送给消息接收者,且该消息不计未读。(支持群类型 Private、Public、ChatRoom)。
说明
仅进阶版支持此功能。
{"GroupId":"@TGS#12DEVUDHQ","Random":2784275388,"MsgBody":[{"MsgType":"TIMCustomElem","MsgContent":{"Data":"1cddddddddq1"}}],"To_Account":["brennanli2", "brennanli3"] //指定消息接收者(接收者成员上限50个),如果此字段被使用,消息则不计未读}
指定消息不更新最近联系人会话
如果消息中指定 SendMsgControl,设置 NoLastMsg 的情况下,表示不更新最近联系人会话;NoUnread 不计未读,只对单条消息有效。(AVChatRoom 不允许使用,Meeting 默认不计未读数,需要配置开通,未开通时设置 NoUnread 会报错)。
{"GroupId": "@TGS#2C5SZEAEF","Random": 8912345, // 随机数字,五分钟数字相同认为是重复消息"SendMsgControl":["NoLastMsg"],//指定消息不触发更新最近联系人会话。"MsgBody": [ // 消息体,由一个 element 数组组成,详见字段说明{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red packet"}},{"MsgType": "TIMFaceElem", // 表情"MsgContent": {"Index": 6,"Data": "abc\u0000\u0001"}}]}
指定消息优先级
可以指定消息的优先级,默认优先级 Normal。
可以指定3种优先级,从高到低依次为 High、Normal 和 Low,区分大小写。
{"GroupId": "@TGS#2C5SZEAEF","Random": 8912345, // 随机数字,五分钟数字相同认为是重复消息"MsgPriority": "High", // 消息优先级"MsgBody": [ // 消息体,由一个element数组组成,详见字段说明{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red packet"}},{"MsgType": "TIMFaceElem", // 表情"MsgContent": {"Index": 6,"Data": "abc\u0000\u0001"}}]}
指定消息不回调
在回调开关打开的情况下,用户通过 ForbidCallbackControl 控制单条消息是否发起回调,默认情况发起回调。
{"GroupId": "@TGS#2C5SZEAEF","Random": 8912345, // 随机数字,五分钟数字相同认为是重复消息"ForbidCallbackControl":["ForbidBeforeSendMsgCallback","ForbidAfterSendMsgCallback"], // 禁止回调控制选项"MsgBody": [ // 消息体,由一个element数组组成,详见字段说明{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red packet"}},{"MsgType": "TIMFaceElem", // 表情"MsgContent": {"Index": 6,"Data": "abc\u0000\u0001"}}]}
发送群@消息
GroupAtInfo字段里面设置@的用户,跟消息体里面@的用户按顺序逐一对应。
注意
直播群(AVChatroom)不支持@all。
{"GroupId": "@TGS#2C5SZEAEF","Random": 8912345, // 随机数字,五分钟数字相同认为是重复消息"MsgBody": [ // 消息体,由一个 element 数组组成,详见字段说明{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red @all @tommy @brennanli packet"}}],//对应文本信息里的@all @tommy @brennanli"GroupAtInfo":[{"GroupAtAllFlag":1 //为1表示@all,为0表示@某个群成员},{"GroupAtAllFlag":0,"GroupAt_Account":"tommy" //@的具体的群成员},{"GroupAtAllFlag":0,"GroupAt_Account":"brennanli"}]}
指定消息不存离线及漫游
如果消息体中指定 OnlineOnlyFlag,只要值大于0,则消息表示只在线下发,不存离线和漫游(AVChatRoom 和 BChatRoom 不允许使用)。
{"GroupId": "@TGS#2C5SZEAEF","Random": 8912345, // 随机数字,五分钟数字相同认为是重复消息"OnlineOnlyFlag": 1, // 表示只在线下发(只有在线群成员才能收到),不存离线及漫游"MsgBody": [ // 消息体,由一个 element 数组组成,详见字段说明{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red packet"}},{"MsgType": "TIMFaceElem", // 表情"MsgContent": {"Index": 6,"Data": "abc\u0000\u0001"}}]}
请求包字段说明
字段 | 类型 | 属性 | 说明 |
GroupId | String | 必填 | 向哪个群组发送消息 |
Random | Integer | 必填 | 无符号32位整数。如果5分钟内两条消息的内容和 Random 随机值都相同的情况下,后一条消息将被当做重复消息而丢弃 |
MsgPriority | String | 选填 | 消息的优先级 |
MsgBody | Array | 必填 | 消息体,详细可参阅 消息格式描述 |
From_Account | String | 选填 | 消息来源账号,选填。如果不填写该字段,则默认消息的发送者为调用该接口时使用的 App 管理员账号。除此之外,App 亦可通过该字段“伪造”消息的发送者,从而实现一些特殊的功能需求。需要注意的是,如果指定该字段,必须要确保字段中的账号是存在的 |
OfflinePushInfo | Object | 选填 | 离线推送信息配置,详细可参阅 消息格式描述 |
ForbidCallbackControl | Array | 选填 | 消息回调禁止开关,只对单条消息有效,ForbidBeforeSendMsgCallback 表示禁止发消息前回调,ForbidAfterSendMsgCallback 表示禁止发消息后回调 |
OnlineOnlyFlag | Integer | 选填 | 1表示消息仅发送在线成员,默认0表示发送所有成员,AVChatRoom(直播群)不支持该参数 |
SendMsgControl | Array | 选填 | 消息发送权限,NoLastMsg 只对单条消息有效,表示不更新最近联系人会话;NoUnread 不计未读,只对单条消息有效。(如果该消息 OnlineOnlyFlag 设置为1,则不允许使用该字段。) |
CloudCustomData | String | 选填 | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
SupportMessageExtension | Integer | 选填 | 该条消息是否支持消息扩展,0为不支持,1为支持。 |
To_Account | Array | 选填 | 指定消息接收者(接收者成员上限50个),如果此字段被使用,消息则不计未读,仅进阶版支持此功能,支持好友工作群(Work)、陌生人社交群(Public)、临时会议群(Meeting) |
TopicId | String | 选填 | 话题的 ID,若具有此选项表示在对应的话题中发送普通消息,仅支持话题的社群适用此选项 |
应答包体示例
{"ActionStatus": "OK","ErrorInfo": "","ErrorCode": 0,"MsgTime": 1497249503,"MsgSeq": 1,"MsgDropReason" : "MsgFreqCtrl"}
应答包字段说明
字段 | 类型 | 说明 |
ActionStatus | String | 请求处理的结果,OK 表示处理成功,FAIL 表示失败 |
ErrorCode | Integer | 错误码,0表示成功,非0表示失败 |
ErrorInfo | String | 错误信息 |
MsgTime | Integer | 消息发送的时间戳,对应后台 server 时间 |
MsgSeq | Integer | 消息序列号,唯一标示一条消息 |
MsgDropReason | String | 消息丢弃原因;默认为空,否则表明消息被丢弃原因,当前只支持消息频控丢弃 |
错误码说明
除非发生网络错误(例如502错误),否则该接口的 HTTP 返回码均为200。真正的错误码,错误信息是通过应答包体中的 ErrorCode、ErrorInfo 来表示的。
公共错误码(60000到79999)参见 错误码 文档。
本 API 私有错误码如下:
错误码 | 含义说明 |
10002 | 服务器内部错误,请重试 |
10004 | 参数非法,请根据错误描述检查请求是否正确 |
10007 | 操作权限不足,例如 Public 群组中普通成员尝试执行踢人操作,但只有 App 管理员才有权限 |
10010 | 群组不存在,或者曾经存在过,但是目前已经被解散 |
10015 | 群组 ID 非法,请检查群组 ID 是否填写正确 |
10016 | App 后台通过第三方回调拒绝本次操作 |
10017 | 因被禁言而不能发送消息,请检查发送者是否被设置禁言 |
10023 | 发消息的频率超限,请延长两次发消息时间的间隔 |
80002 | 消息内容过长,目前最大支持12K字节的消息,请调整消息长度 |
接口调试工具
参考
单发单聊消息(v4/openim/sendmsg)
批量发单聊消息(v4/openim/batchsendmsg)