数据类型
嵌套枚举的类型名按所属类解析,例如 DRException.Source、AndroidChannel.Kind。
本页按业务列出返回视图、输入选项、枚举和状态分支。业务类型默认位于 com.deeprespond.im;原生扩展的包另行注明。接口参考列出消费这些类型的完整模块签名。
通用约定
- 时间字段通常为 Unix 毫秒时间戳;RFC 3339 的服务端时间已转换为 Long。可空字段表示不存在或尚未获知,不应强制解包。
- Kotlin 时长使用
kotlin.time.Duration。Java 使用...Millis字段及ofMillis、builder 等桥接入口。 - 只读视图继承 DRObject,
raw: JsonObject保留原始服务端字段,rawJson(): String返回 JSON 文本。不要直接修改它们;未变化的列表项可能沿用同一对象。 - 服务端状态字符串可能增加新值。枚举仅用于已明确封闭的输入;业务处理未知响应值时应有兜底。
- JsonObject 用
buildJsonObject构造。接收Map<String, Any?>的便捷重载只能放可转换为 JSON 的值。 - 游标分页的 nextCursor 为 null 时结束;LiveListSnapshot 中 loading / error / hasMore 表示当前窗口状态。
基础、登录与诊断
DRObject
| 字段 | 类型 |
|---|---|
raw | JsonObject |
DRPage
| 字段 | 类型 |
|---|---|
items | List<T> |
nextCursor | String? |
AuthState
| 字段 | 类型 |
|---|---|
kind | Kind |
分支(使用 AuthState.分支名):
data object SignedOut
data object SignedIn
data class Suspended(val code: String, val reason: String?, val retryAt: Long)
data class SessionEnded(val code: String, val reason: String?, val details: JsonObject?)AuthState.Kind:SIGNED_OUT、SIGNED_IN、SUSPENDED、SESSION_ENDED。
SyncModule
取值:CONFIG、ME、FRIENDS、GROUPS、MESSAGES、PUSH、CALLS、CHATROOMS、PRESENCE。
SyncTrigger
取值:PERIODIC、FOREGROUND、FALLBACK、HINT、SYNC_REQUIRED、RECONNECT、LOGIN。
DRConnectionState
| 字段 | 类型 |
|---|---|
kind | Kind |
分支(使用 DRConnectionState.分支名):
data object Idle
data object Connecting
data object Authenticating
data class Syncing(val pending: List<SyncModule>)
data object Ready
data class Waiting(val retryAt: Long, val lastErrorCode: String?, val lastErrorReason: String?)
data object Offline
data class Paused(val reason: String)
data class Stopped(val code: String, val details: JsonObject?)DRConnectionState.Kind:IDLE、CONNECTING、AUTHENTICATING、SYNCING、READY、WAITING、OFFLINE、PAUSED、STOPPED。
CurrentUser
| 字段 | 类型 |
|---|---|
username | String |
sessionId | String |
LoginResult
| 字段 | 类型 |
|---|---|
user | SelfProfile |
config | ClientConfig |
sessionId | String |
DisconnectRecord
| 字段 | 类型 |
|---|---|
at | Long |
closeCode | Int? |
code | String? |
reason | String? |
FailureRecord
| 字段 | 类型 |
|---|---|
at | Long |
op | String |
code | String |
requestId | String? |
Diagnostics
| 字段 | 类型 |
|---|---|
sdkVersion | String |
deviceId | String |
sessionId | String? |
connectionId | String? |
connection | DRConnectionState |
loginMethod | String? |
recentDisconnects | List<DisconnectRecord> |
recentFailures | List<FailureRecord> |
lastSyncAt | Map<SyncModule, Long> |
storageMode | StorageMode |
sqlite | SqliteSource |
encrypted | Boolean |
serverTimeOffsetMs | Long |
outboxSize | Int |
extra | Map<String, String> |
pushChannels | List<com.deeprespond.im.push.PushChannel> |
system | SystemState |
SystemState
| 字段 | 类型 |
|---|---|
raw | Map<String, String> |
standbyBucket | String? |
backgroundRestricted | Boolean? |
powerSave | Boolean? |
dataSaver | String? |
ignoringBatteryOptimizations | Boolean? |
lowRam | Boolean? |
rom | String? |
build | String? |
targetSdk | Int? |
workProfile | Boolean? |
LiveListSnapshot
| 字段 | 类型 |
|---|---|
items | List<T> |
hasMore | Boolean |
loading | Boolean |
error | DRException? |
用户与配置
ClientConfig
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
version | String |
maxOnlineDevicesPerUser | Int? |
friendCheckEnabled | Boolean |
userBlacklistEnabled | Boolean |
maxGroupMembers | Int? |
clientGroupCreateEnabled | Boolean |
presenceEnabled | Boolean |
presenceScope | String? |
presenceLastSeenVisible | Boolean |
singleReadAckEnabled | Boolean |
groupReadAckEnabled | Boolean |
messageReactionEnabled | Boolean |
maxReactionsPerMessage | Int? |
maxPinnedMessagesPerConversation | Int? |
maxMessageBodyBytes | Long? |
recallWindowSeconds | Int? |
messageRetentionDays | Int? |
pushDefaultPreview | String? |
pushBadgeEnabled | Boolean |
attachmentRetentionDays | Int? |
maxUploadBytes | Long? |
groupFileEnabled | Boolean |
mediaUrlOnly | Boolean |
mediaUrlPrefix | String? |
reportEnabled | Boolean |
clientChatroomCreateEnabled | Boolean |
maxChatroomMessageBytes | Long? |
rtcEnabled | Boolean |
rtcRingTimeoutSeconds | Int? |
maxGroupCallParticipants | Int? |
SelfProfile
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
attributes | Map<String, String>? |
hasPassword | Boolean |
version | Long |
UserProfile
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
attributes | Map<String, String>? |
displayName | String |
LoginSession
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
sessionId | String |
deviceId | String? |
deviceName | String? |
platform | String? |
current | Boolean |
OnlineDevice
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
sessionId | String |
platform | String |
connectedAt | Long? |
current | Boolean |
MyMute
| 字段 | 类型 |
|---|---|
chat | GlobalMuteInfo? |
group | GlobalMuteInfo? |
room | GlobalMuteInfo? |
GlobalMuteInfo
| 字段 | 类型 |
|---|---|
expiresAt | Long? |
NotifyDecision
| 字段 | 类型 |
|---|---|
notify | Boolean |
title | String? |
body | String? |
reason | String? |
会话与消息
MessageType
TEXT:"text"IMAGE:"image"VOICE:"voice"VIDEO:"video"FILE:"file"LOCATION:"location"CUSTOM:"custom"TIP:"tip"CALL:"call"
ConversationType
SINGLE:"single"GROUP:"group"
MessageStatus
SENT:"sent"QUEUED:"queued"UPLOADING:"uploading"SENDING:"sending"FAILED:"failed"
Message
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
conversationId | String |
conversationType | String |
seq | Long |
messageId | String |
clientMsgId | String? |
sender | String? |
senderType | String |
recipient | String? |
type | String |
body | JsonObject? |
ext | JsonObject? |
createdAt | Long? |
messageVersion | Long |
MessageLocal
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
status | String |
progress | Double? |
error | DRException? |
statusUnknown | Boolean |
reacted | Map<String, Boolean> |
unsupported | Boolean |
trusted | Boolean |
filePath | String? |
thumbnailPath | String? |
MessageView
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
conversationId | String? |
conversationType | String |
seq | Long? |
messageId | String? |
clientMsgId | String? |
sender | String? |
senderType | String |
recipient | String? |
type | String |
body | JsonObject? |
ext | JsonObject? |
mentions | JsonObject? |
replyTo | JsonObject? |
needReceipt | Boolean |
reactions | List<JsonElement> |
pinned | JsonObject? |
edited | JsonObject? |
recalled | JsonObject? |
erased | Boolean |
via | String |
createdAt | Long? |
messageVersion | Long |
local | MessageLocal |
ConversationState
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
conversationId | String |
conversationType | String |
peer | String? |
groupId | String? |
membership | String? |
startSeq | Long |
maxSeq | Long |
readSeq | Long |
unreadCount | Int |
markedUnread | Boolean |
peerReadSeq | Long? |
mentionSeq | Long? |
clearedSeq | Long |
hiddenSeq | Long |
hidden | Boolean |
pinnedAt | Long? |
joinedAt | Long? |
leftAt | Long? |
messageVersion | Long |
lastMessageAt | Long? |
version | Long |
Draft
class Draft (
val text: String,
val mentionUsernames: List<String>? = null,
val mentionAll: Boolean = false,
val replyToSeq: Long? = null,
val createdAt: Long? = null,
val updatedAt: Long? = null,
)| 字段 | 类型 |
|---|---|
text | String |
mentionUsernames | List<String>? |
mentionAll | Boolean |
replyToSeq | Long? |
createdAt | Long? |
updatedAt | Long? |
ConversationView
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
conversationKey | String |
conversationId | String? |
conversationType | String |
peer | String? |
groupId | String? |
state | ConversationState? |
lastMessage | MessageView? |
unreadCount | Int |
draft | Draft? |
muted | MuteInfo? |
typing | List<String> |
MessageGap
| 字段 | 类型 |
|---|---|
fromSeq | Long |
toSeq | Long |
kind | String |
PinnedItem
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
seq | Long |
pinnedBy | String? |
pinnedAt | Long? |
message | MessageView? |
ReceiptCount
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
seq | Long |
readCount | Int? |
unreadCount | Int? |
code | String? |
details | JsonObject? |
ReceiptStatus
取值:READ、UNREAD。
OnlineMessage
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
messageId | String |
clientMsgId | String |
conversationType | String |
conversationId | String? |
sender | String? |
senderType | String |
recipient | String? |
groupId | String? |
type | String |
body | JsonObject |
ext | JsonObject? |
via | String |
createdAt | Long? |
OnlineResult
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
messageId | String |
clientMsgId | String |
createdAt | Long? |
onlineOnly | Boolean |
ReactionUser
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String? |
nickname | String? |
avatarUrl | String? |
reactedAt | Long? |
ReceiptUser
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String? |
nickname | String? |
avatarUrl | String? |
LookupResult
| 字段 | 类型 |
|---|---|
items | List<MessageView> |
missing | List<Long> |
MarkAllReadResult
| 字段 | 类型 |
|---|---|
count | Int |
truncated | Boolean |
MessageListLoading
取值:NONE、INITIAL、OLDER、NEWER。
MessageListSnapshot
| 字段 | 类型 |
|---|---|
items | List<MessageView> |
gaps | List<MessageGap> |
hasOlder | Boolean |
hasNewer | Boolean |
loading | MessageListLoading |
pinned | List<PinnedItem> |
error | DRException? |
SendTarget
分支(使用 SendTarget.分支名):
data class Conversation(val conversationKey: String)
data class User(val username: String)
data class Group(val groupId: String)OutgoingContent
Uploaded 和 Custom 除 JsonObject 主构造外,还接受 Map<String, Any?>;Java 的语音内容用 OutgoingContent.voice(file, durationMs)。Forward 只使用可转发的消息视图,权限和内容完整性仍由 SDK 校验。
分支(使用 OutgoingContent.分支名):
data class Text(val text: String)
data class Image(val file: DRFile, val original: Boolean = false)
data class Voice(val file: DRFile, val duration: Duration)
data class Video(val file: DRFile)
data class File(val file: DRFile, val name: String? = null)
data class Uploaded(val type: String, val body: JsonObject)
data class Location(val latitude: Double, val longitude: Double, val name: String? = null, val address: String? = null)
data class Custom(val body: JsonObject)
data class Forward(val message: MessageView)SendOptions
data class SendOptions(
val ext: JsonObject? = null,
val mentionUsernames: List<String>? = null,
val mentionAll: Boolean = false,
val replyToSeq: Long? = null,
val needReceipt: Boolean = false,
val excludeFromUnread: Boolean = false,
val pushDisabled: Boolean? = null,
val waitUntilSent: Boolean = false,
)| 字段 | 类型 |
|---|---|
ext | JsonObject? |
mentionUsernames | List<String>? |
mentionAll | Boolean |
replyToSeq | Long? |
needReceipt | Boolean |
excludeFromUnread | Boolean |
pushDisabled | Boolean? |
waitUntilSent | Boolean |
好友
FriendAddMode
取值:ALLOW_ANY、NEED_CONFIRM、DENY_ANY。
FriendRequestStatus
取值:PENDING、ACCEPTED、DECLINED、EXPIRED。
Friend
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
remark | String |
attributes | Map<String, String>? |
addSource | String |
createdAt | Long? |
displayName | String |
BlacklistEntry
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
createdAt | Long? |
FriendRequest
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
message | String |
addSource | String |
status | FriendRequestStatus? |
unread | Boolean |
remark | String? |
requestedAt | Long? |
expiresAt | Long? |
handledAt | Long? |
FriendCheck
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
isFriend | Boolean |
blocked | Boolean |
request | String? |
FriendListInfo
| 字段 | 类型 |
|---|---|
count | Int |
maxCount | Int |
FriendAddSettings
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
friendAddMode | FriendAddMode? |
effectiveFriendAddMode | FriendAddMode? |
FriendRequestResult
| 字段 | 类型 |
|---|---|
status | String |
friend | Friend? |
accepted | Boolean |
群组
GroupRole
取值:OWNER、ADMIN、MEMBER。
GroupType
取值:PRIVATE、PUBLIC。
MemberInvite
取值:FREE、APPROVAL、DISABLED。
JoinMode
取值:APPROVAL、FREE。
GroupRequestKind
取值:APPLICATION、INVITE_REVIEW、INVITATION。
GroupRequestStatus
取值:PENDING、ACCEPTED、DECLINED、CANCELED、EXPIRED。
InviteMode
取值:ALLOW_ANY、NEED_CONFIRM。
GroupSelf
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
role | GroupRole? |
groupNickname | String |
muted | Boolean |
mutedUntil | Long? |
joinedAt | Long? |
GroupInfo
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
groupId | String |
type | String |
name | String |
avatarUrl | String |
description | String? |
announcement | String? |
announcementUpdatedAt | Long? |
announcementUpdatedBy | String? |
attributes | Map<String, String>? |
owner | String? |
memberInvite | String? |
joinMode | String? |
muteAll | Boolean |
maxMembers | Int? |
memberCount | Int |
status | String |
infoVersion | Long? |
memberVersion | Long? |
createdAt | Long? |
self | GroupSelf? |
CreateGroupResult
| 字段 | 类型 |
|---|---|
results | List<GroupMemberResult> |
GroupView
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
groupId | String |
group | GroupInfo |
inMyGroups | Boolean |
GroupMember
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
role | GroupRole? |
groupNickname | String |
attributes | Map<String, String>? |
muted | Boolean |
mutedUntil | Long? |
joinedVia | String |
inviter | String? |
joinedAt | Long? |
GroupMemberResult
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
status | String? |
code | String? |
message | String? |
details | JsonObject? |
ok | Boolean |
GroupOnlineCount
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
onlineCount | Int |
countedAt | Long? |
GroupBlacklistEntry
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
reason | String? |
createdBy | String? |
createdByRole | String? |
createdAt | Long? |
JoinLink
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
link | String? |
expiresAt | Long? |
createdBy | String? |
JoinLinkPreview
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
groupId | String |
name | String |
avatarUrl | String |
memberCount | Int |
isMember | Boolean |
GroupRequestUser
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
GroupBrief
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
groupId | String |
name | String |
avatarUrl | String |
memberCount | Int |
GroupRequest
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
groupId | String |
kind | String |
username | String |
nickname | String |
avatarUrl | String |
inviter | GroupRequestUser? |
message | String? |
reason | String? |
status | String |
cancelCause | String? |
requestedAt | Long? |
expiresAt | Long? |
handledAt | Long? |
handledBy | String? |
group | GroupBrief? |
GroupInviteSettings
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
inviteMode | InviteMode? |
effectiveInviteMode | InviteMode? |
文件
FileKind
取值:IMAGE、VOICE、VIDEO、FILE。
UploadPurpose
取值:ATTACHMENT、USER_AVATAR、GROUP_AVATAR、CHATROOM_AVATAR、GROUP_FILE。
DRFile
使用 fromFile、fromBytes 或 Android 的 fromUri 工厂。withKeepMetadata 返回允许保留元数据的新来源;通常使用默认清理。工厂签名见接口参考。
| 字段 | 类型 |
|---|---|
name | String? |
mimeType | String? |
keepMetadata | Boolean |
FileInfo
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
fileId | String |
purpose | String |
kind | String |
status | String |
url | String |
thumbnailUrl | String? |
name | String? |
contentType | String |
size | Long |
width | Int? |
height | Int? |
owner | String? |
groupId | String? |
via | String |
createdAt | Long? |
expiresAt | Long? |
GroupFile
| 字段 | 类型 |
|---|---|
ownerNickname | String? |
ownerAvatarUrl | String? |
GroupFilesPage
| 字段 | 类型 |
|---|---|
items | List<GroupFile> |
nextCursor | String? |
fileCount | Int |
usedBytes | Long |
DownloadUrl
| 字段 | 类型 |
|---|---|
downloadUrl | String |
expiresAt | Long |
ResolvedUrl
| 字段 | 类型 |
|---|---|
url | String |
downloadUrl | String? |
expiresAt | Long? |
error | DRException? |
Progress
| 字段 | 类型 |
|---|---|
loaded | Long |
total | Long |
DownloadSource
分支(使用 DownloadSource.分支名):
class File(val url: String)
class Thumbnail(val url: String)
class Message(val message: MessageView)Conflict
取值:RENAME、OVERWRITE、FAIL。
PreparedFile
| 字段 | 类型 |
|---|---|
file | java.io.File |
kind | FileKind |
name | String |
format | String |
contentType | String |
size | Long |
width | Int? |
height | Int? |
duration | Duration? |
thumbnail | java.io.File? |
downgraded | String? |
metadataKept | Boolean |
durationMillis | Long? |
聊天室
ChatroomState
ENTERING:"entering"IN:"in"REENTERING:"reentering"REMOVED:"removed"LEFT:"left"
ChatroomSelf
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
role | String |
inRoom | Boolean |
muted | Boolean |
mutedUntil | Long? |
allowlisted | Boolean |
ChatroomInfo
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
roomId | String |
name | String |
description | String |
avatarUrl | String |
announcement | String |
announcementUpdatedAt | Long? |
announcementUpdatedBy | String? |
owner | String? |
admins | List<String> |
maxMembers | Int |
muteAll | Boolean |
listed | Boolean |
status | String |
disabledBy | String? |
memberCount | Int |
infoVersion | Long |
attributesVersion | Long |
createdAt | Long? |
self | ChatroomSelf? |
ChatroomListItem
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
roomId | String |
name | String |
description | String |
avatarUrl | String |
owner | String? |
maxMembers | Int |
memberCount | Int |
ChatroomOnlineCount
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
roomId | String |
memberCount | Int |
ChatroomAttribute
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
value | String? |
owner | String? |
autoDelete | Boolean |
updatedAt | Long? |
AttributeResult
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
changed | Boolean |
attributesVersion | Long |
failed | Map<String, JsonObject> |
ChatroomMessageLocal
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
status | String |
error | DRException? |
trusted | Boolean |
ChatroomMessageView
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
roomId | String |
messageId | String? |
clientMsgId | String? |
sender | String? |
senderType | String |
senderNickname | String? |
senderAvatarUrl | String? |
senderRole | String? |
type | String |
body | JsonObject? |
ext | JsonObject? |
priority | String |
via | String |
createdAt | Long? |
local | ChatroomMessageLocal |
ChatroomMember
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
role | String |
joinedAt | Long? |
ChatroomMemberResult
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
result | String? |
code | String? |
message | String? |
details | JsonObject? |
ok | Boolean |
ChatroomMuteEntry
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
mutedUntil | Long? |
reason | String |
createdBy | String? |
createdByRole | String |
createdAt | Long? |
ChatroomBanEntry
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
expiresAt | Long? |
reason | String |
createdBy | String? |
createdByRole | String |
createdAt | Long? |
ChatroomAllowlistEntry
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
createdBy | String? |
createdAt | Long? |
ChatroomPatch
class ChatroomPatch (
val name: String? = null,
val description: String? = null,
val avatarUrl: String? = null,
val announcement: String? = null,
val maxMembers: Int? = null,
val resetMaxMembers: Boolean = false,
val listed: Boolean? = null,
)| 字段 | 类型 |
|---|---|
name | String? |
description | String? |
avatarUrl | String? |
announcement | String? |
maxMembers | Int? |
resetMaxMembers | Boolean |
listed | Boolean? |
ChatroomPriority
取值:HIGH、NORMAL、LOW。
ChatroomRemoved
| 字段 | 类型 |
|---|---|
reason | String |
operator | String? |
expiresAt | Long? |
ChatroomSnapshot
| 字段 | 类型 |
|---|---|
info | ChatroomInfo |
attributes | Map<String, ChatroomAttribute> |
attributesVersion | Long |
messages | List<ChatroomMessageView> |
state | String |
removed | ChatroomRemoved? |
ChatroomEvent
MemberJoined / MemberLeft 除原始 data 外,还提供 username: String?。
分支(使用 ChatroomEvent.分支名):
data class MessageReceived(val message: ChatroomMessageView)
data class MessageRecalled(val messageId: String, val recalledBy: String?, val recalledAt: Long?)
data class MemberJoined(val data: JsonObject)
data class MemberLeft(val data: JsonObject)
data class Like(val username: String, val count: Int)
data class Dropped(val count: Int)
data class Removed(val removed: ChatroomRemoved)通话
CallMedia
取值:AUDIO、VIDEO。
RejectReason
取值:DECLINED、BUSY。
CallStatus
RINGING:"ringing"ACTIVE:"active"ENDED:"ended"
CallMemberState
RINGING:"ringing"JOINED:"joined"LEFT:"left"DECLINED:"declined"BUSY:"busy"MISSED:"missed"CANCELED:"canceled"
CallTarget
分支(使用 CallTarget.分支名):
class User(val username: String)
class Group(val groupId: String, val usernames: List<String>? = null)CallMember
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String? |
role | String |
state | String |
mediaUid | Int |
invitedBy | String? |
ringExpiresAt | Long? |
joinedAt | Long? |
leftAt | Long? |
leaveReason | String? |
CallSelf
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
state | String? |
joinedOnThisDevice | Boolean |
Call
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
callId | String |
type | String |
groupId | String? |
media | String |
status | String |
initiator | String? |
maxParticipants | Int |
joinedCount | Int |
members | List<CallMember> |
createdAt | Long? |
answeredAt | Long? |
endedAt | Long? |
endReason | String? |
endedBy | String? |
duration | Duration? |
durationMillis | Long? |
version | Long |
ext | Map<String, String>? |
self | CallSelf? |
CallSummary
| 字段 | 类型 |
|---|---|
peer | String? |
CallChange
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
kind | String |
usernames | List<String> |
actor | String? |
reason | String? |
CallInviteResult
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
status | String? |
code | String? |
message | String? |
details | JsonObject? |
ok | Boolean |
CallInviter
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
nickname | String |
avatarUrl | String |
CallGroup
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
groupId | String |
name | String |
avatarUrl | String |
GroupCallBanner
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
groupId | String |
callId | String |
media | String |
status | String |
joinedCount | Int |
initiator | String? |
version | Long |
CallLocalMedia
| 字段 | 类型 |
|---|---|
microphone | Boolean |
camera | Boolean |
CallRemoteMedia
| 字段 | 类型 |
|---|---|
username | String? |
mediaUid | Int |
audio | Boolean |
video | Boolean |
CallSnapshot
| 字段 | 类型 |
|---|---|
call | Call |
self | CallSelf? |
inviter | CallInviter? |
group | CallGroup? |
media | String |
local | CallLocalMedia |
remote | List<CallRemoteMedia> |
ringing | Boolean |
resumable | Boolean |
CallTrack
| 字段 | 类型 |
|---|---|
username | String? |
mediaUid | Int |
local | Boolean |
CallTracks
| 字段 | 类型 |
|---|---|
local | CallTrack? |
remote | List<CallTrack> |
CallDataMessage
| 字段 | 类型 |
|---|---|
username | String? |
mediaUid | Int |
data | ByteArray |
提醒与推送内容
PushPreview
取值:FULL、SENDER_ONLY、NONE。
MuteMode
取值:NONE、MENTION_ONLY。
MuteTarget
通过 MuteTarget.single(username)、MuteTarget.group(groupId) 构造,构造器不对外开放。
| 字段 | 类型 |
|---|---|
conversationType | String |
target | String |
MuteInfo
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
mode | String |
muteMode | MuteMode? |
until | Long? |
QuietHours
class QuietHours(val start: String, val end: String, val timezone: String)| 字段 | 类型 |
|---|---|
start | String |
end | String |
timezone | String |
PushSettings
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
dndEnabled | Boolean |
dndUntil | Long? |
quietHours | QuietHours? |
preview | PushPreview? |
effectivePreview | PushPreview |
settingsVersion | Long |
DndChange
分支(使用 DndChange.分支名):
class On(val duration: Duration? = null)
data object OffQuietHoursChange
分支(使用 QuietHoursChange.分支名):
class Set(val value: QuietHours)
data object OffPreviewChange
分支(使用 PreviewChange.分支名):
class Set(val value: PushPreview)
data object UseDefaultPushChannel
取值:FCM、HUAWEI、HONOR、XIAOMI、OPPO、VIVO、MEIZU。
PushPayload
PushPayload 位于 com.deeprespond.im.push。公共字段为 raw(JsonObject)、version(Int)、kind(String);未知 kind 保留为 Unknown,业务按普通通知处理。PushPayload.parse(data, channel?) 从通道数据解析,无 SDK 载荷时为 null;fromIm(JsonObject) 直接解析 im 对象。
| 分支 | 额外字段 |
|---|---|
| Message | conversationType: String、conversationId: String、seq: Long?、messageId: String?、sender: String?、ext: JsonObject?、extDropped: Boolean |
| Recall | conversationType: String、conversationId: String、messageId: String? |
| Notice | notice: String?、user: String?、groupId: String? |
| Call | event: String、callId: String、data: JsonObject?、title: String?、body: String?、callerName: String?、ringExpiresAt: Long? |
| Dismiss | callId: String |
| Test、Unknown | 仅公共字段 |
Call.event 常见 incoming、missed、canceled;通知预览策略可能使详情为空,点击后通过模块获取最新业务数据。
分支(使用 PushPayload.分支名):
data class Message(override val raw: JsonObject)
data class Recall(override val raw: JsonObject)
data class Notice(override val raw: JsonObject)
data class Call(override val raw: JsonObject)
data class Dismiss(override val raw: JsonObject)
data class Test(override val raw: JsonObject)
data class Unknown(override val raw: JsonObject)在线状态与举报
PresenceState
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
username | String |
online | Boolean |
platforms | List<String> |
lastSeenAt | Long? |
version | Long |
PresenceFailure
取值:DENIED、LIMIT_EXCEEDED、PRESENCE_DISABLED。
ReportReason
取值:AD、FRAUD、PORN、POLITICS、TERRORISM、ABUSE、ILLEGAL、INFRINGEMENT、MINOR、OTHER。
ReportTarget
分支(使用 ReportTarget.分支名):
class Message(val messageId: String)
class User(val username: String, val evidenceMessageIds: List<String>? = null)
class Group(val groupId: String, val evidenceMessageIds: List<String>? = null)
class Chatroom(val roomId: String)
class ChatroomMessage(val roomId: String, val messageId: String)Report
服务端只读视图,继承 DRObject;通过模块获取,不能直接构造。
| 字段 | 类型 |
|---|---|
reportId | String |
targetType | String |
username | String? |
messageId | String? |
groupId | String? |
roomId | String? |
reason | String |
status | String |
createdAt | Long? |
ReportSubmitResult
| 字段 | 类型 |
|---|---|
report | Report |
duplicate | Boolean |
客户端选项
LogLevel
取值:DEBUG、INFO、WARN、ERROR。
LogEntry
| 字段 | 类型 |
|---|---|
level | LogLevel |
time | Long |
module | String |
message | String |
code | String? |
reason | String? |
requestId | String? |
connectionId | String? |
LogOptions
class LogOptions(
val level: LogLevel = LogLevel.WARN,
val sink: ((LogEntry) -> Unit)? = null,
val file: Boolean = false,
)| 字段 | 类型 |
|---|---|
level | LogLevel |
sink | ((LogEntry) -> Unit)? |
file | Boolean |
OutboxOptions
class OutboxOptions(
val maxAge: Duration = 48.hours,
val persistAttachmentMaxBytes: Long = 200L * 1024 * 1024,
)| 字段 | 类型 |
|---|---|
maxAge | Duration |
persistAttachmentMaxBytes | Long |
maxAgeMillis | Long |
MediaOptions
class MediaOptions(
val compressImages: Boolean = true,
val imageMaxSide: Int = 2048,
val jpegQuality: Int = 85,
val imageCacheBytes: Long = 300L * 1024 * 1024,
val preprocess: (suspend (DRFile, FileKind) -> DRFile)? = null,
)| 字段 | 类型 |
|---|---|
compressImages | Boolean |
imageMaxSide | Int |
jpegQuality | Int |
imageCacheBytes | Long |
preprocess | (suspend (DRFile, FileKind) -> DRFile)? |
SqliteSource
取值:SYSTEM、BUNDLED。
DatabaseOptions
class DatabaseOptions(
val encrypt: Boolean = false,
val driver: SqliteSource = SqliteSource.SYSTEM,
)| 字段 | 类型 |
|---|---|
encrypt | Boolean |
driver | SqliteSource |
TicketProvider
typealias TicketProvider = suspend (TicketContext) -> String该函数向业务服务端取凭证,Android 在 IO 线程调用,30 秒超时。Java 通过 JavaTicketProvider 桥接。
TicketContext
class TicketContext(val reason: Reason, val username: String?)| 字段 | 类型 |
|---|---|
reason | Reason |
username | String? |
TicketContext.Reason:INVALID_CREDENTIALS、SESSION_EXPIRED。
DRClientOptions
class DRClientOptions(
val appKey: String,
val apiUrl: String,
val wsUrl: String? = null,
val deviceName: String? = null,
val appVersion: String? = null,
val ticketProvider: TicketProvider? = null,
val autoMarkRead: Boolean = false,
val conversationWindow: Int = 1000,
val userCacheTtl: Duration = 10.minutes,
val outbox: OutboxOptions = OutboxOptions(),
val media: MediaOptions = MediaOptions(),
val database: DatabaseOptions = DatabaseOptions(),
val badgeProvider: (() -> Int)? = null,
val push: DRPushOptions? = null,
val call: DRCallOptions? = null,
val log: LogOptions = LogOptions(),
)| 字段 | 类型 |
|---|---|
appKey | String |
apiUrl | String |
wsUrl | String? |
deviceName | String? |
appVersion | String? |
ticketProvider | TicketProvider? |
autoMarkRead | Boolean |
conversationWindow | Int |
userCacheTtl | Duration |
outbox | OutboxOptions |
media | MediaOptions |
database | DatabaseOptions |
badgeProvider | (() -> Int)? |
push | DRPushOptions? |
call | DRCallOptions? |
log | LogOptions |
userCacheTtlMillis | Long |
原生推送
包为 com.deeprespond.im.push。
BadgeMode
取值:AUTO、MANUAL。
AndroidChannel
class AndroidChannel (
val id: String,
val name: String,
val kind: Kind,
val description: String? = null,
val sound: Uri? = null,
)| 字段 | 类型 |
|---|---|
id | String |
name | String |
kind | Kind |
description | String? |
sound | Uri? |
AndroidChannel.Kind:MESSAGE、CALL、SILENT。
DRPushOptions
class DRPushOptions (
val credentials: Map<PushChannel, String>,
val vendors: List<VendorPush> = emptyList(),
val androidChannels: List<AndroidChannel> = AndroidChannel.defaults(),
val language: String? = null,
val badge: BadgeMode = BadgeMode.AUTO,
val smallIcon: Int? = null,
val accentColor: Int? = null,
)| 字段 | 类型 |
|---|---|
credentials | Map<PushChannel, String> |
vendors | List<VendorPush> |
androidChannels | List<AndroidChannel> |
language | String? |
badge | BadgeMode |
smallIcon | Int? |
accentColor | Int? |
PushPermission
取值:GRANTED、DENIED、NOT_DETERMINED。
PushOpened
| 字段 | 类型 |
|---|---|
payload | PushPayload |
launched | Boolean |
forCurrentUser | Boolean |
trusted | Boolean |
PushRegistration
| 字段 | 类型 |
|---|---|
channels | List<ChannelResult> |
error | DRException? |
ChannelResult
| 字段 | 类型 |
|---|---|
channel | PushChannel |
state | TokenState |
fallback | Boolean |
ChannelResult.TokenState:READY、PENDING、UNAVAILABLE。
PushDevice
| 字段 | 类型 |
|---|---|
platform | String |
tokens | List<PushToken> |
language | String? |
raw | JsonObject |
PushToken
| 字段 | 类型 |
|---|---|
raw | JsonObject |
credential | String? |
channel | String? |
token | String? |
原生通话
包为 com.deeprespond.im.call。
DRCallOptions
class DRCallOptions (
val incomingCallActivity: Class<out Activity>? = null,
val useTelecom: Boolean = true,
val autoBusy: Boolean = true,
val ringtone: Uri? = null,
)| 字段 | 类型 |
|---|---|
incomingCallActivity | Class<out Activity>? |
useTelecom | Boolean |
autoBusy | Boolean |
ringtone | Uri? |
CallAction
| 字段 | 类型 |
|---|---|
callId | String |
action | Kind |
source | Source |
CallAction.Kind:ANSWER、REJECT、HANGUP、MUTE、UNMUTE、HOLD、UNHOLD、SHOW、OPEN。
CallAction.Source:NOTIFICATION、TELECOM。
CallIntent
| 字段 | 类型 |
|---|---|
callId | String |
action | Action |
CallIntent.Action:ANSWER、SHOW。
AudioEndpoints
| 字段 | 类型 |
|---|---|
available | List<AudioEndpoint> |
current | AudioEndpoint? |
AudioEndpoint
| 字段 | 类型 |
|---|---|
id | String |
type | Type |
name | String |
AudioEndpoint.Type:EARPIECE、SPEAKER、BLUETOOTH、WIRED_HEADSET、STREAMING。
录音
VoiceRecorder、Recording、VoiceRecording 位于 com.deeprespond.im。录音结束后调用 recording.toContent() 转为消息内容。
VoiceRecording
| 字段 | 类型 |
|---|---|
file | File |
duration | Duration |
format | String |
durationMillis | Long |
VoiceRecordingEnd
| 字段 | 类型 |
|---|---|
recording | VoiceRecording? |
reason | Reason |
VoiceRecordingEnd.Reason:MAX_DURATION、INTERRUPTED。
异常
DRException
| 字段 | 类型 |
|---|---|
code | String |
details | JsonObject? |
status | Int? |
requestId | String? |
retryAfter | Duration? |
source | Source |
reason | String? |
retryAfterMillis | Long? |
DRException.Source:HTTP、WS、LOCAL。
LocalErrorCode
NETWORK_ERROR:"network_error"TIMEOUT:"timeout"ABORTED:"aborted"NOT_SIGNED_IN:"not_signed_in"NOT_CONNECTED:"not_connected"LOCAL_VALIDATION:"local_validation"STORAGE_ERROR:"storage_error"UNSUPPORTED:"unsupported"PERMISSION_REQUIRED:"permission_required"DEVICE_ERROR:"device_error"INVALID_STATE:"invalid_state"SEND_ABANDONED:"send_abandoned"INTERNAL:"internal"PERMISSION_DENIED:"permission_denied"RATE_LIMITED:"rate_limited"
事件
DREvent
分支(使用 DREvent.分支名):
data class AuthStateChanged(val state: AuthState)
data class ConnectionStateChanged(val state: DRConnectionState)
data class SyncCompleted(val modules: List<SyncModule>, val trigger: SyncTrigger)
data class SyncFailed(val module: SyncModule, val error: DRException)
data class StorageReset(val reason: String, val droppedMessages: Int? = null)
data class StorageFull(val freedUsers: Int)
data class StorageModeChanged(val mode: StorageMode, val reason: StorageModeReason?)
data class ConfigChanged(val config: ClientConfig?)
data class MeChanged(val me: SelfProfile?)
data class MeMuteChanged(val scope: String, val muted: Boolean, val expiresAt: Long?)
data class UsersChanged(val usernames: List<String>)
data class DevicesChanged(val devices: List<OnlineDevice>)
data class DevicesNewLogin(val sessionId: String, val deviceName: String, val platform: String, val loginMethod: String, val createdAt: Long?)
data class SdkUpgradeRequired(val minVersion: String)
data class AppStateChanged(val background: Boolean)
data class ClientStateReported(val background: Boolean, val badge: Int?, val reported: Boolean)
data class TimezoneChanged(val timezone: String, val offsetMinutes: Int)
data class ConversationsChanged(val upserted: List<String>, val removed: List<String>)
data class ConversationsUnreadChanged(val total: Int, val source: String)
data class MessagesChanged(val conversationKey: String, val upserted: List<Long>, val removed: List<Long>, val pending: List<String>, val renamedFrom: String?)
data class MessageReceived(val message: MessageView, val notify: NotifyDecision, val alert: Boolean)
data class MessageSendFailed(val clientMsgId: String, val conversationKey: String, val error: DRException)
data class MessageOnline(val message: OnlineMessage)
data class TypingChanged(val conversationKey: String, val usernames: List<String>)
data class ReceiptsChanged(val conversationId: String, val seqs: List<Long>)
data class FriendsChanged(val upserted: List<String>, val removed: List<String>)
data class BlacklistChanged(val upserted: List<String>, val removed: List<String>)
data class FriendRequestsChanged(val lists: List<String>, val unreadCount: Int)
data class GroupsChanged(val upserted: List<String>, val removed: List<String>)
data class GroupMembersChanged(val groupId: String, val usernames: List<String>?)
data class GroupRequestsChanged(val list: String, val groupId: String?)
data class PushChanged(val settings: Boolean, val mutes: List<MuteTarget>)
data class PresenceChanged(val items: List<PresenceState>, val reset: Boolean, val cleared: List<String>)
data class PresenceSubscribeFailed(val usernames: List<String>, val reason: PresenceFailure?)
data class CallIncoming(val call: CallHandle)
data class CallChanged(val call: CallHandle, val change: CallChange?)
data class GroupCallChanged(val groupId: String, val banner: GroupCallBanner?)StorageMode
取值:SQLITE、MEMORY。
StorageModeReason
取值:UNAVAILABLE、MIGRATION_FAILED。
常用便捷方法
| 类型 | 方法或入口 | 说明 |
|---|---|---|
| LiveListSnapshot | copy(...)、empty<T>() | 复制快照及空快照 |
| OutboxOptions | ofMillis(maxAgeMs, persistAttachmentMaxBytes) | Java 毫秒构造 |
| MediaOptions | builder() | 含 JavaPreprocess 桥接 |
| DRClientOptions | builder(appKey, apiUrl) | Java 初始化,含 userCacheTtlMillis |
| DRPushOptions | builder(credentials) | Java 推送配置 |
| DRCallOptions | builder() | Java 来电配置 |
| AndroidChannel | defaults() | 默认三条 Android 通知渠道 |
| DndChange.On | ofMillis(durationMs?) | Java 免打扰时长,null 为不设结束时间 |
| Call | member(username) | 查找通话成员,可能为 null |
| VoiceRecording | toContent() | 转 OutgoingContent.Voice |
| DRException | reason、retryAfterMillis | 错误原因及 Java 重试等待毫秒 |
Java 回调、监听与资源句柄见Java 接入,DRImage 与视频视图见接口参考。
独立 RTC 频道
| 类型 | 主要公开字段 |
|---|---|
| RTCChannel | channelId、name、media、status、accessMode、defaultRole、maxParticipants、seatCount、joinedCount、version、membersVersion、expiresAt |
| ChannelSession | channelId、sessionId、clientSessionId、username、status、role、version、joinDeadline、maxExpiresAt、leaveReason、mediaConnected |
| ChannelParticipant | sessionId、username、role、status、mediaIdentity、mediaConnected、version |
| ChannelSnapshot | channel、session、members、mediaState、microphoneEnabled、cameraEnabled、error |
| ChannelTrack | sessionId、username、kind、local;底层媒体轨道在适配内部持有 |
| ChannelJoinOptions | ticket、clientSessionId、microphoneEnabled=false、cameraEnabled=false |
ID 使用 String。Android 类型的 mediaConnected 布尔 getter 不保留 HTTP null 的三态含义;HTTP 观察未知时还需结合原始字段和媒体观察状态,不能仅据 getter 显示实时在线。票据和凭据不作为快照持久化。用法见频道接入。
