发送消息

支持文本、图片、文件、语音、位置与自定义消息;发送接口统一返回消息实体与发送状态。

平台调用风格

C ABI 约定:im_client_* 返回 int(0 成功,非 0 为 IDL 错误码);char** out_json 由库分配、调用方用 im_string_free 释放;char* out + size_t cap 为调用方缓冲区(0 成功 / -1 参数非法 / -2 缓冲区不足)。

接口一览​

操作语义传输返回
sendMessage发送任意类型消息。优先走长连接;连接不可用(SUSPEND/DISCONNECTED)时按 SDK_NO_CONNECTION 失败并保留本地待发队列(可选实现)。rev23:options.channelId 用于超级群频道消息(conversationType=10),仅频道成员接收;消息模型带 channelId。WS 长连接Message
sendTextMessage发送文本消息;内部等价 sendMessage(content={type:'text',text,mentionedInfo?,quote?})。WS 长连接Message
sendImageMessage发送图片消息;url 由 uploadFile 或业务方上传得到。WS 长连接Message
sendFileMessage发送文件消息。WS 长连接Message
sendVoiceMessage发送语音消息;duration 秒 1..300。WS 长连接Message
sendLocationMessage发送位置消息;lat/lng 范围校验。WS 长连接Message

本页 6 个操作,其中 2 个在本平台绑定中声明了方法签名,其余为 C ABI 未暴露(见对应小节)。

跨端方法名​

操作AndroidWebElectronmacOSFlutterNative (C ABI)iOS
sendMessagesendMessagesendMessagesendMessagesendMessagesendMessageim_client_send_contentfunc
sendTextMessagesendTextMessagesendTextMessagesendTextMessagesendTextMessagesendTextMessageim_client_send_textfunc
sendImageMessagesendImageMessagesendImageMessagesendImageMessagesendImageMessagesendImageMessage—func
sendFileMessagesendFileMessagesendFileMessagesendFileMessagesendFileMessagesendFileMessage—func
sendVoiceMessagesendVoiceMessagesendVoiceMessagesendVoiceMessagesendVoiceMessagesendVoiceMessage—func
sendLocationMessagesendLocationMessagesendLocationMessagesendLocationMessagesendLocationMessagesendLocationMessage—func

方法名在 GA 平台之间保持一致(规则 A);Native C ABI 只覆盖部分操作,其余操作以 — 标注。

sendMessage​

发送任意类型消息。优先走长连接;连接不可用(SUSPEND/DISCONNECTED)时按 SDK_NO_CONNECTION 失败并保留本地待发队列(可选实现)。rev23:options.channelId 用于超级群频道消息(conversationType=10),仅频道成员接收;消息模型带 channelId。

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)
WS 长连接since 1.0.0
参数
参数类型说明
conversationTypeConversationType必填;会话类型枚举(ConversationType)
targetIdstring必填;目标会话 ID:单聊为对方 userId,群聊为 groupId,聊天室为 chatroomId
contentContent必填;消息内容体(按消息类型传对应字段)
options{clientMsgId?:string, channelId?:string}可选;选项对象(字段见类型列):{ clientMsgId?:string, channelId?:string }
返回

Message 消息实体(messageId、seq、发送状态)

