im_client_t 句柄(Native (C ABI) IMLib)

类继承图​

Object→im_client_t

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

类说明​

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

项值
程序包libim_sdk
完整声明im-sdk (crate) + libim_sdk
语言 / 运行时Rust core + C ABI
初始化入口im_client_new(const char* appkey, const char* server_url) -> im_client_t*
异步模型opaque handle + 返回 int 错误码 + out 参数
事件 APIim_client_set_event_callback(im_client_t*, im_event_cb cb, void* user_data)
命名约定im_<domain>_<action>
方法总数103 个语义操作,本平台导出 17 个
平台状态已交付

概要​

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

连接与监听(7)​

方法签名(本平台绑定)说明
initim_client_new(const char* appkey, const char* server_url) -> im_client_t*初始化 SDK(构造客户端实例)
connectim_client_connect(im_client_t*, const char* token, char* out_user_id, size_t out_len)使用用户 token 建立长连接:握手→hello→离线补发→sync_done
disconnectim_client_disconnect(im_client_t*)主动断开
getConnectionStatusim_client_connection_status(im_client_t*) -> int返回 ConnectionStatus 枚举值
getCurrentUserIdim_client_current_user_id(im_client_t*, char* out, size_t out_len)当前登录 userId
addEventListenerim_client_set_event_callback(im_client_t*, im_event_cb cb, void* user_data)注册事件监听
removeEventListener未导出 C ABI移除事件监听

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

消息(26)​

