IMClient 类(Electron IMLib)

类继承图​

Object→IMClient

继承关系:Object → IMClient。初始化方法为 SDK 唯一入口;实例由初始化接口返回,不直接 new。

类说明​

IMClient 是 Electron IMLib 的入口类:持有连接与事件总线,串联连接、消息、会话、用户、好友、群组、聊天室与文件上传共 62 个语义操作。方法名与 IDL 语义 op 同名,仅调用风格与常量名随平台变化。

项值
程序包@ni-paas-im/electron
完整声明@ni-paas-im/electron
语言 / 运行时JavaScript (ESM) + TypeScript declarations; Electron main process owns IMLib + SQLite, preload exposes a whitelisted bridge, renderer is a thin proxy
初始化入口initService(options) → { client, destroy, capabilities, ... }(主进程唯一实例)
异步模型Promise<RcResult<T>>;同步方法仅 getConnectionStatus/getCurrentUserId 等本地无 IO 读取
事件 APIaddEventListener(event, handler) 返回取消函数 / removeEventListener(event, handler)
命名约定camelCase;方法名与语义 op 同名(与 web/flutter 绑定保持一致),本地库扩展挂在 localDb 命名空间下
方法总数103 个语义操作,本平台导出 103 个
平台状态已交付

概要​

方法按能力域分组。点击方法名跳转到详细说明;"签名"列逐字来自平台绑定的 methodMap。

连接与监听(7)​