示例
C
const char* content_json = "{\"type\":\"text\",\"text\":\"你好,NI PaaS\"}";
char out[1024];
int rc = im_client_send_content(client, 1, "user2", content_json, NULL, out, sizeof(out));
错误码
错误码名称分类HTTP可重试说明
1001INVALID_PARAMETER客户端 / 参数 / 权限400否参数错误
1003FORBIDDEN客户端 / 参数 / 权限403否无权限
1004USER_NOT_FOUND客户端 / 参数 / 权限404否用户不存在
1005GROUP_NOT_FOUND客户端 / 参数 / 权限404否群组不存在
1006NOT_GROUP_MEMBER客户端 / 参数 / 权限403否未加入群组
1007MESSAGE_TOO_LARGE客户端 / 参数 / 权限400否消息体过大(上限 5KB)
1008RATE_LIMITED客户端 / 参数 / 权限429是发送过于频繁
1009GROUP_MUTED客户端 / 参数 / 权限403否你已被禁言
1010SENSITIVE_WORD客户端 / 参数 / 权限400否内容包含敏感词
1011BLOCKED客户端 / 参数 / 权限403否已被对方拉黑或你已拉黑对方
1012CHATROOM_NOT_FOUND客户端 / 参数 / 权限404否聊天室不存在
1013CHATROOM_CLOSED客户端 / 参数 / 权限410否聊天室已销毁
1014NOT_CHATROOM_MEMBER客户端 / 参数 / 权限403否未加入聊天室
1016USER_BANNED客户端 / 参数 / 权限403否账号已被封禁
1021SERVICE_NOT_ACTIVATEDOpen API 签名与开通403否服务未开通
3001SDK_NOT_CONNECTEDSDK 本地0是长连接未就绪
3002SDK_TIMEOUTSDK 本地0是请求超时

sendTextMessage​

发送文本消息;内部等价 sendMessage(content={type:'text',text,mentionedInfo?,quote?})。

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)
WS 长连接since 1.0.0
参数
参数类型说明
conversationTypeConversationType必填;会话类型枚举(ConversationType)
targetIdstring必填;目标会话 ID:单聊为对方 userId,群聊为 groupId,聊天室为 chatroomId
textstring必填;文本内容(上限见消息体限制)
options{clientMsgId?:string, mentionedInfo?:MentionedInfo, quote?:Quote, channelId?:string}可选;选项对象(字段见类型列):{ clientMsgId?:string, mentionedInfo?:MentionedInfo, quote?:Quote, channelId?:string }
返回

Message 消息实体(messageId、seq、发送状态)

示例
C
char message_id[128];
int rc = im_client_send_text(client, 1 /* ConversationType.PRIVATE */, "user2", "你好,NI PaaS",
                             NULL /* clientMsgId,传值则作为幂等键 */, message_id, sizeof(message_id));
if (rc != 0) { fprintf(stderr, "send failed: %d\n", rc); }
错误码
错误码名称分类HTTP可重试说明
1001INVALID_PARAMETER客户端 / 参数 / 权限400否参数错误
1007MESSAGE_TOO_LARGE客户端 / 参数 / 权限400否消息体过大(上限 5KB)
1009GROUP_MUTED客户端 / 参数 / 权限403否你已被禁言
1010SENSITIVE_WORD客户端 / 参数 / 权限400否内容包含敏感词
1011BLOCKED客户端 / 参数 / 权限403否已被对方拉黑或你已拉黑对方
3001SDK_NOT_CONNECTEDSDK 本地0是长连接未就绪
3002SDK_TIMEOUTSDK 本地0是请求超时

sendImageMessage​

发送图片消息;url 由 uploadFile 或业务方上传得到。

本平台 C ABI 未暴露该方法
WS 长连接since 1.0.0

本操作未在 native C ABI(include/im_sdk.h)暴露;如需该能力,请使用 Web / Electron / Flutter / Android 绑定,或通过服务端 Open API 完成。

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

Message 消息实体(messageId、seq、发送状态)

错误码
错误码名称分类HTTP可重试说明
1001INVALID_PARAMETER客户端 / 参数 / 权限400否参数错误
1007MESSAGE_TOO_LARGE客户端 / 参数 / 权限400否消息体过大(上限 5KB)
1009GROUP_MUTED客户端 / 参数 / 权限403否你已被禁言
1011BLOCKED客户端 / 参数 / 权限403否已被对方拉黑或你已拉黑对方
3001SDK_NOT_CONNECTEDSDK 本地0是长连接未就绪

sendFileMessage​

发送文件消息。

本平台 C ABI 未暴露该方法
WS 长连接since 1.0.0

本操作未在 native C ABI(include/im_sdk.h)暴露;如需该能力,请使用 Web / Electron / Flutter / Android 绑定,或通过服务端 Open API 完成。