方法签名(本平台绑定)说明
sendMessageim_client_send_content(im_client_t*, int conversation_type, const char* target_id, const char* content_json, c…发送任意类型消息
sendTextMessageim_client_send_text(im_client_t*, int conversation_type, const char* target_id, const char* text, const char* …发送文本消息
sendImageMessage未导出 C ABI发送图片消息
sendFileMessage未导出 C ABI发送文件消息
sendVoiceMessage未导出 C ABI发送语音消息
sendLocationMessage未导出 C ABI发送位置消息
sendTypingStatus未导出 C ABI发送正在输入状态
recallMessageim_client_recall(im_client_t*, const char* message_id)撤回消息(仅发送者、撤回时限内)
sendReadReceiptim_client_send_read_receipt(im_client_t*, int conversation_type, const char* target_id, const char* const* mes…上报已读回执
getMessageReadCount未导出 C ABI查询消息已读人数
getMessageReadUsers未导出 C ABI查询已读用户明细(分页)
getMessageReadDetail未导出 C ABI查询单条消息的已读详情:已读/未读名单 + 具体读取时间(分页)
searchMessages未导出 C ABI在当前用户全部会话中搜索文本消息(倒序)
updateMessageExpansion未导出 C ABI更新已发送消息的扩展 KV(合并语义)
removeMessageExpansion未导出 C ABI删除消息扩展 KV(按 key)
addMessageReaction未导出 C ABI为指定消息添加回应(reactionId 由业务定义,1-16 字符)
removeMessageReaction未导出 C ABI移除自己对指定消息的回应
batchGetMessageReactionSummaries未导出 C ABI批量查询消息回应摘要(1-100 个 messageId)
getMessageReactions未导出 C ABI分页查询指定消息的回应列表(count 1-50,默认 20)
getMessageReactionUsers未导出 C ABI分页查询某个回应的参与用户(count 1-50,默认 20)
startStreamMessage未导出 C ABI开始一条流式消息(IDL rev17)
appendStreamMessage未导出 C ABI追加一个流式增量(IDL rev17)
completeStreamMessage未导出 C ABI结束流式消息(IDL rev17)
getStreamMessage未导出 C ABI查询流式消息快照(IDL rev17)
getMessageExpansion未导出 C ABI读取已发送消息的扩展 KV(IDL rev19)
combineMessages未导出 C ABI本地构造合并转发内容(IDL rev19,transport=local,不做网络 IO):把 Message[] 转换为 `{type:'co…

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

会话(22)​

方法签名(本平台绑定)说明
getConversationListim_client_conversation_list(im_client_t*, char** out_json) + im_string_free会话列表:置顶优先、按 updatedAt 倒序
getConversation未导出 C ABI单会话详情
getHistoryMessagesim_client_history(im_client_t*, int conversation_type, const char* target_id, int limit, unsigned long long be…历史消息分页(beforeSeq 向前翻页)
clearUnreadCount未导出 C ABI清空会话未读(等价 read 帧 + 本地清零)
setConversationToTop未导出 C ABI会话置顶/取消
saveTextMessageDraft未导出 C ABI保存草稿(空串=清除)
getTextMessageDraft未导出 C ABI读取草稿
clearTextMessageDraft未导出 C ABI清除草稿
setConversationNotificationLevel未导出 C ABI会话提醒级别:0 全部 / 1 仅提及 / 2 免打扰
createConversationTag未导出 C ABI创建会话标签(tagName ≤16)
updateConversationTag未导出 C ABI重命名会话标签
deleteConversationTag未导出 C ABI删除会话标签(同时清除标签内会话引用)
getConversationTags未导出 C ABI获取全部会话标签(含会话数量)
addConversationsToTag未导出 C ABI把会话加入标签(≤100/次,幂等)
removeConversationsFromTag未导出 C ABI把会话移出标签(≤100/次,幂等)
getConversationsFromTagByPage未导出 C ABI分页获取标签内会话(含置顶/未读数/最后消息时间)
getTagsFromConversation未导出 C ABI查询某个会话所属的标签列表
getUnreadCountByTag未导出 C ABI标签内未读汇总(消息总数 + 有未读的会话数)
setConversationToTopInTag未导出 C ABI标签内置顶/取消置顶会话(同步会话会话级置顶状态)
deleteConversation未导出 C ABI删除会话记录(列表项/未读/草稿/置顶),历史消息保留
getConversationTypeNotification未导出 C ABI查询按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)
setConversationTypeNotification未导出 C ABI设置按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)

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

用户(10)​

方法签名(本平台绑定)说明
getUserProfile未导出 C ABI查询用户资料
updateMyUserProfile未导出 C ABI修改本人资料(name/avatarUrl)
getOnlineStatus未导出 C ABI查询单个用户在线状态
getOnlineStatusBatch未导出 C ABI批量在线状态(<=100)
subscribePresence未导出 C ABI订阅用户在线状态(IDL rev20)
unsubscribePresence未导出 C ABI取消订阅用户在线状态(IDL rev20)
getPresenceSubscriptions未导出 C ABI查询当前用户的在线状态订阅列表(IDL rev20)
registerPushToken未导出 C ABI注册设备推送 token(IDL rev21 C23 收口)
unregisterPushToken未导出 C ABI注销本人设备推送 token(IDL rev21 C23)
getPushTokens未导出 C ABI查询本人设备推送 token(IDL rev21 C23)

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

好友与黑名单(11)​

方法签名(本平台绑定)说明
searchUsers未导出 C ABI搜索用户(userId/name,大小写不敏感,排除自己)
sendFriendRequest未导出 C ABI发起好友申请
getFriendRequests未导出 C ABI好友申请列表(incoming/outgoing,pending/all)
acceptFriendRequest未导出 C ABI同意申请,双向建立好友关系
rejectFriendRequest未导出 C ABI拒绝申请
getFriends未导出 C ABI好友列表(含备注/在线/拉黑标记)
deleteFriend未导出 C ABI双向删除好友
setFriendRemark未导出 C ABI设置好友备注(<=64 字,空串清除)
getBlacklist未导出 C ABI黑名单列表
addToBlacklist未导出 C ABI加入黑名单(幂等)
removeFromBlacklist未导出 C ABI移出黑名单

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

群组(20)​

方法签名(本平台绑定)说明
createGroup未导出 C ABI创建群(groupType 缺省 normal)
getGroupsInfo未导出 C ABI批量查询群信息(<=20)
getGroupMembersim_client_group_members(im_client_t*, const char* group_id, char** out_json)群成员列表(含角色/禁言)
addGroupMembers未导出 C ABI拉人入群(群主/管理员)
removeGroupMembers未导出 C ABI移除成员(群主/管理员)
quitGroup未导出 C ABI退出群
updateGroupName未导出 C ABI修改群名(群主/管理员)
updateGroupNotice未导出 C ABI设置群公告(群主/管理员,<=500 字,空串清除)
transferGroupOwner未导出 C ABI转让群主(新群主须为成员)
addGroupAdmin未导出 C ABI设置管理员(群主,幂等)
removeGroupAdmin未导出 C ABI取消管理员(群主)
muteGroupMember未导出 C ABI禁言/解禁(群主/管理员)
createSupergroupChannel未导出 C ABI创建超级群频道(IDL rev21 C17)
listSupergroupChannels未导出 C ABI超级群频道列表(IDL rev21 C17)
joinSupergroupChannel未导出 C ABI加入超级群频道(IDL rev21 C17)
leaveSupergroupChannel未导出 C ABI离开超级群频道(IDL rev21 C17)
bindUserGroupToChannel未导出 C ABI把用户组绑定到频道(IDL rev21 C17)
createUserGroup未导出 C ABI创建超级群用户组(IDL rev21 C17)
listUserGroups未导出 C ABI超级群用户组列表(IDL rev21 C17)
getUserGroupsByUser未导出 C ABI查询某用户所在的所有用户组(IDL rev21 C17)

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

聊天室(5)​

方法签名(本平台绑定)说明
createChatroom未导出 C ABI创建聊天室(客户端能力)
joinChatroomim_client_chatroom_join(im_client_t*, const char* chatroom_id)加入聊天室:发送 chatroom_join,收到 chatroom_joined
leaveChatroomim_client_chatroom_leave(im_client_t*, const char* chatroom_id)离开聊天室
getChatroomInfoim_client_chatroom_info(im_client_t*, const char* chatroom_id, char** out_json)聊天室信息(含在线数)
getChatroomMembers未导出 C ABI聊天室在线成员列表

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

系统通知(1)​

方法签名(本平台绑定)说明
getSystemMessages未导出 C ABI系统通知历史(会话 conversationType=SYSTEM,targetId='system')

功能指南:系统通知

文件上传(1)​

方法签名(本平台绑定)说明
uploadFileim_client_upload_file(im_client_t*, const void* data, size_t len, const char* name, const char* mime, char** o…上传文件(<=20MB),返回可用于图片/文件/语音消息的 url

功能指南:文件上传

未导出的语义操作

C ABI 当前只导出与连接、消息、会话、聊天室、文件上传相关的 17 个函数;其余 86 个语义操作由 Rust core 提供,尚未暴露为 C 函数,详见 未导出的语义操作。

详细成员说明​

连接与监听(6)​

im_client_new(const char* appkey, const char* server_url) -> im_client_t*
自 1.0.0本地(无 IO)幂等

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

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

IMClient 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
im_client_t* client = im_client_new(NULL, NULL);
if (client == NULL) {
    fprintf(stderr, "init failed\n");
    return -1;
}
im_client_connect(im_client_t*, const char* token, char* out_user_id, size_t out_len)
自 1.0.0长连接(WebSocket)

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

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

{userId:string, sessionId?:string} 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_connect(client, NULL, NULL, 0);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_disconnect(im_client_t*)
自 1.0.0长连接(WebSocket)幂等

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

返回

void / null 成功时返回 0;失败时返回非 0 错误码。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_disconnect(client);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_connection_status(im_client_t*) -> int
自 1.0.0本地(无 IO)

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

返回

ConnectionStatus 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_connection_status(client);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_current_user_id(im_client_t*, char* out, size_t out_len)
自 1.0.0本地(无 IO)

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

返回

string 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_current_user_id(client, NULL, 0);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_set_event_callback(im_client_t*, im_event_cb cb, void* user_data)
自 1.0.0本地(无 IO)幂等

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

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

void / null 成功时返回 0;失败时返回非 0 错误码。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
/* on_event 需按 include/im_sdk.h 的 im_event_cb 原型实现 */
int rc = im_client_set_event_callback(client, on_event, NULL);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}

消息(4)​

im_client_send_content(im_client_t*, int conversation_type, const char* target_id, const char* content_json, const char* client_msg_id, char* out_json, size_t out_len)
自 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 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_send_content(client, 1 /* ConversationType.PRIVATE */, NULL, NULL, NULL, NULL, 0);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_send_text(im_client_t*, int conversation_type, const char* target_id, const char* text, const char* client_msg_id, char* out_message_id, size_t out_len)
自 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 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_send_text(client, 1 /* ConversationType.PRIVATE */, NULL, NULL, NULL, NULL, 0);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_recall(im_client_t*, const char* message_id)
自 1.0.0长连接(WebSocket)

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

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

Message 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_recall(client, NULL);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_send_read_receipt(im_client_t*, int conversation_type, const char* target_id, const char* const* message_ids, size_t count)
自 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} 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_send_read_receipt(client, 1 /* ConversationType.PRIVATE */, NULL, NULL, 1);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}

会话(2)​

im_client_conversation_list(im_client_t*, char** out_json) + im_string_free
自 1.0.0REST(HTTP)

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

返回

Conversation[] 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
char* out_json = NULL;
int rc = im_client_conversation_list(client, &out_json);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_string_free(out_json);
im_client_history(im_client_t*, int conversation_type, const char* target_id, int limit, unsigned long long before_seq, char** out_json)
自 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} 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
char* out_json = NULL;
int rc = im_client_history(client, 1 /* ConversationType.PRIVATE */, NULL, 20, 0, &out_json);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_string_free(out_json);

群组(1)​

im_client_group_members(im_client_t*, const char* group_id, char** out_json)
自 1.0.0REST(HTTP)

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

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

GroupMember[] 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
char* out_json = NULL;
int rc = im_client_group_members(client, NULL, &out_json);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_string_free(out_json);

聊天室(3)​

im_client_chatroom_join(im_client_t*, const char* chatroom_id)
自 1.0.0长连接(WebSocket)幂等

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

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

Chatroom 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_chatroom_join(client, NULL);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_chatroom_leave(im_client_t*, const char* chatroom_id)
自 1.0.0长连接(WebSocket)幂等

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

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

void / null 成功时返回 0;失败时返回非 0 错误码。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
int rc = im_client_chatroom_leave(client, NULL);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_client_chatroom_info(im_client_t*, const char* chatroom_id, char** out_json)
自 1.0.0REST(HTTP)

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

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

Chatroom 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
char* out_json = NULL;
int rc = im_client_chatroom_info(client, NULL, &out_json);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_string_free(out_json);

文件上传(1)​

im_client_upload_file(im_client_t*, const void* data, size_t len, const char* name, const char* mime, char** out_json)
自 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} 成功时返回 0,并通过 out 参数回填数据(JSON 由调用方释放)。

示例
C
// client 由 im_client_new() 创建(见 init 示例)
char* out_json = NULL;
int rc = im_client_upload_file(client, NULL, sizeof(data) - 1, NULL, NULL, &out_json);
if (rc != 0) {
    fprintf(stderr, "im_sdk error: %d\n", rc);
}
im_string_free(out_json);

未导出的语义操作​

下列 86 个语义操作尚未导出为 C ABI 函数。可以改用 Rust core(im-sdk crate)直接调用,或通过服务端 Open API 完成同等管理动作;导出后签名将保持与 IDL 语义 op 同名。

语义操作能力域传输返回类型说明
removeEventListener连接与监听本地(无 IO)null移除事件监听
sendImageMessage消息长连接(WebSocket)Message发送图片消息
sendFileMessage消息长连接(WebSocket)Message发送文件消息
sendVoiceMessage消息长连接(WebSocket)Message发送语音消息
sendLocationMessage消息长连接(WebSocket)Message发送位置消息
sendTypingStatus消息长连接(WebSocket)null发送正在输入状态
getMessageReadCount消息REST(HTTP){messageId:string, readCount:uint32, totalMembers:uint32}查询消息已读人数
getMessageReadUsers消息REST(HTTP){messageId:string, readCount:uint32, totalMembers:uint32, readers:UserProfile[]}查询已读用户明细(分页)
getMessageReadDetail消息REST(HTTP){messageId:string, readCount:uint32, unreadCount:uint32, totalMembers:uint32, filter:string, offset:uint32, limit:uint32, total:uint32, hasMore:boolean, items:MessageReadDetailItem[]}查询单条消息的已读详情:已读/未读名单 + 具体读取时间(分页)
searchMessages消息REST(HTTP){messages:Message[], total:uint32}在当前用户全部会话中搜索文本消息(倒序)
getConversation会话REST(HTTP)Conversation单会话详情
clearUnreadCount会话长连接(WebSocket)null清空会话未读(等价 read 帧 + 本地清零)
setConversationToTop会话REST(HTTP)null会话置顶/取消
saveTextMessageDraft会话REST(HTTP)null保存草稿(空串=清除)
getTextMessageDraft会话REST(HTTP)string读取草稿
clearTextMessageDraft会话REST(HTTP)null清除草稿
setConversationNotificationLevel会话REST(HTTP)null会话提醒级别:0 全部 / 1 仅提及 / 2 免打扰
getUserProfile用户REST(HTTP)UserProfile查询用户资料
updateMyUserProfile用户REST(HTTP)UserProfile修改本人资料(name/avatarUrl)
getOnlineStatus用户REST(HTTP){userId:string, online:bool, sessionCount:uint32}查询单个用户在线状态
getOnlineStatusBatch用户REST(HTTP){items:[{userId:string,online:bool,sessionCount:uint32}]}批量在线状态(<=100)
searchUsers好友与黑名单REST(HTTP){users:[{userId:string,name:string,isFriend:bool,blacklisted:bool}], total:uint32}搜索用户(userId/name,大小写不敏感,排除自己)
sendFriendRequest好友与黑名单REST(HTTP)FriendRequest发起好友申请
getFriendRequests好友与黑名单REST(HTTP)FriendRequest[]好友申请列表(incoming/outgoing,pending/all)
acceptFriendRequest好友与黑名单REST(HTTP)FriendRequest同意申请,双向建立好友关系
rejectFriendRequest好友与黑名单REST(HTTP)FriendRequest拒绝申请
getFriends好友与黑名单REST(HTTP)[{userId:string,name?:string,avatarUrl?:string,remark?:string,online?:bool,blacklisted?:bool}]好友列表(含备注/在线/拉黑标记)
deleteFriend好友与黑名单REST(HTTP)null双向删除好友
setFriendRemark好友与黑名单REST(HTTP)null设置好友备注(<=64 字,空串清除)
getBlacklist好友与黑名单REST(HTTP)[{userId:string,name?:string}]黑名单列表
addToBlacklist好友与黑名单REST(HTTP)null加入黑名单(幂等)
removeFromBlacklist好友与黑名单REST(HTTP)null移出黑名单
createGroup群组REST(HTTP)Group创建群(groupType 缺省 normal)
getGroupsInfo群组REST(HTTP)Group[]批量查询群信息(<=20)
addGroupMembers群组REST(HTTP){added:string[], group:Group}拉人入群(群主/管理员)
removeGroupMembers群组REST(HTTP){removed:string[]}移除成员(群主/管理员)
quitGroup群组REST(HTTP)null退出群
updateGroupName群组REST(HTTP)Group修改群名(群主/管理员)
updateGroupNotice群组REST(HTTP)Group设置群公告(群主/管理员,<=500 字,空串清除)
transferGroupOwner群组REST(HTTP)Group转让群主(新群主须为成员)
addGroupAdmin群组REST(HTTP)Group设置管理员(群主,幂等)
removeGroupAdmin群组REST(HTTP)Group取消管理员(群主)
muteGroupMember群组REST(HTTP){groupId:string,userId:string,mutedUntil:uint64,group:Group}禁言/解禁(群主/管理员)
createChatroom聊天室REST(HTTP)Chatroom创建聊天室(客户端能力)
getChatroomMembers聊天室REST(HTTP){members:ChatroomMember[], total:uint32}聊天室在线成员列表
getSystemMessages系统通知REST(HTTP){messages:Message[], hasMore:bool}系统通知历史(会话 conversationType=SYSTEM,targetId='system')
updateMessageExpansion消息REST(HTTP){messageId:string, expansion:Record<string,string>}更新已发送消息的扩展 KV(合并语义)
removeMessageExpansion消息REST(HTTP){messageId:string, removed:string[], expansion:Record<string,string>}删除消息扩展 KV(按 key)
addMessageReaction消息REST(HTTP){messageId:string, reactionId:string, userId:string, reactionTime:uint64}为指定消息添加回应(reactionId 由业务定义,1-16 字符)
removeMessageReaction消息REST(HTTP){messageId:string, reactionId:string, removed:boolean}移除自己对指定消息的回应
batchGetMessageReactionSummaries消息REST(HTTP)Record<string, ReactionSummary[]>(ReactionSummary={reactionId:string,totalCount:uint32,hasCurrentUserReacted:boolean,reactionTime:uint64,users:{userId:string,reactionTime:uint64}[]})批量查询消息回应摘要(1-100 个 messageId)
getMessageReactions消息REST(HTTP){reactions:ReactionSummary[], pageToken?:string, totalCount:uint32}分页查询指定消息的回应列表(count 1-50,默认 20)
getMessageReactionUsers消息REST(HTTP){users:{userId:string,reactionTime:uint64}[], pageToken?:string, totalCount:uint32}分页查询某个回应的参与用户(count 1-50,默认 20)
createConversationTag会话REST(HTTP)ConversationTag创建会话标签(tagName ≤16)
updateConversationTag会话REST(HTTP)ConversationTag重命名会话标签
deleteConversationTag会话REST(HTTP)void删除会话标签(同时清除标签内会话引用)
getConversationTags会话REST(HTTP)ConversationTag[]获取全部会话标签(含会话数量)
addConversationsToTag会话REST(HTTP){added:int, existing:int, conversationCount:int}把会话加入标签(≤100/次,幂等)
removeConversationsFromTag会话REST(HTTP){removed:int, conversationCount:int}把会话移出标签(≤100/次,幂等)
getConversationsFromTagByPage会话REST(HTTP){total:int, items:ConversationTagConversation[]}分页获取标签内会话(含置顶/未读数/最后消息时间)
getTagsFromConversation会话REST(HTTP)ConversationTag[]查询某个会话所属的标签列表
getUnreadCountByTag会话REST(HTTP){unreadCount:int, unreadConversations:int, conversationCount:int}标签内未读汇总(消息总数 + 有未读的会话数)
setConversationToTopInTag会话REST(HTTP)void标签内置顶/取消置顶会话(同步会话会话级置顶状态)
deleteConversation会话REST(HTTP){removed:bool}删除会话记录(列表项/未读/草稿/置顶),历史消息保留
getConversationTypeNotification会话REST(HTTP){conversationType:int, level:int}查询按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)
setConversationTypeNotification会话REST(HTTP){conversationType:int, level:int}设置按会话类型默认免打扰级别(0 全部 / 1 仅 @ / 2 免打扰)
startStreamMessage消息REST(HTTP)StreamMessage开始一条流式消息(IDL rev17)
appendStreamMessage消息REST(HTTP)StreamMessage追加一个流式增量(IDL rev17)
completeStreamMessage消息REST(HTTP){streamId:string, messageId:string, text:string, status:streaming|ended, complete:bool, message?:Message}结束流式消息(IDL rev17)
getStreamMessage消息REST(HTTP)StreamMessage查询流式消息快照(IDL rev17)
getMessageExpansion消息REST(HTTP){messageId:string, expansion:Record<string,string>}读取已发送消息的扩展 KV(IDL rev19)
combineMessages消息本地(无 IO)CombineContent本地构造合并转发内容(IDL rev19,transport=local,不做网络 IO):把 Message[] 转换为 `{type:'co…
subscribePresence用户REST(HTTP){subscribed:string[]}订阅用户在线状态(IDL rev20)
unsubscribePresence用户REST(HTTP){subscribed:string[]}取消订阅用户在线状态(IDL rev20)
getPresenceSubscriptions用户REST(HTTP){userId:string, subscribed:string[]}查询当前用户的在线状态订阅列表(IDL rev20)
registerPushToken用户REST(HTTP)PushToken注册设备推送 token(IDL rev21 C23 收口)
unregisterPushToken用户REST(HTTP){tokenId:string, userId:string, platform:string, deleted:bool, active:bool, alreadyInactive:bool}注销本人设备推送 token(IDL rev21 C23)
getPushTokens用户REST(HTTP){userId:string, tokens:PushToken[], total:uint32, activeTotal:uint32, platforms:string[]}查询本人设备推送 token(IDL rev21 C23)
createSupergroupChannel群组REST(HTTP)SupergroupChannel创建超级群频道(IDL rev21 C17)
listSupergroupChannels群组REST(HTTP){groupId:string, channels:SupergroupChannel[], total:uint32}超级群频道列表(IDL rev21 C17)
joinSupergroupChannel群组REST(HTTP){groupId:string, channelId:string, userId:string, joined:bool, alreadyJoined:bool}加入超级群频道(IDL rev21 C17)
leaveSupergroupChannel群组REST(HTTP){groupId:string, channelId:string, userId:string, left:bool, wasMember:bool}离开超级群频道(IDL rev21 C17)
bindUserGroupToChannel群组REST(HTTP){groupId:string, channelId:string, userGroupId:string, bound:bool, reverseIndexed:bool}把用户组绑定到频道(IDL rev21 C17)
createUserGroup群组REST(HTTP)UserGroup创建超级群用户组(IDL rev21 C17)
listUserGroups群组REST(HTTP){groupId:string, userGroups:UserGroup[], total:uint32}超级群用户组列表(IDL rev21 C17)
getUserGroupsByUser群组REST(HTTP){userId:string, userGroups:UserGroup[], total:uint32}查询某用户所在的所有用户组(IDL rev21 C17)

相关链接​