消息段
使用 { "type": "…", "data": { … } } 数组表示消息。不支持的段会报错,不会静默忽略。
| 类型 | 群聊 | 好友 / 临时私聊 | data |
|---|---|---|---|
| text | 支持 | 支持 | text: string |
| at | 支持 | 不支持 | user_id: 正整数或字符串 all |
| image | 支持 | 支持 | file_id: string |
| voice | 支持 | 支持 | file_id: string |
| video | 支持 | 支持 | file_id: string |
| face | 支持 | 支持 | 按 kind 指定表情字段 |
| ark | 支持 | 支持 | 卡片结构,通常使用卡片接口返回值 |
| reply | 支持 | 支持 | reply_reference_id: integer;兼容 message_id: integer |
文字与提及
[
{ "type": "text", "data": { "text": "你好" } },
{ "type": "at", "data": { "user_id": 234567890 } }
]全体成员使用 {"type":"at","data":{"user_id":"all"}},仍受 QQ 权限和次数限制。旧字段 uin、uid 不再接受。
图片、语音与视频
先调用对应群或好友上传接口,再使用它返回的消息段或 file_id:
[{ "type": "image", "data": { "file_id": "上传结果中的 file_id" } }]媒体绑定当前账号、协议和目标会话。临时会话上传使用 upload_friend_image、upload_friend_voice、upload_friend_video,并传入与发送时相同的 group_id、user_id。不同账号、协议、好友或群的媒体引用不能混用,退出账号后需重新上传。
群视频必须单独发送。好友和临时会话的语音、视频必须作为唯一消息段。文件来源受管理员的媒体目录权限约束,也可使用 file_transfer 的完成引用;不能读取框架凭据、数据库或任意系统文件。
表情
[{ "type": "face", "data": { "kind": "qq_face", "face_id": "190" } }]超级表情使用 kind=super_face:type=33 需要 category_id=1、package_id、text;type=37 需要非零 category_id、face_id、package_id、text。未知 kind/type 会拒绝。
引用回复
[
{ "type": "reply", "data": { "message_id": 123 } },
{ "type": "text", "data": { "text": "已收到" } }
]发送引用段中的 message_id 来自事件顶层、发送结果或历史读取,是框架缓存编号,不是 msg_seq,也不是接收引用段内部的同名字段。引用必须属于同一账号、协议及会话;一条消息只能包含一个引用并需要正文。缓存过期时会拒绝。
接收消息段
接收到的 reply.data 保留旧字段,并用两个明确字段区分上游标识和可发送的引用编号:
| 字段 | 类型 | 说明 |
|---|---|---|
message_id | string | 兼容旧接收格式的 QQ MsgUID 十进制字符串;未提供时为空字符串,不能作为发送引用编号 |
source_msg_uid | string | 与上面的原始 MsgUID 相同,可能超出 JavaScript 安全整数范围,请始终保留字符串 |
reply_reference_id | integer 或 null | 被引用原文的框架缓存编号;只有原文仍在本账号、协议及会话的缓存中时才提供,否则为 null |
回复当前收到的整条消息时,使用事件顶层 message_id。若要引用该消息中引用的更早原文,使用非 null 的 reply_reference_id:
[
{ "type": "reply", "data": { "reply_reference_id": 123 } },
{ "type": "text", "data": { "text": "回复这段原文" } }
]发送时优先使用 reply_reference_id;未提供或为 null 时,仍兼容旧的数字型 message_id。即使同时携带原始 UID 字符串,也只能依据有效的本地引用编号发送。source_msg_uid、接收引用段中的字符串 message_id、msg_seq 都不能代替该编号;缺失或失效时不能自行猜测或拼造。
临时会话的上游推送可能没有群号,这时不会生成可误用的引用编号。只有群身份完整的临时消息才可引用回复。
合并转发
upload_group_forward_msg 与 upload_friend_forward_msg 支持 1–200 个节点。每项使用 user_id、nickname、time、message,或提供 source_message_id。跨会话媒体须先重新上传到目标会话。send=false 仅上传;send=true 会发送转发卡片并等待真实消息确认。