参数
参数类型说明
conversationTypeConversationType必填;会话类型枚举(ConversationType)
targetIdstring必填;目标会话 ID:单聊为对方 userId,群聊为 groupId,聊天室为 chatroomId
content{url:string,name:string,size?:uint64,mime?:string}必填;消息内容体(按消息类型传对应字段):{ url:string, name:string, size?:uint64, mime?:string }
options{clientMsgId?:string, channelId?:string}可选;选项对象(字段见类型列):{ clientMsgId?:string, channelId?:string }
返回

Message 消息实体(messageId、seq、发送状态)

错误码
错误码名称分类HTTP可重试说明
1001INVALID_PARAMETER客户端 / 参数 / 权限400否参数错误
1007MESSAGE_TOO_LARGE客户端 / 参数 / 权限400否消息体过大(上限 5KB)
1009GROUP_MUTED客户端 / 参数 / 权限403否你已被禁言
1011BLOCKED客户端 / 参数 / 权限403否已被对方拉黑或你已拉黑对方
3001SDK_NOT_CONNECTEDSDK 本地0是长连接未就绪

sendVoiceMessage​

发送语音消息;duration 秒 1..300。

本平台 C ABI 未暴露该方法
WS 长连接since 1.0.0

本操作未在 native C ABI(include/im_sdk.h)暴露;如需该能力,请使用 Web / Electron / Flutter / Android 绑定,或通过服务端 Open API 完成。

参数
参数类型说明
conversationTypeConversationType必填;会话类型枚举(ConversationType)
targetIdstring必填;目标会话 ID:单聊为对方 userId,群聊为 groupId,聊天室为 chatroomId
content{url:string,duration:uint32}必填;消息内容体(按消息类型传对应字段):{ url:string, duration:uint32 }
options{clientMsgId?:string, channelId?:string}可选;选项对象(字段见类型列):{ clientMsgId?:string, channelId?:string }
返回

Message 消息实体(messageId、seq、发送状态)

错误码
错误码名称分类HTTP可重试说明
1001INVALID_PARAMETER客户端 / 参数 / 权限400否参数错误
1007MESSAGE_TOO_LARGE客户端 / 参数 / 权限400否消息体过大(上限 5KB)
1009GROUP_MUTED客户端 / 参数 / 权限403否你已被禁言
1011BLOCKED客户端 / 参数 / 权限403否已被对方拉黑或你已拉黑对方
3001SDK_NOT_CONNECTEDSDK 本地0是长连接未就绪

sendLocationMessage​

发送位置消息;lat/lng 范围校验。

本平台 C ABI 未暴露该方法
WS 长连接since 1.0.0

本操作未在 native C ABI(include/im_sdk.h)暴露;如需该能力,请使用 Web / Electron / Flutter / Android 绑定,或通过服务端 Open API 完成。

参数
参数类型说明
conversationTypeConversationType必填;会话类型枚举(ConversationType)
targetIdstring必填;目标会话 ID:单聊为对方 userId,群聊为 groupId,聊天室为 chatroomId
content{latitude:double,longitude:double,address?:string}必填;消息内容体(按消息类型传对应字段):{ latitude:double, longitude:double, address?:string }
options{clientMsgId?:string, channelId?:string}可选;选项对象(字段见类型列):{ clientMsgId?:string, channelId?:string }
返回

Message 消息实体(messageId、seq、发送状态)

错误码
错误码名称分类HTTP可重试说明
1001INVALID_PARAMETER客户端 / 参数 / 权限400否参数错误
1007MESSAGE_TOO_LARGE客户端 / 参数 / 权限400否消息体过大(上限 5KB)
1009GROUP_MUTED客户端 / 参数 / 权限403否你已被禁言
1011BLOCKED客户端 / 参数 / 权限403否已被对方拉黑或你已拉黑对方
3001SDK_NOT_CONNECTEDSDK 本地0是长连接未就绪

相关文档​