消息数据类型
消息数据类型是在 OneBot 标准中表示聊天消息内容的数据类型,标准中使用 message
表示该类型。
在 OneBot 实现传给应用端的事件字段和动作响应数据中,消息数据类型必须是消息段数组/列表。
在由应用端传给 OneBot 实现的动作请求参数中,消息数据类型建议是消息段数组/列表,也可以是单个消息段或字符串。对于字符串,OneBot 实现应将其理解为单个纯文本消息段组成的消息。
消息段
消息段的数据类型为 object
,其中必须包含以下字段:
字段名 | 数据类型 | 说明 |
---|---|---|
type |
string | 消息段名称 |
data |
map[string]any | 消息段参数 |
一个以 JSON 编码的消息段例子如下:
{
"type": "image",
"data": {
"file_id": "e30f9684-3d54-4f65-b2da-db291a477f16"
}
}
替代表示
以消息段数组/列表形式表示消息虽然提高了对多媒体消息的表示能力,但对不关心特殊消息类型的用户来说,解析门槛也提高了。为了让这部分用户能更方便地处理消息,在消息事件中添加了字符串类型的 alt_message
字段,作为消息的纯文本替代表示。
消息替代表示中,纯文本消息段的内容应原样表示为字符串,其它消息段应表示为适当的形式,建议表示为人类可读的形式,例如 这是一段纯文本[图片][表情:憨笑]
。
例子
以 JSON 编码的动作请求中消息类型参数的例子:
{
"action": "send_message",
"params": {
"detail_type": "private",
"user_id": "1234567",
"message": [
{
"type": "text",
"data": {
"text": "这是一个纯文本消息段"
}
}
]
}
}
{
"action": "send_message",
"params": {
"detail_type": "private",
"user_id": "1234567",
"message": {
"type": "text",
"data": {
"text": "这是一个纯文本消息段"
}
}
}
}
{
"action": "send_message",
"params": {
"detail_type": "private",
"user_id": "1234567",
"message": "这是一个纯文本消息段"
}
}
以 JSON 编码的事件中消息类型字段的例子:
{
"id": "b6e65187-5ac0-489c-b431-53078e9d2bbb",
"self": {
"platform": "qq",
"user_id": "123234"
},
"time": 1632847927.599013,
"type": "message",
"detail_type": "private",
"sub_type": "",
"message_id": "6283",
"message": [
{
"type": "text",
"data": {
"text": "OneBot is not a bot"
}
},
{
"type": "image",
"data": {
"file_id": "e30f9684-3d54-4f65-b2da-db291a477f16"
}
}
],
"alt_message": "OneBot is not a bot[图片]",
"user_id": "123456788"
}