|
|
|
|
私聊、群聊等 IM 服务,以及各种实时协作功能,是当今应用系统的基础需求。 易度的每个工作平台站点,自动会部署一个配套的消息中心。
1 为什么需要消息服务
IM 和实时系统构建技术难度大,主要表现在:
- 如何支撑大量用户的连接
- 网络不稳定,如何确保不丢消息
- 海量消息历史的可扩展存储
- 消息历史的快速全文搜索
- 多端(手机、电脑)通知使用,聊天状态同步
- 多端消息提醒
- 用户系统如何集成
消息服务功能:
- 群聊、私聊、自定义消息
- 全套开放 API
- 全套 JS SDK,快速嵌入聊天到您的应用
- 提供各种底层通讯 SDK
- 桌面消息提醒
2 API 说明与约定
-
本文档中列出的所有接口都是通过 HTTP POST 方式访问,响应格式均为 JSON
-
文档只列出的 API 路径,实际调用请在前面加上 Message API 的服务器地址作为基准
-
所有接口都需要通过如下方式携带认证信息,传递如下额外参数:
-
标记有 JSON序列化 字样的参数,在传递时需要做 JSON 序列化
-
所有接口的 account 与 instance 参数都对应易度内容库的账号和站点概念,参考 《开放 API 概览》 。
-
所有 API 响应,统一使用以下 JSON 格式来区分成功与失败:
{
"errcode": 401,
"errmsg": "Token error"
}
其中, errcode 是错误码,为 0 时表示调用成功。如果出现错误, errmsg 是此错误的描述信息。同时,错误响应的 HTTP 状态码也可以作为错误判断的一部分。
3 消息接口
3.1 申请建立连接 /api/v1/message/connect
要建立实时连接用于接收推送消息时,需要先调用这个接口来申请实时连接所需的信息。
参数:
- account: 要连接的站点所属的账户
- instances: JSON序列化 列表 指定要连接的站点实例名称,例如 ["default"] ,目前只支持单个站点连接
响应:
{
"errcode": 0,
"client_id": "1243rewr32432qw2343t54r8iu",
"topics": {
"default": "account-instance-username-123123123sef"
},
"io_bridge": "http://socket.io.bridge.address.com:1234",
"broker": "http://broker.example.com:9001",
"tcp_broker": "http://broker.example.com:1883"
"use_ssl": false,
"exceeded_instances": [],
"expired_instances": []
}
响应 JSON 字段含义:
- client_id: 本次连接 ID,客户端必须使用这个 ID 进行连接
- topics: 包含请求的各个 instance 对应的 topic,客户端必须订阅指定 topic,否则无法收到消息推送。以上例子中的 topic 是 account-instance-username-123123123sef 。
- broker: 支持 Websockets 连接的 MQTT 服务器地址,可供浏览器中 Javascript 使用。推荐所有支持 Websockets 的客户端都使用这个地址。
- io_bridge: 用于兼容低版本 IE 的 Socket.io 桥接服务器地址。仅供 IE 使用。
- tcp_broker: 支持 TCP 连接的 MQTT 服务器地址,用于普通 MQTT 客户端连接。起始的 http:// 等协议标识可以忽略。不推荐使用,仅用于不支持 Websockets 的客户端。
- use_ssl: 指定是否应当使用 SSL 加密连接,客户端必须服从服务器指定的值。
- exceeded_instances: 如果申请连接的站点使用并发连接许可,且当前在线用户数(不是在线客户端数)超出限制,将被列入此字段,并暂时禁止连接。
- expired_instances: 如果申请连接的站点许可已经过期,将被列入此字段,并暂时禁止连接。
3.2 建立长连接
消息客户端需要与服务器之间建立长连接,才能够收到实时消息推送。本节内容描述建立长连接的方式。
在申请成功之后,客户端应当在 60 秒内使用 MQTT 协议连接到服务器,并完成以下操作:
-
订阅服务器指定的频道。在上例中,这个频道是 account-instance-username-123123123sef 。
-
向 msgcenter 这个系统频道发送一条 MQTT 消息,表明自己已上线。payload 的格式是:
{
"event_name": "connection",
"account": "zopen",
"client_id": "1243rewr32432qw2343t54r8iu",
"user_id": "users.admin",
"instance": "default",
"event_data": {
'status': "online",
'instances': ["default"],
'timestamp': 143244221.21,
'appname': 'Test client'
}
}
其中
- account、instance、instances、user_id 是申请连接时使用的信息
- client_id 是客户端的 ID,即服务器指定的客户端 ID。在上例中,client_id 是 1243rewr32432qw2343t54r8iu 。
- appname 指明客户端的名称,这个名称由客户端自行指定。部分在线客户端会以“您在XXX中登录上线”的形式向用户展示这个字段值。
- status 值必须是 online 。
- timestamp 是当前的时间戳。
完成这些操作,服务器将通过客户端订阅的频道发送一条响应消息,如果消息 status 为 online ,则客户端上线成功。例如:
{
"event_name": "connection",
"account": "zopen",
"client_id": "1243rewr32432qw2343t54r8iu",
"user_id": "users.admin",
"instance": "default",
"event_data": {
'status': "online",
'instances': ["default"],
'timestamp': 143244221.21,
'appname': 'Test client'
}
}
如果没有及时完成以上操作,申请的凭证(client_id 和 topic 等)将失效,客户端不能使用这些过期的信息进行连接,需要重新申请。
在实时客户端在线的过程中,服务器可能因为各种原因要求客户端断开连接(例如服务端进行了维护操作并重新启动)。 当客户端收到 event_name 为 connection 并且指定 status 为 offline 的消息时,客户端应当断开连接并重新申请凭证再行连接。
注意:当前 MQTT 服务器支持的 QoS 是 1,最大心跳间隔为 60 秒。您需要在使用 MQTT 库时,指定 keepalive 为小于 60 秒的值。
3.3 消息数据格式
消息事件是JSON序列化的对象,基本格式如下:
{
"from": {
"name": "admin",
"id": "users.admin"
},
"subject": "消息标题",
"body":"消息正文",
"action": "动作",
"context": {
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["DataItem"]
},
"attachments": [
{
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["File"]
}
]
}
各字段含义如下:
- from: 一个包含 name 和 id 的对象,用于接收端显示发送消息的用户名。 id 字段必须与 access_token 的所有者ID一致。
- subject: 消息的主题,可选。在消息的详情界面会展示。
- body: 消息的文字内容,可选。
- action: 消息动作,必选。
- context: 可选,一个对象。指示这条消息与站点的哪个对象关联,并存放对象的一些基本信息。一条消息最多只能与一个对象关联。其各个字段含义为:
- uid: 关联对象的 uid。
- title: 关联对象的标题,用于显示。
- url: 关联对象的**永久地址**。注意:应当总是使用 uid URL。
- thumbnail_url: 如果关联对象是一个图片文件,可以提供缩略图的URL,供某些客户端快速展示。
- object_types: 对象的 object_types,用于指示客户端以合适的方式来展示这个对象。
- attachments: 可选,一个数组。指示这条消息包含哪些附件。一条消息可以有任意多个附件。其中每个对象的字段,与 context 的字段含义一致。
通过在消息中包含 attachments ,即可实现发送附件的功能。
3.4 触发通知频道事件 /api/v2/message/trigger_notify_event
在用户的通知频道中,触发通知事件。
通知频道为系统到人的通讯频道。每个用户有 8 个通知频道分别是:
- comment: 评论信息的频道
- sendme: 文件、表单分享的频道
- subscribe: 订阅内容的更新,推送到这个频道
- workflow: 流程运转的通知推送到这个频道
- mentioned: 其他用户“提到我”(@ 功能)的提醒,推送到这个频道
- command: 联机脚本发送到这个频道。特别地,这个频道的内容现在不在任何界面上显示。
- announcement: 公告频道,在 v6.4.4 及之后版本可用。
- default: 默认频道,所有未归类的消息推送到这个频道
参数
-
account: 账户
-
instance: 站点实例的名称
-
event_name: 可选 事件名称,默认是 notify
-
event_type: 可选 事件类型,允许的值有:
- persistent: 默认 事件会被存储,并进入未读标记
- transient: 只发送给在线用户,不会保存
-
category: 可选 消息分类;目前就是频道名称的一部分。不传递默认为 default
-
to: JSON序列化 列表 要发送给哪些用户和组,例如 ["users.panjunyong", "groups.tree.default"] ,v7.0.0 新增
-
exclude: JSON序列化 列表 可选 排除哪些用户和组,例如 ["users.zhangsan"] ,v7.0.0 新增
-
event_data: JSON序列化 事件数据:
{
"from": {
"name": "admin",
"id": "users.admin"
},
"subject": "消息标题",
"body":"消息正文",
"action": "动作",
"context": {
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["object_type"]
},
"attachments": [
{
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["object_type"]
}
]
}
其中 action 是操作名称,可选值有:
- share: 分享
- new : 新建
- edit: 编辑
- upload:上传
- comment: 评论
- new_revision: 更新版本
- fix_revision: 定版
- workflow_sign : 触发流程
- workflow_resign : 更改流程
- remind: 催办
- mentioned: 提到我
响应:
{
"errcode": 0,
"timestamp": 1378234.3545,
"id": "fsdhjkYUIHBf83h_hjf"
}
响应中 timestamp 是消息的时间戳,id 是消息的 ID。如果要精准查询此条消息,请使用这个 ID。 注意:只有 persistent 类型的消息会返回 ID。
3.5 触发私有频道事件 /api/v2/message/trigger_private_event
在通知频道中触发指定事件。
系统为授权的任意两个用户之间,建立了通信频道。 特殊的,自己和自己也存在通信频道,方便进行跨设备通讯。
参数
-
account: 账户
-
instance: 站点实例名称
-
event_name: 可选 事件名称,默认是 chat: 聊天
-
event_type: 可选 事件类型,允许的值有:
- persistent: 默认。事件会被存储,并进入未读标记
- transient: 只发送给在线用户,不会保存
-
to: 要发送给哪个用户,例如 users.panjunyong 。v7.0.0 新增
-
from_user: 可选 来自哪个用户,值为用户 ID,例如 users.admin ,v7.0.0 新增。注意:如果不传则自动从请求的 access_token 中获取当前用户 ID;传入则必须保证与 access_token 的用户一致。
-
event_data: JSON序列化 事件数据,示例:
{
"from": {
"name": "admin",
"id": "users.admin"
},
"subject": "消息标题",
"body":"消息正文",
"action": "动作",
"context": {
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["object_type"]
},
"attachments": [
{
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["object_type"]
}
]
}
响应:
{
"errcode": 0,
"timestamp": 1378234.3545,
"id": "fsdhjkYUIHBf83h_hjf"
}
响应中 timestamp 是消息的时间戳,id 是消息的 ID。如果要精准查询此条消息,请使用这个 ID。 注意:只有 persistent 类型的消息会返回 ID。
3.6 触发群组频道事件 /api/v2/message/trigger_group_event
在一个群组频道中,触发指定事件。
群组频道需要预先在工作平台中创建,并将群组人员同步到消息系统。
参数
-
account: 账户
-
instance: 站点实例的名称
-
group_id: 群组的 ID,目前约定是工作平台中群组对象的 UID
-
event_name: 可选 事件名称,默认是 chat: 聊天
-
event_type: 可选 事件类型,允许的值有:
- persistent:默认 事件会被存储,并进入未读标记
- transient:只发送给在线用户,不会保存
-
exclude: JSON序列化 列表 可选 排除哪些用户和组,例如 ["users.zhangsan"] ,v7.0.0 新增
-
event_data: JSON序列化 事件数据,示例:
{
"to": ["users.panjunyong", "groups.tree.default"],
"from": {
"name": "admin",
"id": "users.admin"
},
"subject": "消息标题",
"body":"消息正文",
"action": "动作",
"context": {
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["object_type"]
},
"attachments": [
{
"uid": "uid",
"title": "title",
"url": "url",
"thumbnail_url": "thumbnail_url",
"object_types": ["object_type"]
}
]
}
其中,to 字段值是一个列表,包含这条消息所特别提到的群组成员。在群聊中,通常是这条消息 @ 了某些群组成员。
响应:
{
"errcode": 0,
"timestamp": 1378234.3545,
"id": "fsdhjkYUIHBf83h_hjf"
}
响应中 timestamp 是消息的时间戳,id 是消息的 ID。如果要精准查询此条消息,请使用这个 ID。 注意:只有 persistent 类型的消息会返回 ID。
3.7 消息历史查询 /api/v1/message/query
参数
- account: 账户
- instance: 消息区的实例号
- time_start: 可选 起始时间戳;默认为第一条未读的时间戳
- time_end: 可选 最末一条消息时间戳;默认为收到请求的时间戳
- id: 可选 按此 ID 精确查询消息内容;注意:如果指定了 id,time_start 和 time_end 将不生效,并且只会查询指定的这一条消息;此参数在 v6.4.4 及之后版本支持; 注意:v7.2.5 及之后版本,推荐使用 ``/api/v1/message/get`` 来通过ID查询单条消息
- limit: 可选 消息数量限制,默认 50
- event_name: 事件名称
- channel_type: 频道类型
- channel_name: 频道名,不同类型的频道,频道名命名是不同的:
- notify: 通知频道,格式 CATEGORY,USERID 比如 sendme,users.panjunyong
- private: 私有频道,格式 USER1,USER2 比如 users.panjunyong,users.zhangsan
- group: 群组频道,格式 GROUP_ID 比如 3214333
响应:
[
{
"body": "\u4fdd\u5b58\u65b0\u7248\u672c",
"channel_type": "notify",
"from": {
"id": "users.tester1",
"name": "\u6d4b\u8bd5\u54581"
},
"attachments": [],
"to": ["users.admin"],
"event_name": "notify",
"timestamp": 1488534767.20252,
"instance_id": "message.default.zopen",
"channel_name": "subscribe<>users.admin",
"context": {
"url": "http://192.168.1.211:80/default/desks/users.admin/files/1.xls",
"title": "1.xls",
"thumbnail_url": "",
"uid": 1019908807,
"object_types": ["File", "Item"]
},
"action": "new",
"id": "XlDMx-CISZmpOzAkZaXwMQ",
"subject": null
}
]
3.8 通过消息ID精确查询单条消息 /api/v1/message/get
参数
- account: 账户
- instance: 消息区的实例号
- id: 要查询的消息ID
响应:
{
"errcode": 0,
"data": {
"body": "\u4fdd\u5b58\u65b0\u7248\u672c",
"channel_type": "notify",
"from": {
"id": "users.tester1",
"name": "\u6d4b\u8bd5\u54581"
},
"attachments": [],
"to": ["users.admin"],
"event_name": "notify",
"timestamp": 1488534767.20252,
"instance_id": "message.default.zopen",
"channel_name": "subscribe<>users.admin",
"context": {
"url": "http://192.168.1.211:80/default/desks/users.admin/files/1.xls",
"title": "1.xls",
"thumbnail_url": "",
"uid": 1019908807,
"object_types": ["File", "Item"]
},
"action": "new",
"id": "XlDMx-CISZmpOzAkZaXwMQ",
"subject": null
}
}
注意:如果找不到这条消息,响应中将包含错误码 30003。
3.9 消息历史数量 /api/v1/message/query_count
这个用于消息历史的分页。
参数
- account: 账户
- instance: 消息区的实例号
- time_start: 可选 起始的消息时间戳;默认为第一条未读消息时间戳
- time_end: 可选 最末一条消息时间戳;不传时默认为到收到请求的时间为止
- event_name 指定消息类型
- channel_type 频道类型
- channel_name 指定消息频道
响应:
{
"errcode": 0,
"count": 200
}
3.10 频道未读消息 /api/v1/message/unread_stat
查看各个频道起始未读的 persistent 类型的消息数据
参数:
- account: 账户
- instance: 消息区的实例号
响应 JSON 内容的 key 是 CHANNEL_TYPE:CHANNEL_NAME 组合的字符串。
响应:
{
"errcode": 0,
"private:users.panjy<>users.zhangsan": {"count": 6, "time_start": 14354564.09},
"notify:workflow<>users.panjunyong": {"count": 1, "time_start": 12312435.12},
"group:12345": {"count": 3, "time_start": 1243543.12}
}
注意:如果您使用 edo_client 进行 API 调用,调用成功后会自动将响应中的 errcode 字段移除,避免对响应的 key 做处理时遇到意外情况,保持与旧版本兼容。
3.11 标记已读 /api/v1/message/mark_read
标记某个时间之前的所有消息为已读(包括该时间点的消息)
参数:
- account: 账户
- instance: 消息区的实例号
- channel_type: 可以为 group、private 或 notify
- timestamp: 时间戳
- group_id: 在 channel_type 为 group 时需要,群组的 ID
- category: 在 channel_type 为 notify 时需要,通知的分类
- to_user: 在 channel_type 为 private 时需要,私聊的对方用户 ID
响应:
{
"errcode": 0,
"timestamp": 123
}
响应 JSON 字段含义:
- timestamp: 传入的参数中的 timestamp 值
4 密匙管理接口
消息中心为每个实例可以设置自己的密匙,方便和第三方的用户系统集成。
4.1 /api/v1/admin/get_secret
获取查看密匙。注意:这个密匙普通用户无法得到,只有账户管理员才能得到。
传入参数:
- account: 账户
- instance: 消息区的实例号
输出密匙:
{
"errcode": 0,
"secret_key": "adfkdwe231jxwdw@asfas2d"
}
4.2 /api/v1/admin/refresh_secret
更新查看密匙, 得到一个新密匙
传入参数:
- account: 账户
- instance: 消息区的实例号
输出新的密匙:
{
"errcode": 0,
"secret": "xxx"
}
5 会话管理接口
5.1 查询站点的在线用户 /api/v1/session/online_users
参数:
- account: 账户
- instance: 消息区的实例号
- count_only: 可选 bool 值 是否只返回在线用户数;默认 true;传入 false 即同时返回所有在线用户 ID
响应:
{
"errcode": 0,
"count": 2,
"users": ["users.admin", "users.zhang3"]
}
当传入 count_only 值为 true 时,响应中不会带有 users 字段。
5.2 查询连接数(在线客户端总数) /api/v1/session/connections
查询站点当前的连接总数(在线客户端总数)。
参数:
- account: 账户
- instance: 消息区的实例号
响应:
{
"errcode": 0,
"count": 36
}
5.3 查询用户状态 /api/v1/session/user_state
查询指定一组用户的在线状态
参数:
- account: 账户
- instance: 消息区的实例号
- users: JSON序列化 列表 要查询的用户 ID 列表
响应:
{
"errcode": 0,
"online": ["users.admin", "users.user2"],
"offline": ["users.user1", "users.user3"]
}
响应 JSON 字段含义:
- online: 包含指定用户列表中所有在线用户的 ID
- offline: 包含指定用户列表中所有离线用户的 ID
5.4 过时 查询指定一个用户的详细连接信息 /api/v1/session/detail
查询指定用户的详细连接情况,包含所有在线客户端的信息。
注意:此接口从 v7.2.0 版本开始不推荐使用,并可能在后续版本中移除。 如果您使用其他工具 / 库进行 API 调用,请适时调整。 如果您使用 edo_client 进行 API 调用,则无需做任何处理:新版本的 edo_client 将自动使用新接口。
参数:
- account: 账户
- instance: 消息区的实例号
- user_id: 要查询的用户 ID
响应:
[
{
"ip": "120.120.2.34",
"ua": "Chrome/Gecko Like",
"app": "Web (Javascript)",
"connected": 1490870877,
"client_id": "xxxx"
}
]
响应 JSON 内容中每一项的字段含义:
- ip: 此连接的初始 IP 地址
- ua: 此连接申请时的 HTTP User-Agent 信息
- app: 此连接申请时的客户端名称
- connected: 此连接成功建立的时间戳
- client_id: 此连接的客户端 ID
5.5 查询指定一个用户的详细连接信息 /api/v2/session/detail
查询指定用户的详细连接情况,包含所有在线客户端的信息。
注意:此接口从 v7.2.0 版本开始支持。与旧版接口相比,主要修改是增加了 errcode 字段。
参数:
- account: 账户
- instance: 消息区的实例号
- user_id: 要查询的用户 ID
响应:
{
"errcode": 0,
"connections": [
{
"ip": "120.120.2.34",
"ua": "Chrome/Gecko Like",
"app": "Web (Javascript)",
"connected": 1490870877,
"client_id": "xxxx"
}
]
}
响应 JSON 内容中, connections 字段包含了此用户所有在线连接的详细信息,其中每一项的字段含义:
- ip: 此连接的初始 IP 地址
- ua: 此连接申请时的 HTTP User-Agent 信息
- app: 此连接申请时的客户端名称
- connected: 此连接成功建立的时间戳
- client_id: 此连接的客户端 ID
5.6 断开指定的连接 /api/v1/session/kill_connection
切断指定用户特定客户端的连接,使其进入离线状态。
参数:
- account: 账户
- instance: 消息区的实例号
- user_id: 用户的 ID
- client_id: 客户端 ID
响应:
{"errcode": 0}
5.7 断开指定用户的所有连接 /api/v1/session/kill_user
切断指定用户的所有客户端连接,使这个用户进入离线状态。
参数:
- account: 账户
- instance: 消息区的实例号
- user_id: 用户 ID
响应:
{"errcode": 0}
6 群组管理接口
6.1 更新群组信息 / 创建群组 /api/v1/group/update
如果群组不存在,将会创建这个群组;如果群组已经存在,将会更新此群组的信息。
参数:
- account: 账户
- instance: 消息区的实例号
- group_id: 群组的 ID
- group_title: 群组标题
- members: JSON序列化 列表 群组成员列表,不能为空列表
响应:
{"errcode": 0}
6.2 删除群组 /api/v1/group/remove
参数:
- account: 账户
- instance: 消息区的实例号
- group_id: 群组的 ID
响应:
{"errcode": 0}
6.3 将用户加入群组 /api/v1/group/join
如果群组不存在,将会创建这个群组,此时群组标题为空。
参数:
- account: 账户
- instance: 消息区的实例号
- group_id: 群组的ID
- members: JSON序列化 列表 要加入群组的用户ID的列表
响应:
{"errcode": 0}
6.4 将用户移出群组 /api/v1/group/leave
参数:
- account: 账户
- instance: 消息区的实例号
- group_id: 群组的ID
- members: JSON序列化 列表 要移出群组的用户ID的列表
响应:
{"errcode": 0}
7 消息网关接口
7.1 更新消息网关路由表 /api/v3/gateway/update_routes
参数:
- account: 账户
- instance: 实例号
- routes: 新的路由表
路由表的数据结构如下:
{
"site-id": {
"endpoint": "https://easydo.cn/_message/api/v3/send?account=zopen&instance=default",
"token": "example",
},
...
}
7.2 发送一个来自外部网关的消息 /api/v3/gateway/send
参数:
- account: 账户
- instance: 实例号
- msg_type: 消息类型,可选值有`private`,`group`,`notify`,分别表示私聊、群聊和通知消息。
- sender: 发信人的ID,例如`users.admin`。
- event_type: 事件类型,参见上文`trigger_*_event`的`event_type`参数。
- event_name: 事件名,参见上文`trigger_*_event`的`event_name`参数。
- event_data: 事件数据,参见上文的`trigger_*_event`的`event_data`参数。
- token: 外部网关的token,您可以在站点设置>消息设置里添加新的外部网关并设置token。
- group_id: 群组id。当您要发送一个群组消息时,应带上收信群组的id。只有在`msg_type`是`group`的时候才有用。参考上文`trigger_group_event`。
- category: 通知类型。当您要发送一个通知消息时,应带上通知的类型。只有在`msg_type`是`notify`的时候才有用。参考上文`trigger_notify_event`。
- to: 收信人id列表。您可以在私聊消息和群聊消息的`to`字段指定收信人,请参考`trigger_private_event`和`trigger_group_event`。
响应内容是这条消息的发送时间:
{
"timestamp": <时间戳>,
}
9 接口变更清单
9.1 消息 ID
在 v6.4.4 及之后版本支持使用消息ID来精确查找单条消息。
- 消息查询接口(/api/v1/message/query)增加新的可选参数 id ;
- 按任何条件进行查询时,消息查询接口(/api/v1/message/query)返回的每条消息都会携带各自的 ID;
- 发送消息的接口,在响应时,除了消息时间戳(timestamp),也会返回消息的 ID,具体包括以下接口:
- /api/v1/message/trigger_notify_event
- /api/v1/message/trigger_private_event
- /api/v1/message/trigger_group_event
在 v7.2.5 及之后版本中,使用消息ID来精确查找单条消息的功能,分离为单独的接口 /api/v1/message/get 。原有通过 /api/v1/message/query 来查询单条消息的用法仍然兼容,但可能会在后续版本中移除。请适时更新客户端代码。
9.2 通知的公告频道
在 v6.4.4 及之后版本中,通知消息增加了一个频道用于支持发送公告,此频道的 category 是 announcement。
9.3 to 和 exclude 参数
在 v7.0.0 及之后版本,以下接口中原来处于 event_data 参数值内部的字段 to 和/或 exclude 被提升为整个 API 的参数。
- /api/v1/message/trigger_notify_event
- /api/v1/message/trigger_private_event
- /api/v1/message/trigger_group_event
9.4 API 返回值
在 v7.2.0 及之后版本,除响应直接是列表类型的 API 外,其他所有 API 的响应都带有 errcode 字段。如果出现 errcode 不为 0 的情况,说明调用出现问题,在 errmsg 中含有错误的简略说明。
9.5 /api/v1/session/detail 接口
从 v7.2.0 开始,实现并推荐使用 /api/v2/session/detail 接口。
|
|
|
|