方法签名(本平台绑定)说明
initinit(options: IMClientOptions): IMClient初始化 SDK(构造客户端实例)
connectconnect(token: string, opts?: {kickOtherDevice?: boolean}): Promise<RcResult<{userId: string; sessionId?: stri…使用用户 token 建立长连接:握手→hello→离线补发→sync_done
disconnectdisconnect(opts?: {closeDb?: boolean; disablePush?: boolean}): Promise<RcResult<null>>主动断开
getConnectionStatusgetConnectionStatus(): ConnectionStatus返回 ConnectionStatus 枚举值
getCurrentUserIdgetCurrentUserId(): string当前登录 userId
addEventListeneraddEventListener(event: Events, handler: (payload: unknown) => void): () => void注册事件监听
removeEventListenerremoveEventListener(event: Events, handler: Function): void移除事件监听

功能指南:建立连接、连接监听

消息(26)​

方法签名(本平台绑定)说明
sendMessagesendMessage(conversationType: ConversationType, targetId: string, content: MessageContent, options?: SendOptio…发送任意类型消息
sendTextMessagesendTextMessage(conversationType: ConversationType, targetId: string, text: string, options?: SendOptions): Pr…发送文本消息
sendImageMessagesendImageMessage(conversationType: ConversationType, targetId: string, content: {url: string; width?: number; …发送图片消息
sendFileMessagesendFileMessage(conversationType: ConversationType, targetId: string, content: {url: string; name: string; siz…发送文件消息
sendVoiceMessagesendVoiceMessage(conversationType: ConversationType, targetId: string, content: {url: string; duration: number…发送语音消息
sendLocationMessagesendLocationMessage(conversationType: ConversationType, targetId: string, content: {latitude: number; longitud…发送位置消息
sendTypingStatussendTypingStatus(conversationType: ConversationType, targetId: string, typing: boolean): Promise<RcResult<null…发送正在输入状态
recallMessagerecallMessage(messageId: string | number): Promise<RcResult<Message>>撤回消息(仅发送者、撤回时限内)
sendReadReceiptsendReadReceipt(conversationType: ConversationType, targetId: string, messageIds: string[]): Promise<RcResult<…上报已读回执
getMessageReadCountgetMessageReadCount(messageId: string | number): Promise<RcResult<{messageId: string; readCount: number; total…查询消息已读人数
getMessageReadUsersgetMessageReadUsers(messageId: string | number, options?: {offset?: number; limit?: number}): Promise<RcResult…查询已读用户明细(分页)
getMessageReadDetailgetMessageReadDetail(messageId: string | number, options?: {offset?: number; limit?: number; filter?: string})…查询单条消息的已读详情:已读/未读名单 + 具体读取时间(分页)
searchMessagessearchMessages(options: {keyword: string; limit?: number; conversationType?: ConversationType; targetId?: stri…在当前用户全部会话中搜索文本消息(倒序)
updateMessageExpansionupdateMessageExpansion(messageId: string, expansion: Record<string, string>): Promise<RcResult<MessageExpansio…更新已发送消息的扩展 KV(合并语义)
removeMessageExpansionremoveMessageExpansion(messageId: string, keys: string[]): Promise<RcResult<MessageExpansion>>删除消息扩展 KV(按 key)
addMessageReactionaddMessageReaction(params: UpdateMessageReactionParam): Promise<RcResult<MessageReaction>>为指定消息添加回应(reactionId 由业务定义,1-16 字符)
removeMessageReactionremoveMessageReaction(params: UpdateMessageReactionParam): Promise<RcResult<{ messageId: string; reactionId: s…移除自己对指定消息的回应
batchGetMessageReactionSummariesbatchGetMessageReactionSummaries(params: MessageReactionSummaryQuery): Promise<RcResult<Record<string, Message…批量查询消息回应摘要(1-100 个 messageId)
getMessageReactionsgetMessageReactions(params: GetMessageReactionsParam): Promise<RcResult<MessageReactionPage>>分页查询指定消息的回应列表(count 1-50,默认 20)
getMessageReactionUsersgetMessageReactionUsers(params: GetMessageReactionUsersParam): Promise<RcResult<MessageReactionUserPage>>分页查询某个回应的参与用户(count 1-50,默认 20)
startStreamMessagestartStreamMessage(params: StartStreamMessageParams): Promise<RcResult<StreamMessage>>开始一条流式消息(IDL rev17)
appendStreamMessageappendStreamMessage(streamId: string, delta: string, options?: AppendStreamMessageOptions): Promise<RcResult<S…追加一个流式增量(IDL rev17)
completeStreamMessagecompleteStreamMessage(streamId: string): Promise<RcResult<{ messageId: string; text: string }>>结束流式消息(IDL rev17)
getStreamMessagegetStreamMessage(streamId: string): Promise<RcResult<StreamMessage>>查询流式消息快照(IDL rev17)
getMessageExpansiongetMessageExpansion(messageId: string | number): Promise<RcResult<MessageExpansion>>读取已发送消息的扩展 KV(IDL rev19)
combineMessagescombineMessages(messages: Message[], options?: CombineMessagesOptions): Promise<RcResult<CombineContent>>本地构造合并转发内容(IDL rev19,transport=local,不做网络 IO):把 Message[] 转换为 `{type:'co…

功能指南:发送消息、接收消息、消息管理、已读回执、输入状态、消息进阶

会话(22)​

方法签名(本平台绑定)说明
getConversationListgetConversationList(options?: {limit?: number; beforeTime?: number; topPriority?: boolean}): Promise<RcResult<…会话列表:置顶优先、按 updatedAt 倒序
getConversationgetConversation(conversationType: ConversationType, targetId: string): Promise<RcResult<Conversation>>单会话详情
getHistoryMessagesgetHistoryMessages(conversationType: ConversationType, targetId: string, options?: {limit?: number; beforeSeq?…历史消息分页(beforeSeq 向前翻页)
clearUnreadCountclearUnreadCount(conversationType: ConversationType, targetId: string, options?: {untilTime?: number}): Promis…清空会话未读(等价 read 帧 + 本地清零)
setConversationToTopsetConversationToTop(conversationType: ConversationType, targetId: string, isTop: boolean): Promise<RcResult<n…会话置顶/取消
saveTextMessageDraftsaveTextMessageDraft(conversationType: ConversationType, targetId: string, draft: string): Promise<RcResult<nu…保存草稿(空串=清除)
getTextMessageDraftgetTextMessageDraft(conversationType: ConversationType, targetId: string): Promise<RcResult<string>>读取草稿
clearTextMessageDraftclearTextMessageDraft(conversationType: ConversationType, targetId: string): Promise<RcResult<null>>清除草稿
setConversationNotificationLevelsetConversationNotificationLevel(conversationType: ConversationType, targetId: string, level: NotificationLeve…会话提醒级别:0 全部 / 1 仅提及 / 2 免打扰
createConversationTagcreateConversationTag(params: CreateConversationTagParam): Promise<RcResult<ConversationTag>>创建会话标签(tagName ≤16)
updateConversationTagupdateConversationTag(tagId: string, tagName: string): Promise<RcResult<ConversationTag>>重命名会话标签
deleteConversationTagdeleteConversationTag(tagId: string): Promise<RcResult<null>>删除会话标签(同时清除标签内会话引用)
getConversationTagsgetConversationTags(): Promise<RcResult<ConversationTag[]>>获取全部会话标签(含会话数量)
addConversationsToTagaddConversationsToTag(tagId: string, conversations: ConversationRef[]): Promise<RcResult<ConversationTagMember…把会话加入标签(≤100/次,幂等)
removeConversationsFromTagremoveConversationsFromTag(tagId: string, conversations: ConversationRef[]): Promise<RcResult<ConversationTagM…把会话移出标签(≤100/次,幂等)
getConversationsFromTagByPagegetConversationsFromTagByPage(tagId: string, options?: ConversationTagPageOptions): Promise<RcResult<Conversat…分页获取标签内会话(含置顶/未读数/最后消息时间)
getTagsFromConversationgetTagsFromConversation(conversationType: ConversationTypeValue, targetId: string): Promise<RcResult<Conversat…查询某个会话所属的标签列表
getUnreadCountByTaggetUnreadCountByTag(tagId: string): Promise<RcResult<ConversationTagUnread>>标签内未读汇总(消息总数 + 有未读的会话数)
setConversationToTopInTagsetConversationToTopInTag(tagId: string, conversationType: ConversationTypeValue, targetId: string, top: boole…标签内置顶/取消置顶会话(同步会话会话级置顶状态)
deleteConversationdeleteConversation(conversationType: ConversationTypeValue, targetId: string): Promise<RcResult<{ removed: boo…删除会话记录(列表项/未读/草稿/置顶),历史消息保留
getConversationTypeNotificationgetConversationTypeNotification(conversationType: ConversationTypeValue): Promise<RcResult<{ conversationType:…查询按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)
setConversationTypeNotificationsetConversationTypeNotification(conversationType: ConversationTypeValue, level: 0 | 1 | 2): Promise<RcResult<{…设置按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)

功能指南:历史消息、会话列表、未读数、草稿、置顶与免打扰、会话标签与分组、会话删除与类型免打扰

用户(10)​

方法签名(本平台绑定)说明
getUserProfilegetUserProfile(userId: string): Promise<RcResult<UserProfile>>查询用户资料
updateMyUserProfileupdateMyUserProfile(profile: {name?: string; avatarUrl?: string}): Promise<RcResult<UserProfile>>修改本人资料(name/avatarUrl)
getOnlineStatusgetOnlineStatus(userId: string): Promise<RcResult<{userId: string; online: boolean; sessionCount: number}>>查询单个用户在线状态
getOnlineStatusBatchgetOnlineStatusBatch(userIds: string[]): Promise<RcResult<{items: Array<{userId: string; online: boolean; sess…批量在线状态(<=100)
subscribePresencesubscribePresence(userIds: string[]): Promise<RcResult<{subscribed: string[]}>>订阅用户在线状态(IDL rev20)
unsubscribePresenceunsubscribePresence(userIds: string[]): Promise<RcResult<{subscribed: string[]}>>取消订阅用户在线状态(IDL rev20)
getPresenceSubscriptionsgetPresenceSubscriptions(): Promise<RcResult<{userId: string, subscribed: string[]}>>查询当前用户的在线状态订阅列表(IDL rev20)
registerPushTokenregisterPushToken(options: RegisterPushTokenOptions): Promise<RcResult<PushToken>>注册设备推送 token(IDL rev21 C23 收口)
unregisterPushTokenunregisterPushToken(tokenId: string): Promise<RcResult<UnregisterPushTokenResult>>注销本人设备推送 token(IDL rev21 C23)
getPushTokensgetPushTokens(): Promise<RcResult<PushTokenListResult>>查询本人设备推送 token(IDL rev21 C23)

功能指南:用户资料、在线状态、在线状态订阅与推送令牌

好友与黑名单(11)​

方法签名(本平台绑定)说明
searchUserssearchUsers(keyword: string, options?: {limit?: number}): Promise<RcResult<{users: Array<{userId: string; name…搜索用户(userId/name,大小写不敏感,排除自己)
sendFriendRequestsendFriendRequest(toUserId: string, message?: string): Promise<RcResult<FriendRequest>>发起好友申请
getFriendRequestsgetFriendRequests(options?: {type?: 'incoming' | 'outgoing'; status?: 'pending' | 'all'}): Promise<RcResult<Fr…好友申请列表(incoming/outgoing,pending/all)
acceptFriendRequestacceptFriendRequest(requestId: string): Promise<RcResult<FriendRequest>>同意申请,双向建立好友关系
rejectFriendRequestrejectFriendRequest(requestId: string): Promise<RcResult<FriendRequest>>拒绝申请
getFriendsgetFriends(): Promise<RcResult<Array<{userId: string; name?: string; avatarUrl?: string; remark?: string; onli…好友列表(含备注/在线/拉黑标记)
deleteFrienddeleteFriend(friendId: string): Promise<RcResult<null>>双向删除好友
setFriendRemarksetFriendRemark(friendId: string, remark: string): Promise<RcResult<null>>设置好友备注(<=64 字,空串清除)
getBlacklistgetBlacklist(): Promise<RcResult<Array<{userId: string; name?: string}>>>黑名单列表
addToBlacklistaddToBlacklist(userId: string): Promise<RcResult<null>>加入黑名单(幂等)
removeFromBlacklistremoveFromBlacklist(userId: string): Promise<RcResult<null>>移出黑名单

功能指南:好友列表、好友请求、黑名单

群组(20)​

方法签名(本平台绑定)说明
createGroupcreateGroup(options: {groupId?: string; name: string; owner?: string; members?: string[]; groupType?: GroupTyp…创建群(groupType 缺省 normal)
getGroupsInfogetGroupsInfo(groupIds: string[]): Promise<RcResult<Group[]>>批量查询群信息(<=20)
getGroupMembersgetGroupMembers(groupId: string): Promise<RcResult<GroupMember[]>>群成员列表(含角色/禁言)
addGroupMembersaddGroupMembers(groupId: string, userIds: string[]): Promise<RcResult<{added: string[]; group: Group}>>拉人入群(群主/管理员)
removeGroupMembersremoveGroupMembers(groupId: string, userIds: string[]): Promise<RcResult<{removed: string[]}>>移除成员(群主/管理员)
quitGroupquitGroup(groupId: string): Promise<RcResult<null>>退出群
updateGroupNameupdateGroupName(groupId: string, name: string): Promise<RcResult<Group>>修改群名(群主/管理员)
updateGroupNoticeupdateGroupNotice(groupId: string, notice: string): Promise<RcResult<Group>>设置群公告(群主/管理员,<=500 字,空串清除)
transferGroupOwnertransferGroupOwner(groupId: string, newOwner: string): Promise<RcResult<Group>>转让群主(新群主须为成员)
addGroupAdminaddGroupAdmin(groupId: string, userId: string): Promise<RcResult<Group>>设置管理员(群主,幂等)
removeGroupAdminremoveGroupAdmin(groupId: string, userId: string): Promise<RcResult<Group>>取消管理员(群主)
muteGroupMembermuteGroupMember(groupId: string, userId: string, mutedUntil: number): Promise<RcResult<{groupId: string; userI…禁言/解禁(群主/管理员)
createSupergroupChannelcreateSupergroupChannel(params: CreateSupergroupChannelParams): Promise<RcResult<SupergroupChannel>>创建超级群频道(IDL rev21 C17)
listSupergroupChannelslistSupergroupChannels(groupId: string): Promise<RcResult<SupergroupChannelListResult>>超级群频道列表(IDL rev21 C17)
joinSupergroupChanneljoinSupergroupChannel(channelId: string, options?: SupergroupChannelOptions): Promise<RcResult<JoinSupergroupC…加入超级群频道(IDL rev21 C17)
leaveSupergroupChannelleaveSupergroupChannel(channelId: string, options?: SupergroupChannelOptions): Promise<RcResult<LeaveSupergrou…离开超级群频道(IDL rev21 C17)
bindUserGroupToChannelbindUserGroupToChannel(channelId: string, userGroupId: string, options?: SupergroupChannelOptions): Promise<Rc…把用户组绑定到频道(IDL rev21 C17)
createUserGroupcreateUserGroup(params: CreateUserGroupParams): Promise<RcResult<UserGroup>>创建超级群用户组(IDL rev21 C17)
listUserGroupslistUserGroups(groupId: string): Promise<RcResult<UserGroupListResult>>超级群用户组列表(IDL rev21 C17)
getUserGroupsByUsergetUserGroupsByUser(userId: string, options?: SupergroupChannelOptions): Promise<RcResult<UserGroupListResult>…查询某用户所在的所有用户组(IDL rev21 C17)

功能指南:创建群组、群成员、群管理、超级群频道与用户组

聊天室(5)​

方法签名(本平台绑定)说明
createChatroomcreateChatroom(options: {chatroomId?: string; name: string; owner?: string}): Promise<RcResult<Chatroom>>创建聊天室(客户端能力)
joinChatroomjoinChatroom(chatroomId: string): Promise<RcResult<Chatroom>>加入聊天室:发送 chatroom_join,收到 chatroom_joined
leaveChatroomleaveChatroom(chatroomId: string): Promise<RcResult<null>>离开聊天室
getChatroomInfogetChatroomInfo(chatroomId: string): Promise<RcResult<Chatroom>>聊天室信息(含在线数)
getChatroomMembersgetChatroomMembers(chatroomId: string, options?: {offset?: number; limit?: number}): Promise<RcResult<{members…聊天室在线成员列表

功能指南:加入与退出、聊天室信息

系统通知(1)​

方法签名(本平台绑定)说明
getSystemMessagesgetSystemMessages(options?: {limit?: number; beforeSeq?: number}): Promise<RcResult<{messages: Message[]; hasM…系统通知历史(会话 conversationType=SYSTEM,targetId='system')

功能指南:系统通知

文件上传(1)​

方法签名(本平台绑定)说明
uploadFileuploadFile(data: Uint8Array | Blob | {path: string}, name: string, mime?: string, options?: {onProgress?: (per…上传文件(<=20MB),返回可用于图片/文件/语音消息的 url

功能指南:文件上传

详细成员说明​

连接与监听(7)​

init(options: IMClientOptions): IMClient
自 1.0.0本地(无 IO)幂等

初始化 SDK(构造客户端实例)。幂等:同 appkey 重复初始化返回同一实例。 可能错误码:1001 参数错误。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
options{appkey:string, serverUrl?:string, timeoutMs?:uint32, transport?:any}可选参数对象
返回

IMClient 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
import { initService } from '@ni-paas-im/electron';

const client = initService({
  appkey: '<appkey>',
  serverUrl: 'http://127.0.0.1:8080',
});
connect(token: string, opts?: {kickOtherDevice?: boolean}): Promise<RcResult<{userId: string; sessionId?: string}>>
自 1.0.0长连接(WebSocket)

使用用户 token 建立长连接:握手→hello→离线补发→sync_done;成功后触发 CONNECTED。失败按协议重连策略重试。 可能错误码:1002 Token 无效或已过期、1016 账号已被封禁、1017 应用已停用、2001 服务端内部错误、2002 依赖服务不可用、3002 请求超时、3003 网络错误。 可能触发事件:CONNECTING、CONNECTED。

参数
参数类型说明
tokenstring见类型定义
返回

{userId:string, sessionId?:string} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.connect('<user-token>');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
disconnect(opts?: {closeDb?: boolean; disablePush?: boolean}): Promise<RcResult<null>>
自 1.0.0长连接(WebSocket)幂等

主动断开;停止重连、清理心跳与待决请求。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 该操作幂等:重复调用不会产生额外副作用。

返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.disconnect();
getConnectionStatus(): ConnectionStatus
自 1.0.0本地(无 IO)

返回 ConnectionStatus 枚举值。 可能错误码:无特定错误码(通用错误见 ErrorCode)。

返回

ConnectionStatus 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const value = client.getConnectionStatus();
console.log(value);
getCurrentUserId(): string
自 1.0.0本地(无 IO)

当前登录 userId;未登录返回空串。 可能错误码:无特定错误码(通用错误见 ErrorCode)。

返回

string 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const value = client.getCurrentUserId();
console.log(value);
addEventListener(event: Events, handler: (payload: unknown) => void): () => void
自 1.0.0本地(无 IO)幂等

注册事件监听;同一 handler 重复注册只生效一次。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
eventstring事件名,取值见 EventType
handlerfunction事件处理函数(注册与移除需传同一引用)
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
const handler = (payload) => {
  console.log(payload);
};

client.addEventListener(Events.MESSAGES, handler);
removeEventListener(event: Events, handler: Function): void
自 1.0.0本地(无 IO)幂等

移除事件监听。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
eventstring事件名,取值见 EventType
handlerfunction事件处理函数(注册与移除需传同一引用)
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.removeEventListener(Events.MESSAGES, handler);

消息(26)​

sendMessage(conversationType: ConversationType, targetId: string, content: MessageContent, options?: SendOptions): Promise<RcResult<Message>>
自 1.0.0长连接(WebSocket)

发送任意类型消息。优先走长连接;连接不可用(SUSPEND/DISCONNECTED)时按 SDK_NO_CONNECTION 失败并保留本地待发队列(可选实现)。rev23:options.channelId 用于超级群频道消息(conversationType=10),仅频道成员接收;消息模型带 channelId。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1005 群组不存在、1006 未加入群组、1007 消息体过大(上限 5KB)、1008 发送过于频繁、1009 你已被禁言、1010 内容包含敏感词、1011 已被对方拉黑或你已拉黑对方 等 17 个。 可能触发事件:MESSAGES、CONVERSATION。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
contentContent消息内容体,字段见 MessageContent
options{clientMsgId?:string, channelId?:string}可选参数对象(可选)
返回

Message 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendMessage(ConversationType.PRIVATE, 'user_001', { type: 'text', text: 'Hello, NI PaaS!' });
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendTextMessage(conversationType: ConversationType, targetId: string, text: string, options?: SendOptions): Promise<RcResult<Message>>
自 1.0.0长连接(WebSocket)

发送文本消息;内部等价 sendMessage(content={type:'text',text,mentionedInfo?,quote?})。 可能错误码:1001 参数错误、1007 消息体过大(上限 5KB)、1009 你已被禁言、1010 内容包含敏感词、1011 已被对方拉黑或你已拉黑对方、3001 长连接未就绪、3002 请求超时。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
textstring文本消息内容(非空,序列化后 ≤ 5KB)
options{clientMsgId?:string, mentionedInfo?:MentionedInfo, quote?:Quote, channelId?:string}可选参数对象(可选)
返回

Message 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendTextMessage(ConversationType.PRIVATE, 'user_001', 'Hello, NI PaaS!');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendImageMessage(conversationType: ConversationType, targetId: string, content: {url: string; width?: number; height?: number; size?: number; localPath?: string}, options?: SendOptions): Promise<RcResult<Message>>
自 1.0.0长连接(WebSocket)

发送图片消息;url 由 uploadFile 或业务方上传得到。 可能错误码:1001 参数错误、1007 消息体过大(上限 5KB)、1009 你已被禁言、1011 已被对方拉黑或你已拉黑对方、3001 长连接未就绪。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
content{url:string,width?:uint32,height?:uint32,size?:uint64}消息内容体,字段见 MessageContent
options{clientMsgId?:string, channelId?:string}可选参数对象(可选)
返回

Message 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendImageMessage(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendFileMessage(conversationType: ConversationType, targetId: string, content: {url: string; name: string; size?: number; mime?: string; localPath?: string}, options?: SendOptions): Promise<RcResult<Message>>
自 1.0.0长连接(WebSocket)

发送文件消息。 可能错误码:1001 参数错误、1007 消息体过大(上限 5KB)、1009 你已被禁言、1011 已被对方拉黑或你已拉黑对方、3001 长连接未就绪。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
content{url:string,name:string,size?:uint64,mime?:string}消息内容体,字段见 MessageContent
options{clientMsgId?:string, channelId?:string}可选参数对象(可选)
返回

Message 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendFileMessage(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendVoiceMessage(conversationType: ConversationType, targetId: string, content: {url: string; duration: number; localPath?: string}, options?: SendOptions): Promise<RcResult<Message>>
自 1.0.0长连接(WebSocket)

发送语音消息;duration 秒 1..300。 可能错误码:1001 参数错误、1007 消息体过大(上限 5KB)、1009 你已被禁言、1011 已被对方拉黑或你已拉黑对方、3001 长连接未就绪。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
content{url:string,duration:uint32}消息内容体,字段见 MessageContent
options{clientMsgId?:string, channelId?:string}可选参数对象(可选)
返回

Message 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendVoiceMessage(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendLocationMessage(conversationType: ConversationType, targetId: string, content: {latitude: number; longitude: number; address?: string}, options?: SendOptions): Promise<RcResult<Message>>
自 1.0.0长连接(WebSocket)

发送位置消息;lat/lng 范围校验。 可能错误码:1001 参数错误、1007 消息体过大(上限 5KB)、1009 你已被禁言、1011 已被对方拉黑或你已拉黑对方、3001 长连接未就绪。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
content{latitude:double,longitude:double,address?:string}消息内容体,字段见 MessageContent
options{clientMsgId?:string, channelId?:string}可选参数对象(可选)
返回

Message 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendLocationMessage(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendTypingStatus(conversationType: ConversationType, targetId: string, typing: boolean): Promise<RcResult<null>>
自 1.0.0长连接(WebSocket)

发送正在输入状态;不持久化;对端触发 TYPING 事件。 可能错误码:1004 用户不存在、1005 群组不存在、1006 未加入群组、1008 发送过于频繁、3001 长连接未就绪。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
typingbooltrue=正在输入,false=停止输入
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.sendTypingStatus(ConversationType.PRIVATE, 'user_001', true);
recallMessage(messageId: string | number): Promise<RcResult<Message>>
自 1.0.0长连接(WebSocket)

撤回消息(仅发送者、撤回时限内)。成功后本地与对端收到 MESSAGE_RECALLED。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1022 超过撤回时限、1023 消息已撤回、3001 长连接未就绪。 可能触发事件:MESSAGE_RECALLED、CONVERSATION。

参数
参数类型说明
messageIdstring消息 ID(服务端生成的 messageId)
返回

Message 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.recallMessage('msg_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendReadReceipt(conversationType: ConversationType, targetId: string, messageIds: string[]): Promise<RcResult<{messageIds: string[]; readCounts?: Record<string, number>; totalMembers?: number}>>
自 1.0.0长连接(WebSocket)

上报已读回执;服务端记录唯一读者并推送给消息发送者。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、3001 长连接未就绪。 可能触发事件:READ_RECEIPT。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
messageIdsstring[]消息 ID 列表
返回

{messageIds:string[], readCounts?:map<string,uint32>, totalMembers?:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendReadReceipt(ConversationType.PRIVATE, 'user_001', ['msg_001']);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getMessageReadCount(messageId: string | number): Promise<RcResult<{messageId: string; readCount: number; totalMembers: number}>>
自 1.0.0REST(HTTP)

查询消息已读人数。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在。

参数
参数类型说明
messageIdstring消息 ID(服务端生成的 messageId)
返回

{messageId:string, readCount:uint32, totalMembers:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getMessageReadCount('msg_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getMessageReadUsers(messageId: string | number, options?: {offset?: number; limit?: number}): Promise<RcResult<{messageId: string; readCount: number; totalMembers: number; readers: UserProfile[]}>>
自 1.0.0REST(HTTP)

查询已读用户明细(分页)。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在。

参数
参数类型说明
messageIdstring消息 ID(服务端生成的 messageId)
options{offset?:uint32, limit?:uint32}可选参数对象(可选)
返回

{messageId:string, readCount:uint32, totalMembers:uint32, readers:UserProfile[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getMessageReadUsers('msg_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getMessageReadDetail(messageId: string | number, options?: {offset?: number; limit?: number; filter?: string}): Promise<RcResult<{messageId: string; readCount: number; unreadCount: number; totalMembers: number; items: MessageReadDetailItem[]; hasMore: boolean}>>
自 1.7.0REST(HTTP)

查询单条消息的已读详情:已读/未读名单 + 具体读取时间(分页;filter=all|read|unread,默认 all)。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在。

参数
参数类型说明
messageIdstring消息 ID(服务端生成的 messageId)
options{offset?:uint32, limit?:uint32, filter?:string}可选参数对象(可选)
返回

{messageId:string, readCount:uint32, unreadCount:uint32, totalMembers:uint32, filter:string, offset:uint32, limit:uint32, total:uint32, hasMore:boolean, items:MessageReadDetailItem[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getMessageReadDetail('msg_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
searchMessages(options: {keyword: string; limit?: number; conversationType?: ConversationType; targetId?: string; range?: {start?: number; end?: number}}): Promise<RcResult<{messages: Message[]; total: number}>>
自 1.0.0REST(HTTP)

在当前用户全部会话中搜索文本消息(倒序)。 可能错误码:1001 参数错误、1003 无权限。

参数
参数类型说明
options{keyword:string, limit?:uint32}可选参数对象
返回

{messages:Message[], total:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.searchMessages();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
updateMessageExpansion(messageId: string, expansion: Record<string, string>): Promise<RcResult<MessageExpansion>>
自 1.1.0REST(HTTP)

更新已发送消息的扩展 KV(合并语义)。仅单聊/群聊/超级群支持,且消息须在发送时开启可扩展;单次 ≤20 对、单条 ≤300 对,key 1-32 字符 [A-Za-z0-9+=_-]、value ≤4096。 可能错误码:1001 参数错误、1004 用户不存在、1026 消息不可扩展(发送时未开启可扩展,或会话类型不支持)、1027 消息扩展超出限制(单次 20 对 / 单条 300 对 / 键值长度)。

参数
参数类型说明
messageIdstring消息 ID(服务端生成的 messageId)
expansionRecord<string,string>见类型定义
返回

{messageId:string, expansion:Record<string,string>} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.updateMessageExpansion('msg_001', undefined, undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
removeMessageExpansion(messageId: string, keys: string[]): Promise<RcResult<MessageExpansion>>
自 1.1.0REST(HTTP)

删除消息扩展 KV(按 key)。语义与融云 removeMessageExpansion 对齐:消息须可扩展,删除不存在的 key 不报错。 可能错误码:1001 参数错误、1004 用户不存在、1026 消息不可扩展(发送时未开启可扩展,或会话类型不支持)。

参数
参数类型说明
messageIdstring消息 ID(服务端生成的 messageId)
keysstring[]见类型定义
返回

{messageId:string, removed:string[], expansion:Record<string,string>} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.removeMessageExpansion('msg_001', undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
addMessageReaction(params: UpdateMessageReactionParam): Promise<RcResult<MessageReaction>>
自 1.1.0REST(HTTP)

为指定消息添加回应(reactionId 由业务定义,1-16 字符;同一用户对同一消息同一 reactionId 重复添加视为幂等)。单条消息最多 50 种回应、每种回应最多 100 个用户。 可能错误码:1001 参数错误、1004 用户不存在、1028 回应标识非法(1-16 字符)、1029 单条消息回应种类超出上限(50)、1030 单个回应参与用户超出上限(100)。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
messageIdstring消息 ID(服务端生成的 messageId)
reactionIdstring见类型定义
options{pushConfig?:object}可选参数对象(可选)
返回

{messageId:string, reactionId:string, userId:string, reactionTime:uint64} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.addMessageReaction(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
removeMessageReaction(params: UpdateMessageReactionParam): Promise<RcResult<{ messageId: string; reactionId: string; removed: boolean }>>
自 1.1.0REST(HTTP)

移除自己对指定消息的回应;reactionId 须与添加时一致,未添加过时返回成功(removed=false)。 可能错误码:1001 参数错误、1004 用户不存在、1028 回应标识非法(1-16 字符)。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
messageIdstring消息 ID(服务端生成的 messageId)
reactionIdstring见类型定义
返回

{messageId:string, reactionId:string, removed:boolean} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.removeMessageReaction(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
batchGetMessageReactionSummaries(params: MessageReactionSummaryQuery): Promise<RcResult<Record<string, MessageReactionSummary[]>>>
自 1.1.0REST(HTTP)

批量查询消息回应摘要(1-100 个 messageId)。返回按 messageId 分组:每个回应含总数、当前用户是否已回应、最近参与用户(最多 10 个);不存在回应的消息返回空数组。 可能错误码:1001 参数错误、1004 用户不存在。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
messageIdsstring[]消息 ID 列表
返回

Record<string, ReactionSummary[]>(ReactionSummary={reactionId:string,totalCount:uint32,hasCurrentUserReacted:boolean,reactionTime:uint64,users:{userId:string,reactionTime:uint64}[]}) 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.batchGetMessageReactionSummaries(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getMessageReactions(params: GetMessageReactionsParam): Promise<RcResult<MessageReactionPage>>
自 1.1.0REST(HTTP)

分页查询指定消息的回应列表(count 1-50,默认 20;pageToken 不透明,空串表示第一页)。 可能错误码:1001 参数错误、1004 用户不存在。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
messageIdstring消息 ID(服务端生成的 messageId)
options{count?:uint32, pageToken?:string}可选参数对象(可选)
返回

{reactions:ReactionSummary[], pageToken?:string, totalCount:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getMessageReactions(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getMessageReactionUsers(params: GetMessageReactionUsersParam): Promise<RcResult<MessageReactionUserPage>>
自 1.1.0REST(HTTP)

分页查询某个回应的参与用户(count 1-50,默认 20;pageToken 不透明)。 可能错误码:1001 参数错误、1004 用户不存在、1028 回应标识非法(1-16 字符)。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
messageIdstring消息 ID(服务端生成的 messageId)
reactionIdstring见类型定义
options{count?:uint32, pageToken?:string}可选参数对象(可选)
返回

{users:{userId:string,reactionTime:uint64}[], pageToken?:string, totalCount:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getMessageReactionUsers(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
startStreamMessage(params: StartStreamMessageParams): Promise<RcResult<StreamMessage>>
自 1.2.0REST(HTTP)

开始一条流式消息(IDL rev17;客户端 REST `POST /api/apps/{appkey}/messages/stream/start`)。发送者取自用户 token;`content.text` 作为初始文本。返回 StreamMessage(streamId/messageId/status='streaming'/createdAt/text/segments),SDK 本地保留一个可增量渲染的流式占位消息。支持单聊(1)、群聊(2)、系统通知(4);聊天室(3)暂不支持(1001)。 可能错误码:1001 参数错误、1004 用户不存在、1005 群组不存在。

参数
参数类型说明
params{conversationType:ConversationType, targetId:string, content?:Content}见类型定义
返回

StreamMessage 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.startStreamMessage(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
appendStreamMessage(streamId: string, delta: string, options?: AppendStreamMessageOptions): Promise<RcResult<StreamMessage>>
自 1.2.0REST(HTTP)

追加一个流式增量(IDL rev17;客户端 REST `POST /api/apps/{appkey}/messages/stream/append`),返回累计文本/分段/状态的 StreamMessage;服务端同时向会话全部在线参与者广播 `stream_changed`(complete=false)。`seq` 重复时覆盖该段(乱序安全)。仅流发送者可调用(其他人 1003);流不存在 1001、已结束 1001。 可能错误码:1001 参数错误、1003 无权限。 可能触发事件:STREAM_MESSAGE_CHANGED。

参数
参数类型说明
streamIdstring见类型定义
deltastring见类型定义
options{seq?:uint32}可选参数对象(可选)
返回

StreamMessage 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.appendStreamMessage('value', 'value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
completeStreamMessage(streamId: string): Promise<RcResult<{ messageId: string; text: string }>>
自 1.2.0REST(HTTP)

结束流式消息(IDL rev17;客户端 REST `POST /api/apps/{appkey}/messages/stream/end`):累计文本按 start 预分配的 messageId 落库为一条普通文本消息(恰一次),随后广播 `stream_changed`(complete=true)。返回 {streamId,messageId,text,status,complete,message?}。仅流发送者可调用(1003);空文本或已结束 1001。 可能错误码:1001 参数错误、1003 无权限。 可能触发事件:STREAM_MESSAGE_CHANGED、MESSAGES。

参数
参数类型说明
streamIdstring见类型定义
返回

{streamId:string, messageId:string, text:string, status:streaming|ended, complete:bool, message?:Message} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.completeStreamMessage('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getStreamMessage(streamId: string): Promise<RcResult<StreamMessage>>
自 1.2.0REST(HTTP)幂等

查询流式消息快照(IDL rev17;客户端 REST `GET /api/apps/{appkey}/messages/stream/{streamId}`),与 append 响应同形(StreamMessage)。仅会话参与者可见(单聊双方、群成员、聊天室在线成员;其他人 1003);未知流 1001。 可能错误码:1001 参数错误、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
streamIdstring见类型定义
返回

StreamMessage 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getStreamMessage('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getMessageExpansion(messageId: string | number): Promise<RcResult<MessageExpansion>>
自 1.3.0REST(HTTP)幂等

读取已发送消息的扩展 KV(IDL rev19;客户端 REST `GET /api/apps/{appkey}/messages/{messageId}/expansion`),返回 `{messageId, expansion}`;无扩展/已全部删除时 expansion 为空 map。仅会话参与者可读(非参与者 1003);未知消息 1001;单聊对端用户不存在 1004、群不存在 1005、聊天室消息 1012。只读、幂等、不触发事件(写入仍由 updateMessageExpansion / removeMessageExpansion 完成)。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1005 群组不存在、1012 聊天室不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
messageIdstring消息 ID(服务端生成的 messageId)
返回

{messageId:string, expansion:Record<string,string>} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getMessageExpansion('msg_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
combineMessages(messages: Message[], options?: CombineMessagesOptions): Promise<RcResult<CombineContent>>
自 1.3.0本地(无 IO)幂等

本地构造合并转发内容(IDL rev19,transport=local,不做网络 IO):把 Message[] 转换为 `{type:'combine', title, items:[{senderId,senderName?,contentType,text?,timestamp?}]}`(`CombineContent`),随后直接 `sendMessage(conversationType, targetId, content)`。items 必须 1..=100(本地 1001);title <=64 字(缺省 ` 条聊天记录`);条目 text 按 textMaxChars(缺省 300)截断、全部条目合计 <=16KB;构造结果序列化后仍受 `limits.messageBytes`(5KB)约束,发送时超限为 1007。 可能错误码:1001 参数错误。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
messagesMessage[]见类型定义
options{title?:string, senderNames?:Record<string,string>, textMaxChars?:uint32}可选参数对象(可选)
返回

CombineContent 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.combineMessages(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);

会话(22)​

getConversationList(options?: {limit?: number; beforeTime?: number; topPriority?: boolean}): Promise<RcResult<Conversation[]>>
自 1.0.0REST(HTTP)

会话列表:置顶优先、按 updatedAt 倒序;含未读/提及/草稿/免打扰。 可能错误码:无特定错误码(通用错误见 ErrorCode)。

返回

Conversation[] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getConversationList();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getConversation(conversationType: ConversationType, targetId: string): Promise<RcResult<Conversation>>
自 1.0.0REST(HTTP)

单会话详情。 可能错误码:1001 参数错误。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
返回

Conversation 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getConversation(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getHistoryMessages(conversationType: ConversationType, targetId: string, options?: {limit?: number; beforeSeq?: number; beforeTime?: number; order?: 0 | 1; source?: 'local' | 'remote' | 'auto'}): Promise<RcResult<{messages: Message[]; hasMore: boolean}>>
自 1.0.0REST(HTTP)

历史消息分页(beforeSeq 向前翻页);limit 默认 20 上限 100。rev23:channelId 过滤超级群频道消息(仅返回该频道消息)。 可能错误码:1001 参数错误、1003 无权限。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
options{limit?:uint32, beforeSeq?:uint64, channelId?:string}可选参数对象(可选)
返回

{messages:Message[], hasMore:bool} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getHistoryMessages(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
clearUnreadCount(conversationType: ConversationType, targetId: string, options?: {untilTime?: number}): Promise<RcResult<null>>
自 1.0.0长连接(WebSocket)幂等

清空会话未读(等价 read 帧 + 本地清零)。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 可能触发事件:CONVERSATION。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.clearUnreadCount(ConversationType.PRIVATE, 'user_001');
setConversationToTop(conversationType: ConversationType, targetId: string, isTop: boolean): Promise<RcResult<null>>
自 1.0.0REST(HTTP)幂等

会话置顶/取消。 可能错误码:1001 参数错误、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
isTopbooltrue=置顶,false=取消置顶
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.setConversationToTop(ConversationType.PRIVATE, 'user_001', true);
saveTextMessageDraft(conversationType: ConversationType, targetId: string, draft: string): Promise<RcResult<null>>
自 1.0.0REST(HTTP)幂等

保存草稿(空串=清除)。 可能错误码:1001 参数错误、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
draftstring草稿文本
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.saveTextMessageDraft(ConversationType.PRIVATE, 'user_001', '明天见');
getTextMessageDraft(conversationType: ConversationType, targetId: string): Promise<RcResult<string>>
自 1.0.0REST(HTTP)

读取草稿;无草稿返回空串。 可能错误码:1001 参数错误、1003 无权限。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
返回

string 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getTextMessageDraft(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
clearTextMessageDraft(conversationType: ConversationType, targetId: string): Promise<RcResult<null>>
自 1.0.0REST(HTTP)幂等

清除草稿。 可能错误码:1001 参数错误、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.clearTextMessageDraft(ConversationType.PRIVATE, 'user_001');
setConversationNotificationLevel(conversationType: ConversationType, targetId: string, level: NotificationLevel): Promise<RcResult<null>>
自 1.0.0REST(HTTP)幂等

会话提醒级别:0 全部 / 1 仅提及 / 2 免打扰。 可能错误码:1001 参数错误、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
levelNotificationLevel提醒级别,取值见 NotificationLevel
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.setConversationNotificationLevel(ConversationType.PRIVATE, 'user_001', NotificationLevel.MUTED);
createConversationTag(params: CreateConversationTagParam): Promise<RcResult<ConversationTag>>
自 1.2.0REST(HTTP)

创建会话标签(tagName ≤16;单用户 ≤20 个,超出抛 1031)。 可能错误码:1001 参数错误、1031 单用户会话标签数超过上限(20)。

参数
参数类型说明
tagNamestring见类型定义
options{tagId?:string}可选参数对象(可选)
返回

ConversationTag 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.createConversationTag(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
updateConversationTag(tagId: string, tagName: string): Promise<RcResult<ConversationTag>>
自 1.2.0REST(HTTP)幂等

重命名会话标签。 可能错误码:1001 参数错误、1032 标签不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tagIdstring见类型定义
tagNamestring见类型定义
返回

ConversationTag 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.updateConversationTag('value', 'value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
deleteConversationTag(tagId: string): Promise<RcResult<null>>
自 1.2.0REST(HTTP)幂等

删除会话标签(同时清除标签内会话引用)。 可能错误码:1032 标签不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tagIdstring见类型定义
返回

void 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.deleteConversationTag('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getConversationTags(): Promise<RcResult<ConversationTag[]>>
自 1.2.0REST(HTTP)幂等

获取全部会话标签(含会话数量)。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 该操作幂等:重复调用不会产生额外副作用。

返回

ConversationTag[] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getConversationTags();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
addConversationsToTag(tagId: string, conversations: ConversationRef[]): Promise<RcResult<ConversationTagMembershipResult>>
自 1.2.0REST(HTTP)幂等

把会话加入标签(≤100/次,幂等;≤1000/标签,超出抛 1033)。 可能错误码:1001 参数错误、1032 标签不存在、1033 标签内会话数超过上限(1000)。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tagIdstring见类型定义
conversationsConversationRef[]见类型定义
返回

{added:int, existing:int, conversationCount:int} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.addConversationsToTag('value', undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
removeConversationsFromTag(tagId: string, conversations: ConversationRef[]): Promise<RcResult<ConversationTagMembershipResult>>
自 1.2.0REST(HTTP)幂等

把会话移出标签(≤100/次,幂等)。 可能错误码:1001 参数错误、1032 标签不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tagIdstring见类型定义
conversationsConversationRef[]见类型定义
返回

{removed:int, conversationCount:int} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.removeConversationsFromTag('value', undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getConversationsFromTagByPage(tagId: string, options?: ConversationTagPageOptions): Promise<RcResult<ConversationTagPage>>
自 1.2.0REST(HTTP)幂等

分页获取标签内会话(含置顶/未读数/最后消息时间)。 可能错误码:1032 标签不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tagIdstring见类型定义
options{offset?:uint32, limit?:uint32}可选参数对象(可选)
返回

{total:int, items:ConversationTagConversation[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getConversationsFromTagByPage('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getTagsFromConversation(conversationType: ConversationTypeValue, targetId: string): Promise<RcResult<ConversationTag[]>>
自 1.2.0REST(HTTP)幂等

查询某个会话所属的标签列表。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
返回

ConversationTag[] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getTagsFromConversation(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getUnreadCountByTag(tagId: string): Promise<RcResult<ConversationTagUnread>>
自 1.2.0REST(HTTP)幂等

标签内未读汇总(消息总数 + 有未读的会话数)。 可能错误码:1032 标签不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tagIdstring见类型定义
返回

{unreadCount:int, unreadConversations:int, conversationCount:int} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getUnreadCountByTag('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
setConversationToTopInTag(tagId: string, conversationType: ConversationTypeValue, targetId: string, top: boolean): Promise<RcResult<null>>
自 1.2.0REST(HTTP)幂等

标签内置顶/取消置顶会话(同步会话会话级置顶状态)。 可能错误码:1001 参数错误、1034 会话不存在(标签内置顶等操作要求会话已在标签内)。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tagIdstring见类型定义
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
topbool见类型定义
返回

void 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.setConversationToTopInTag('value', ConversationType.PRIVATE, 'user_001', undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
deleteConversation(conversationType: ConversationTypeValue, targetId: string): Promise<RcResult<{ removed: boolean }>>
自 1.2.0REST(HTTP)幂等

删除会话记录(列表项/未读/草稿/置顶),历史消息保留;同时从标签移除;幂等。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
targetIdstring目标 ID:单聊为对方 userId,群组为 groupId,聊天室为 chatroomId
返回

{removed:bool} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.deleteConversation(ConversationType.PRIVATE, 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getConversationTypeNotification(conversationType: ConversationTypeValue): Promise<RcResult<{ conversationType: number; level: number }>>
自 1.2.0REST(HTTP)幂等

查询按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)。 可能错误码:1001 参数错误。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
返回

{conversationType:int, level:int} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getConversationTypeNotification(ConversationType.PRIVATE);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
setConversationTypeNotification(conversationType: ConversationTypeValue, level: 0 | 1 | 2): Promise<RcResult<{ conversationType: number; level: number }>>
自 1.2.0REST(HTTP)幂等

设置按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)。 可能错误码:1001 参数错误。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
conversationTypeConversationType会话类型,取值见 ConversationType
levelint提醒级别,取值见 NotificationLevel
返回

{conversationType:int, level:int} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.setConversationTypeNotification(ConversationType.PRIVATE, NotificationLevel.MUTED);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);

用户(10)​

getUserProfile(userId: string): Promise<RcResult<UserProfile>>
自 1.0.0REST(HTTP)

查询用户资料。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在。

参数
参数类型说明
userIdstring用户 ID
返回

UserProfile 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getUserProfile('user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
updateMyUserProfile(profile: {name?: string; avatarUrl?: string}): Promise<RcResult<UserProfile>>
自 1.0.0REST(HTTP)

修改本人资料(name/avatarUrl)。 可能错误码:1001 参数错误、1003 无权限。

参数
参数类型说明
profile{name?:string, avatarUrl?:string}待更新的资料字段(name / avatarUrl)
返回

UserProfile 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.updateMyUserProfile();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getOnlineStatus(userId: string): Promise<RcResult<{userId: string; online: boolean; sessionCount: number}>>
自 1.0.0REST(HTTP)

查询单个用户在线状态。 可能错误码:1001 参数错误、1004 用户不存在。

参数
参数类型说明
userIdstring用户 ID
返回

{userId:string, online:bool, sessionCount:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getOnlineStatus('user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getOnlineStatusBatch(userIds: string[]): Promise<RcResult<{items: Array<{userId: string; online: boolean; sessionCount: number}>}>>
自 1.0.0REST(HTTP)

批量在线状态(<=100)。 可能错误码:1001 参数错误。

参数
参数类型说明
userIdsstring[]用户 ID 列表
返回

{items:[{userId:string,online:bool,sessionCount:uint32}]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getOnlineStatusBatch(['user_001', 'user_002']);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
subscribePresence(userIds: string[]): Promise<RcResult<{subscribed: string[]}>>
自 1.4.0REST(HTTP)幂等

订阅用户在线状态(IDL rev20;客户端 REST `POST /api/apps/{appkey}/users/{userId}/presence/subscriptions`,userId 取自当前登录用户)。被订阅用户上线/离线/被踢/注销时通过长连接收到 `presence_changed`。订阅自己 1001;目标用户不存在/属于其它 app 1004;订阅总数上限 500(超限 1001);幂等(重复订阅不重复入列)。成功返回变更后的完整订阅列表 `{subscribed:[...]}`。好友关系本身已默认订阅对方在线状态,无需额外调用。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
userIdsstring[]用户 ID 列表
返回

{subscribed:string[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.subscribePresence(['user_001', 'user_002']);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
unsubscribePresence(userIds: string[]): Promise<RcResult<{subscribed: string[]}>>
自 1.4.0REST(HTTP)幂等

取消订阅用户在线状态(IDL rev20;客户端 REST `POST .../presence/subscriptions` 的 `unsubscribe` 分支)。取消未订阅的用户幂等成功(不报错);订阅自己 1001;目标用户不存在 1004。成功返回变更后的完整订阅列表 `{subscribed:[...]}`。仅停止接收该用户的实时在线状态帧,好友关系不受影响。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
userIdsstring[]用户 ID 列表
返回

{subscribed:string[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.unsubscribePresence(['user_001', 'user_002']);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getPresenceSubscriptions(): Promise<RcResult<{userId: string, subscribed: string[]}>>
自 1.4.0REST(HTTP)幂等

查询当前用户的在线状态订阅列表(IDL rev20;客户端 REST `GET /api/apps/{appkey}/users/{userId}/presence/subscriptions`)→ `{userId,subscribed:[...]}`。只读、幂等、不产生事件。 可能错误码:1001 参数错误、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

返回

{userId:string, subscribed:string[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getPresenceSubscriptions();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
registerPushToken(options: RegisterPushTokenOptions): Promise<RcResult<PushToken>>
自 1.5.0REST(HTTP)幂等

注册设备推送 token(IDL rev21 C23 收口;客户端 REST `POST /api/apps/{appkey}/push/tokens`,服务端 rev20 已实现,本 op 补 SDK 语义面)→ PushToken。幂等键 `(userId, platform, token)`:重复注册返回既有 tokenId 并重新置 active=true;`token` 8..=512 字符、`platform` ∈ ios|android|web|huawei|xiaomi|oppo|vivo|fcm、未知平台/长度非法 1001、每用户 20 个活跃 token 上限(超限 1001)、注销/封禁用户 1016;同一 (platform, token) 被其它用户注册时旧记录置 active=false(设备换绑)。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1016 账号已被封禁。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
options{platform:string, token:string, deviceId?:string, appVersion?:string}可选参数对象
返回

PushToken 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.registerPushToken({});
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
unregisterPushToken(tokenId: string): Promise<RcResult<UnregisterPushTokenResult>>
自 1.5.0REST(HTTP)幂等

注销本人设备推送 token(IDL rev21 C23;客户端 REST `DELETE /api/apps/{appkey}/push/tokens/{tokenId}`):软删除 active=false 并保留历史供审计 → `{tokenId,userId,platform,deleted,active:false,alreadyInactive}`。非本人或不存在 1001(不泄露他人 token);重复注销幂等成功(alreadyInactive=true)。 可能错误码:1001 参数错误、1002 Token 无效或已过期。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
tokenIdstring见类型定义
返回

{tokenId:string, userId:string, platform:string, deleted:bool, active:bool, alreadyInactive:bool} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.unregisterPushToken('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getPushTokens(): Promise<RcResult<PushTokenListResult>>
自 1.5.0REST(HTTP)幂等

查询本人设备推送 token(IDL rev21 C23;客户端 REST `GET /api/apps/{appkey}/push/tokens`)→ `{userId,tokens:[PushToken],total,activeTotal,platforms}`;含 active=false 历史,按 createdAt 倒序。只读、幂等、不产生事件。 可能错误码:1001 参数错误、1002 Token 无效或已过期。 该操作幂等:重复调用不会产生额外副作用。

返回

{userId:string, tokens:PushToken[], total:uint32, activeTotal:uint32, platforms:string[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getPushTokens();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);

好友与黑名单(11)​

searchUsers(keyword: string, options?: {limit?: number}): Promise<RcResult<{users: Array<{userId: string; name: string; isFriend: boolean; blacklisted: boolean}>; total: number}>>
自 1.0.0REST(HTTP)

搜索用户(userId/name,大小写不敏感,排除自己)。 可能错误码:1001 参数错误。

参数
参数类型说明
keywordstring搜索关键字
options{limit?:uint32}可选参数对象(可选)
返回

{users:[{userId:string,name:string,isFriend:bool,blacklisted:bool}], total:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.searchUsers('ni');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
sendFriendRequest(toUserId: string, message?: string): Promise<RcResult<FriendRequest>>
自 1.0.0REST(HTTP)

发起好友申请;已是好友/已有 pending → 1003;被拉黑 → 1011。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1011 已被对方拉黑或你已拉黑对方。 可能触发事件:FRIEND_EVENT。

参数
参数类型说明
toUserIdstring接收方 userId
messagestring附言 / 消息摘要(可选)
返回

FriendRequest 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.sendFriendRequest('user_002');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getFriendRequests(options?: {type?: 'incoming' | 'outgoing'; status?: 'pending' | 'all'}): Promise<RcResult<FriendRequest[]>>
自 1.0.0REST(HTTP)

好友申请列表(incoming/outgoing,pending/all)。 可能错误码:1001 参数错误、1003 无权限。

参数
参数类型说明
options{type?:'incoming'|'outgoing', status?:'pending'|'all'}可选参数对象(可选)
返回

FriendRequest[] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getFriendRequests();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
acceptFriendRequest(requestId: string): Promise<RcResult<FriendRequest>>
自 1.0.0REST(HTTP)

同意申请,双向建立好友关系。 可能错误码:1001 参数错误、1003 无权限。 可能触发事件:FRIEND_EVENT。

参数
参数类型说明
requestIdstring好友请求 ID(requestId)
返回

FriendRequest 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.acceptFriendRequest('request_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
rejectFriendRequest(requestId: string): Promise<RcResult<FriendRequest>>
自 1.0.0REST(HTTP)

拒绝申请。 可能错误码:1001 参数错误、1003 无权限。 可能触发事件:FRIEND_EVENT。

参数
参数类型说明
requestIdstring好友请求 ID(requestId)
返回

FriendRequest 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.rejectFriendRequest('request_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getFriends(): Promise<RcResult<Array<{userId: string; name?: string; avatarUrl?: string; remark?: string; online?: boolean; blacklisted?: boolean}>>>
自 1.0.0REST(HTTP)

好友列表(含备注/在线/拉黑标记)。 可能错误码:无特定错误码(通用错误见 ErrorCode)。

返回

[{userId:string,name?:string,avatarUrl?:string,remark?:string,online?:bool,blacklisted?:bool}] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getFriends();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
deleteFriend(friendId: string): Promise<RcResult<null>>
自 1.0.0REST(HTTP)幂等

双向删除好友。 可能错误码:1001 参数错误、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
friendIdstring好友 userId
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.deleteFriend('user_002');
setFriendRemark(friendId: string, remark: string): Promise<RcResult<null>>
自 1.0.0REST(HTTP)

设置好友备注(<=64 字,空串清除)。 可能错误码:1001 参数错误、1003 无权限。

参数
参数类型说明
friendIdstring好友 userId
remarkstring好友备注名
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.setFriendRemark('user_002', '同事');
getBlacklist(): Promise<RcResult<Array<{userId: string; name?: string}>>>
自 1.0.0REST(HTTP)

黑名单列表。 可能错误码:无特定错误码(通用错误见 ErrorCode)。

返回

[{userId:string,name?:string}] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getBlacklist();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
addToBlacklist(userId: string): Promise<RcResult<null>>
自 1.0.0REST(HTTP)幂等

加入黑名单(幂等;不能拉黑自己→1001)。 可能错误码:1001 参数错误、1004 用户不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
userIdstring用户 ID
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.addToBlacklist('user_001');
removeFromBlacklist(userId: string): Promise<RcResult<null>>
自 1.0.0REST(HTTP)幂等

移出黑名单。 可能错误码:无特定错误码(通用错误见 ErrorCode)。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
userIdstring用户 ID
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.removeFromBlacklist('user_001');

群组(20)​

createGroup(options: {groupId?: string; name: string; owner?: string; members?: string[]; groupType?: GroupType}): Promise<RcResult<Group>>
自 1.0.0REST(HTTP)

创建群(groupType 缺省 normal;joinPolicy 缺省 open;maxMembers 对 super 有效)。groupId 可由调用方指定(唯一)或服务端生成。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1015 成员数量超出上限、1021 服务未开通。

参数
参数类型说明
options{groupId?:string, name:string, owner?:string, members?:string[], groupType?:GroupType, joinPolicy?:JoinPolicy, maxMembers?:int}可选参数对象
返回

Group 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.createGroup();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getGroupsInfo(groupIds: string[]): Promise<RcResult<Group[]>>
自 1.0.0REST(HTTP)

批量查询群信息(<=20)。 可能错误码:1001 参数错误。

参数
参数类型说明
groupIdsstring[]群组 ID 列表
返回

Group[] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getGroupsInfo(['group_001']);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getGroupMembers(groupId: string): Promise<RcResult<GroupMember[]>>
自 1.0.0REST(HTTP)

群成员列表(含角色/禁言)。 可能错误码:1001 参数错误、1003 无权限、1005 群组不存在、1006 未加入群组。

参数
参数类型说明
groupIdstring群组 ID
返回

GroupMember[] 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getGroupMembers('group_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
addGroupMembers(groupId: string, userIds: string[]): Promise<RcResult<{added: string[]; group: Group}>>
自 1.0.0REST(HTTP)

拉人入群(群主/管理员;普通成员按配置)。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1005 群组不存在、1015 成员数量超出上限。

参数
参数类型说明
groupIdstring群组 ID
userIdsstring[]用户 ID 列表
返回

{added:string[], group:Group} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.addGroupMembers('group_001', ['user_001', 'user_002']);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
removeGroupMembers(groupId: string, userIds: string[]): Promise<RcResult<{removed: string[]}>>
自 1.0.0REST(HTTP)

移除成员(群主/管理员;权限检查)。 可能错误码:1001 参数错误、1003 无权限、1005 群组不存在、1006 未加入群组。

参数
参数类型说明
groupIdstring群组 ID
userIdsstring[]用户 ID 列表
返回

{removed:string[]} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.removeGroupMembers('group_001', ['user_001', 'user_002']);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
quitGroup(groupId: string): Promise<RcResult<null>>
自 1.0.0REST(HTTP)

退出群;群主需先转让。 可能错误码:1001 参数错误、1003 无权限、1005 群组不存在、1006 未加入群组。

参数
参数类型说明
groupIdstring群组 ID
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.quitGroup('group_001');
updateGroupName(groupId: string, name: string): Promise<RcResult<Group>>
自 1.0.0REST(HTTP)

修改群名(群主/管理员)。 可能错误码:1001 参数错误、1003 无权限、1005 群组不存在。

参数
参数类型说明
groupIdstring群组 ID
namestring名称(群名称 / 文件名等)
返回

Group 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.updateGroupName('group_001', 'sample.png');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
updateGroupNotice(groupId: string, notice: string): Promise<RcResult<Group>>
自 1.0.0REST(HTTP)

设置群公告(群主/管理员,<=500 字,空串清除)。 可能错误码:1001 参数错误、1003 无权限、1005 群组不存在。

参数
参数类型说明
groupIdstring群组 ID
noticestring群公告
返回

Group 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.updateGroupNotice('group_001', '欢迎加入群聊');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
transferGroupOwner(groupId: string, newOwner: string): Promise<RcResult<Group>>
自 1.0.0REST(HTTP)

转让群主(新群主须为成员)。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1005 群组不存在。

参数
参数类型说明
groupIdstring群组 ID
newOwnerstring新群主 userId
返回

Group 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.transferGroupOwner('group_001', 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
addGroupAdmin(groupId: string, userId: string): Promise<RcResult<Group>>
自 1.0.0REST(HTTP)幂等

设置管理员(群主,幂等)。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1005 群组不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
groupIdstring群组 ID
userIdstring用户 ID
返回

Group 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.addGroupAdmin('group_001', 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
removeGroupAdmin(groupId: string, userId: string): Promise<RcResult<Group>>
自 1.0.0REST(HTTP)幂等

取消管理员(群主)。 可能错误码:1001 参数错误、1003 无权限、1005 群组不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
groupIdstring群组 ID
userIdstring用户 ID
返回

Group 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.removeGroupAdmin('group_001', 'user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
muteGroupMember(groupId: string, userId: string, mutedUntil: number): Promise<RcResult<{groupId: string; userId: string; mutedUntil: number; group: Group}>>
自 1.0.0REST(HTTP)

禁言/解禁(群主/管理员;不能禁言群主;管理员不能禁言管理员)。 可能错误码:1001 参数错误、1003 无权限、1004 用户不存在、1005 群组不存在、1006 未加入群组。

参数
参数类型说明
groupIdstring群组 ID
userIdstring用户 ID
mutedUntiluint64禁言截止时间(epoch ms)
返回

{groupId:string,userId:string,mutedUntil:uint64,group:Group} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.muteGroupMember('group_001', 'user_001', Date.now() + 3_600_000);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
createSupergroupChannel(params: CreateSupergroupChannelParams): Promise<RcResult<SupergroupChannel>>
自 1.5.0REST(HTTP)

创建超级群频道(IDL rev21 C17;客户端 REST `POST /api/apps/{appkey}/supergroup/channels`)→ SupergroupChannel。channelId 服务端生成(`ch_`,应用内唯一);joinPolicy 由 type 推导(public→open、private→invite),与之矛盾的显式取值 1001;仅群主/管理员可调用(否则 1003),群不存在 1005,单群 100 频道上限(超限 1015)。与 Open API `supergroup.channel.create` 共享状态。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限、1005 群组不存在、1015 成员数量超出上限。

参数
参数类型说明
params{groupId:string, name:string, type:ChannelType, joinPolicy?:JoinPolicy}见类型定义
返回

SupergroupChannel 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.createSupergroupChannel(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
listSupergroupChannels(groupId: string): Promise<RcResult<SupergroupChannelListResult>>
自 1.5.0REST(HTTP)幂等

超级群频道列表(IDL rev21 C17;客户端 REST `GET /api/apps/{appkey}/supergroup/channels?groupId=`)→ `{groupId,channels:[SupergroupChannel],total}`。仅群成员可读(否则 1003),群不存在 1005,缺 groupId 1001。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限、1005 群组不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
groupIdstring群组 ID
返回

{groupId:string, channels:SupergroupChannel[], total:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.listSupergroupChannels('group_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
joinSupergroupChannel(channelId: string, options?: SupergroupChannelOptions): Promise<RcResult<JoinSupergroupChannelResult>>
自 1.5.0REST(HTTP)幂等

加入超级群频道(IDL rev21 C17;客户端 REST `POST .../supergroup/channels/{channelId}/join`,幂等)→ `{groupId,channelId,userId,joined:true,alreadyJoined}`。public 频道群成员可直接加入;private 频道需已受邀或为群主/管理员(否则 1003)。频道不存在 1005;channelId 跨群同名时可通过第二参数 `{groupId}` 消歧(未消歧 1001);非群成员 1003。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限、1005 群组不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
channelIdstring见类型定义
options{groupId?:string}可选参数对象(可选)
返回

{groupId:string, channelId:string, userId:string, joined:bool, alreadyJoined:bool} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.joinSupergroupChannel('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
leaveSupergroupChannel(channelId: string, options?: SupergroupChannelOptions): Promise<RcResult<LeaveSupergroupChannelResult>>
自 1.5.0REST(HTTP)幂等

离开超级群频道(IDL rev21 C17;客户端 REST `POST .../supergroup/channels/{channelId}/leave`,幂等)→ `{groupId,channelId,userId,left:true,wasMember}`;不在频道内也返回成功(wasMember=false)。频道不存在 1005、非群成员 1003。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限、1005 群组不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
channelIdstring见类型定义
options{groupId?:string}可选参数对象(可选)
返回

{groupId:string, channelId:string, userId:string, left:bool, wasMember:bool} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.leaveSupergroupChannel('value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
bindUserGroupToChannel(channelId: string, userGroupId: string, options?: SupergroupChannelOptions): Promise<RcResult<BindUserGroupToChannelResult>>
自 1.5.0REST(HTTP)幂等

把用户组绑定到频道(IDL rev21 C17;客户端 REST `POST .../supergroup/channels/{channelId}/usergroups`,幂等)→ `{groupId,channelId,userGroupId,bound:true,reverseIndexed}`。**双向维护** SupergroupChannel.userGroupIds 与 UserGroup.channelIds(rev21 修复 rev7 仅写频道侧导致的反向索引缺失),因此 `listUserGroups`/`getUserGroupsByUser` 的 channelIds 反查可用。仅群主/管理员(否则 1003);频道/用户组不存在 1005。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限、1005 群组不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
channelIdstring见类型定义
userGroupIdstring见类型定义
options{groupId?:string}可选参数对象(可选)
返回

{groupId:string, channelId:string, userGroupId:string, bound:bool, reverseIndexed:bool} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.bindUserGroupToChannel('value', 'value');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
createUserGroup(params: CreateUserGroupParams): Promise<RcResult<UserGroup>>
自 1.5.0REST(HTTP)

创建超级群用户组(IDL rev21 C17;客户端 REST `POST /api/apps/{appkey}/supergroup/usergroups`)→ UserGroup。userGroupId 服务端生成(`ug_`);members 去空/去重/保序,每项必须是本群成员(否则 1003)、用户不存在 1004;仅群主/管理员(否则 1003);参数非法 1001、单群 100 用户组上限(超限 1015)。与 Open API `supergroup.usergroup.*` 共享状态。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限、1004 用户不存在、1015 成员数量超出上限。

参数
参数类型说明
params{groupId:string, name:string, members?:string[]}见类型定义
返回

UserGroup 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.createUserGroup(undefined);
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
listUserGroups(groupId: string): Promise<RcResult<UserGroupListResult>>
自 1.5.0REST(HTTP)幂等

超级群用户组列表(IDL rev21 C17;客户端 REST `GET /api/apps/{appkey}/supergroup/usergroups?groupId=`)→ `{groupId,userGroups:[UserGroup],total}`;UserGroup.channelIds 为频道反向索引(rev21 修复后可用)。仅群成员可读(否则 1003),群不存在 1005,缺 groupId 1001。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限、1005 群组不存在。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
groupIdstring群组 ID
返回

{groupId:string, userGroups:UserGroup[], total:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.listUserGroups('group_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getUserGroupsByUser(userId: string, options?: SupergroupChannelOptions): Promise<RcResult<UserGroupListResult>>
自 1.5.0REST(HTTP)幂等

查询某用户所在的所有用户组(IDL rev21 C17;客户端 REST `GET .../supergroup/usergroups/by-user/{userId}`)→ `{userId,userGroups:[UserGroup],total}`。仅本人可查(userId ≠ 当前登录用户 1003);`options.groupId` 可限定单个群;只返回「本人确实在该群」的用户组(群已删除的不返回,不虚构)。 可能错误码:1001 参数错误、1002 Token 无效或已过期、1003 无权限。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
userIdstring用户 ID
options{groupId?:string}可选参数对象(可选)
返回

{userId:string, userGroups:UserGroup[], total:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getUserGroupsByUser('user_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);

聊天室(5)​

createChatroom(options: {chatroomId?: string; name: string; owner?: string}): Promise<RcResult<Chatroom>>
自 1.0.0REST(HTTP)

创建聊天室(客户端能力;服务端 Open API 亦可创建)。chatroomId 可指定或服务端生成。 可能错误码:1001 参数错误、1003 无权限、1015 成员数量超出上限、1021 服务未开通。

参数
参数类型说明
options{chatroomId?:string, name:string, owner?:string}可选参数对象
返回

Chatroom 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.createChatroom();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
joinChatroom(chatroomId: string): Promise<RcResult<Chatroom>>
自 1.0.0长连接(WebSocket)幂等

加入聊天室:发送 chatroom_join,收到 chatroom_joined;房内广播 member_changed。 可能错误码:1001 参数错误、1012 聊天室不存在、1013 聊天室已销毁、3001 长连接未就绪。 可能触发事件:CHATROOM_EVENT。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
chatroomIdstring聊天室 ID
返回

Chatroom 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.joinChatroom('chatroom_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
leaveChatroom(chatroomId: string): Promise<RcResult<null>>
自 1.0.0长连接(WebSocket)幂等

离开聊天室。 可能错误码:1001 参数错误、1012 聊天室不存在、3001 长连接未就绪。 可能触发事件:CHATROOM_EVENT。 该操作幂等:重复调用不会产生额外副作用。

参数
参数类型说明
chatroomIdstring聊天室 ID
返回

void / null 无业务返回值;失败时通过返回信封 code 或回调错误对象表达。

示例
JavaScript
client.leaveChatroom('chatroom_001');
getChatroomInfo(chatroomId: string): Promise<RcResult<Chatroom>>
自 1.0.0REST(HTTP)

聊天室信息(含在线数)。 可能错误码:1001 参数错误、1012 聊天室不存在。

参数
参数类型说明
chatroomIdstring聊天室 ID
返回

Chatroom 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getChatroomInfo('chatroom_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);
getChatroomMembers(chatroomId: string, options?: {offset?: number; limit?: number}): Promise<RcResult<{members: ChatroomMember[]; total: number}>>
自 1.0.0REST(HTTP)

聊天室在线成员列表。 可能错误码:1001 参数错误、1012 聊天室不存在。

参数
参数类型说明
chatroomIdstring聊天室 ID
options{offset?:uint32,limit?:uint32}可选参数对象(可选)
返回

{members:ChatroomMember[], total:uint32} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getChatroomMembers('chatroom_001');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);

系统通知(1)​

getSystemMessages(options?: {limit?: number; beforeSeq?: number}): Promise<RcResult<{messages: Message[]; hasMore: boolean}>>
自 1.0.0REST(HTTP)

系统通知历史(会话 conversationType=SYSTEM,targetId='system')。 可能错误码:1001 参数错误。

参数
参数类型说明
options{limit?:uint32,beforeSeq?:uint64}可选参数对象(可选)
返回

{messages:Message[], hasMore:bool} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.getSystemMessages();
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);

文件上传(1)​

uploadFile(data: Uint8Array | Blob | {path: string}, name: string, mime?: string, options?: {onProgress?: (percent: number) => void; signal?: AbortSignal}): Promise<RcResult<{url: string; name: string; size: number; mime: string; fullUrl?: string}>>
自 1.0.0REST(HTTP)

上传文件(<=20MB),返回可用于图片/文件/语音消息的 url。 可能错误码:1001 参数错误、1003 无权限、1007 消息体过大(上限 5KB)。

参数
参数类型说明
databytes|blob文件二进制内容
namestring名称(群名称 / 文件名等)
mimestring文件 MIME 类型(可选)
返回

{url:string,name:string,size:uint64,mime:string,fullUrl?:string} 成功时返回上述类型;失败时返回信封 code(RcResult 泛型信封)或回调错误对象。

示例
JavaScript
const res = await client.uploadFile(new Uint8Array([1, 2, 3]), 'sample.png');
if (res.code !== 0) {
  console.error(res.code, res.msg);
}
console.log(res.data);

本地库扩展:localDb​

以下为 Electron 差异化能力,不计入冻结的 62 语义 op;实现可缺失但需在 capabilities() 中如实上报 访问入口:IMClient.localDb;可用性:localDb.available(): boolean。

方法签名(本平台绑定)
getMessagelocalDb.getMessage(ref: number | string): Promise<RcResult<Message>> // number=本地 messageId,string=服务端 messageUId
getHistoryMessageslocalDb.getHistoryMessages(conversationType, targetId, options: {limit?: number; beforeTime?: number; messageTypes?: string[]}): Promise<RcResult<{messages: Message[]; hasMore: boolean}>>
getContinuousMessageslocalDb.getContinuousMessages(conversationType, targetId, options: {timestamp?: number; limit?: number; order?: 0 | 1}): Promise<RcResult<{messages: Message[]; timestamp: number; hasMore: boolean}>>
searchMessageslocalDb.searchMessages(params: {conversationType?: ConversationType; targetId?: string; keyword: string; startTime?: number; endTime?: number; messageTypes?: string[]; offset?: number; limit?: number}): Promise<RcResult<{messages: Message[]; total: number}>>
searchMessagesByUserlocalDb.searchMessagesByUser(conversationType, targetId, userId: string, options?: {startTime?: number; limit?: number}): Promise<RcResult<{messages: Message[]}>>
getMessagesAroundlocalDb.getMessagesAround(conversationType, targetId, options: {timestamp: number; beforeCount?: number; afterCount?: number}): Promise<RcResult<Message[]>>
getMessageCountlocalDb.getMessageCount(conversationType, targetId, filter?: {startTime?: number; endTime?: number; messageTypes?: string[]}): Promise<RcResult<number>>
insertMessagelocalDb.insertMessage(conversationType, targetId, message: InsertableMessage, options?: {isUnread?: boolean; searchContent?: string; disableUpdateLastMessage?: boolean}): Promise<RcResult<Message>>
batchInsertMessageslocalDb.batchInsertMessages(messages: InsertableMessage[], options?: {dedupe?: boolean}): Promise<RcResult<{inserted: number; failedIndex?: number}>>
deleteMessageslocalDb.deleteMessages(messageIds: Array<string | number>): Promise<RcResult<null>>
clearMessageslocalDb.clearMessages(conversationType, targetId): Promise<RcResult<null>>
deleteMessagesByTimelocalDb.deleteMessagesByTime(conversationType, targetId, untilTime: number, options?: {compact?: boolean}): Promise<RcResult<null>>
updateMessageContentlocalDb.updateMessageContent(messageId: number | string, content: MessageContent, messageType?: string): Promise<RcResult<null>>
updateMessageSentStatuslocalDb.updateMessageSentStatus(messageId: number | string, status: SentStatus): Promise<RcResult<null>>
updateMessageReceivedStatuslocalDb.updateMessageReceivedStatus(messageId: number | string, info: {isRead?: boolean; isListened?: boolean; isDownload?: boolean; isRetrieved?: boolean}): Promise<RcResult<null>>
markMessagesReadlocalDb.markMessagesRead(conversationType, targetId, untilTime: number): Promise<RcResult<null>>
listConversationslocalDb.listConversations(options?: {limit?: number; beforeTime?: number; topPriority?: boolean; tagId?: string; untaggedOnly?: boolean; conversationTypes?: ConversationType[]}): Promise<RcResult<Conversation[]>>
getConversationslocalDb.getConversations(refs: Array<{conversationType: ConversationType; targetId: string}>): Promise<RcResult<Conversation[]>>
searchConversationslocalDb.searchConversations(keyword: string, options?: {messageTypes?: string[]; conversationTypes?: ConversationType[]}): Promise<RcResult<Conversation[]>>
syncConversationsFromServerlocalDb.syncConversationsFromServer(): Promise<RcResult<null>> // 完成时派发 Events.CONVERSATIONS_SYNCED
saveEditDraftlocalDb.saveEditDraft(conversationType, targetId, draft: {messageId: number | string; content: string}): Promise<RcResult<null>>
getEditDraftlocalDb.getEditDraft(conversationType, targetId): Promise<RcResult<{messageId: number | string; content: string} | null>>
clearEditDraftlocalDb.clearEditDraft(conversationType, targetId): Promise<RcResult<null>>
getUnreadMentionslocalDb.getUnreadMentions(conversationType, targetId): Promise<RcResult<Message[]>>
setDedupelocalDb.setDedupe(enabled: boolean): Promise<RcResult<boolean>>
clearAlllocalDb.clearAll(): Promise<RcResult<boolean>>

localDb 方法明细​

localDb.getMessage(ref: number | string): Promise<RcResult<Message>> // number=本地 messageId,string=服务端 messageUId
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.getHistoryMessages(conversationType, targetId, options: {limit?: number; beforeTime?: number; messageTypes?: string[]}): Promise<RcResult<{messages: Message[]; hasMore: boolean}>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.getContinuousMessages(conversationType, targetId, options: {timestamp?: number; limit?: number; order?: 0 | 1}): Promise<RcResult<{messages: Message[]; timestamp: number; hasMore: boolean}>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.searchMessages(params: {conversationType?: ConversationType; targetId?: string; keyword: string; startTime?: number; endTime?: number; messageTypes?: string[]; offset?: number; limit?: number}): Promise<RcResult<{messages: Message[]; total: number}>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.searchMessagesByUser(conversationType, targetId, userId: string, options?: {startTime?: number; limit?: number}): Promise<RcResult<{messages: Message[]}>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.getMessagesAround(conversationType, targetId, options: {timestamp: number; beforeCount?: number; afterCount?: number}): Promise<RcResult<Message[]>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.getMessageCount(conversationType, targetId, filter?: {startTime?: number; endTime?: number; messageTypes?: string[]}): Promise<RcResult<number>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.insertMessage(conversationType, targetId, message: InsertableMessage, options?: {isUnread?: boolean; searchContent?: string; disableUpdateLastMessage?: boolean}): Promise<RcResult<Message>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.batchInsertMessages(messages: InsertableMessage[], options?: {dedupe?: boolean}): Promise<RcResult<{inserted: number; failedIndex?: number}>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.deleteMessages(messageIds: Array<string | number>): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.clearMessages(conversationType, targetId): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.deleteMessagesByTime(conversationType, targetId, untilTime: number, options?: {compact?: boolean}): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.updateMessageContent(messageId: number | string, content: MessageContent, messageType?: string): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.updateMessageSentStatus(messageId: number | string, status: SentStatus): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.updateMessageReceivedStatus(messageId: number | string, info: {isRead?: boolean; isListened?: boolean; isDownload?: boolean; isRetrieved?: boolean}): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.markMessagesRead(conversationType, targetId, untilTime: number): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.listConversations(options?: {limit?: number; beforeTime?: number; topPriority?: boolean; tagId?: string; untaggedOnly?: boolean; conversationTypes?: ConversationType[]}): Promise<RcResult<Conversation[]>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.getConversations(refs: Array<{conversationType: ConversationType; targetId: string}>): Promise<RcResult<Conversation[]>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.searchConversations(keyword: string, options?: {messageTypes?: string[]; conversationTypes?: ConversationType[]}): Promise<RcResult<Conversation[]>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.syncConversationsFromServer(): Promise<RcResult<null>> // 完成时派发 Events.CONVERSATIONS_SYNCED
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.saveEditDraft(conversationType, targetId, draft: {messageId: number | string; content: string}): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.getEditDraft(conversationType, targetId): Promise<RcResult<{messageId: number | string; content: string} | null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.clearEditDraft(conversationType, targetId): Promise<RcResult<null>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.getUnreadMentions(conversationType, targetId): Promise<RcResult<Message[]>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.setDedupe(enabled: boolean): Promise<RcResult<boolean>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

localDb.clearAll(): Promise<RcResult<boolean>>
Electron 本地库不计入 62 语义 op

Electron 主进程本地 SQLite 扩展能力;实现缺失时由 capabilities() 如实上报。

相关链接​