Files
xiu_b/src/main/java/com/tailbet/common/constant/OpenImConstants.java
T
2026-08-08 15:20:45 +08:00

287 lines
9.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.tailbet.common.constant;
import com.tailbet.common.enums.PlatformEnum;
/**
* OpenIM 协议相关常量
* <p>
* 统一管理 Webhook 回调命令、请求字段、响应字段、消息类型等协议魔法值,
* 避免散落在 Controller / Service 中。
* </p>
*
* @author socialapp团队
* @since 1.0.7
*/
public final class OpenImConstants {
private OpenImConstants() {
}
// ==================== Webhook 回调命令 ====================
/** 单聊消息发送后回调 */
public static final String CALLBACK_AFTER_SEND_SINGLE_MSG = "callbackAfterSendSingleMsgCommand";
/** 群聊消息发送后回调 */
public static final String CALLBACK_AFTER_SEND_GROUP_MSG = "callbackAfterSendGroupMsgCommand";
/** 成员进群后回调 */
public static final String CALLBACK_AFTER_MEMBER_ENTER_GROUP = "callbackAfterMemberEnterGroupCommand";
/** 成员退群后回调 */
public static final String CALLBACK_AFTER_MEMBER_QUIT_GROUP = "callbackAfterMemberQuitGroupCommand";
/** 用户上线回调 */
public static final String CALLBACK_AFTER_USER_ONLINE = "callbackAfterUserOnlineCommand";
/** 用户下线回调 */
public static final String CALLBACK_AFTER_USER_OFFLINE = "callbackAfterUserOfflineCommand";
// ==================== 请求头 / JSON 字段名 ====================
/** OpenIM Webhook 鉴权请求头名 */
public static final String HEADER_TOKEN = "token";
/** 发送方用户 ID */
public static final String FIELD_SEND_ID = "sendID";
/** 接收方用户 ID */
public static final String FIELD_RECV_ID = "recvID";
/** 群组 IDOpenIM 群 ID */
public static final String FIELD_GROUP_ID = "groupID";
/** 用户 ID */
public static final String FIELD_USER_ID = "userID";
/** 平台 ID */
public static final String FIELD_PLATFORM_ID = "platformID";
/** 消息内容 */
public static final String FIELD_CONTENT = "content";
/** 消息内容类型 */
public static final String FIELD_CONTENT_TYPE = "contentType";
/** 客户端消息 ID */
public static final String FIELD_CLIENT_MSG_ID = "clientMsgID";
/** 服务端消息 ID */
public static final String FIELD_SERVER_MSG_ID = "serverMsgID";
// ==================== Webhook 成功响应 ====================
/** 响应字段:动作码 */
public static final String RESP_ACTION_CODE = "actionCode";
/** 响应字段:错误码 */
public static final String RESP_ERR_CODE = "errCode";
/** 响应字段:错误信息 */
public static final String RESP_ERR_MSG = "errMsg";
/** 响应字段:错误详情 */
public static final String RESP_ERR_DLT = "errDlt";
/** 响应字段:下一动作码 */
public static final String RESP_NEXT_CODE = "nextCode";
/** OpenIM 成功码(actionCode / errCode / nextCode */
public static final int RESP_CODE_SUCCESS = 0;
/** OpenIM 成功响应空字符串字段值 */
public static final String RESP_EMPTY_MSG = "";
// ==================== Token / 鉴权错误码(OpenIM 官方) ====================
/** Token 过期 */
public static final int ERR_TOKEN_EXPIRED = 1501;
/** Token 无效 */
public static final int ERR_TOKEN_INVALID = 1502;
/** Token 格式错误 */
public static final int ERR_TOKEN_MALFORMED = 1503;
/** Token 不存在 */
public static final int ERR_TOKEN_NOT_EXIST = 1504;
/** Token 平台不一致 */
public static final int ERR_TOKEN_DIFFERENT_PLATFORM = 1505;
/** Token 被踢(多端/多实例刷新 adminToken、重复 get_user_token 等) */
public static final int ERR_TOKEN_KICKED = 1506;
/** Token 尚未生效 */
public static final int ERR_TOKEN_NOT_VALID_YET = 1507;
/**
* 服务端代操作使用的平台 ID(Web)。
* 与 App 端 iOS/Android 平台隔离,避免顶掉用户已登录 session。
*/
public static final int PLATFORM_ID_SERVER_WEB = PlatformEnum.WEB.getCode();
/** App 端 iOS 平台 ID */
public static final int PLATFORM_ID_IOS = PlatformEnum.IOS.getCode();
/** App 端 Android 平台 ID */
public static final int PLATFORM_ID_ANDROID = PlatformEnum.ANDROID.getCode();
// ==================== 会话摘要 / 未读 ====================
/** 会话 lastMessage 摘要最大长度 */
public static final int CONVERSATION_CONTENT_MAX_LEN = 100;
/** 未读数自增 SQL 片段 */
public static final String SQL_UNREAD_COUNT_INCREMENT = "unread_count = unread_count + 1";
/** 新建会话初始未读数(接收方) */
public static final int UNREAD_COUNT_INITIAL_RECEIVER = 1;
/** 新建会话初始未读数(发送方) */
public static final int UNREAD_COUNT_INITIAL_SENDER = 0;
// ==================== OpenIM contentType ====================
/** 文本 */
public static final int CONTENT_TYPE_TEXT = 101;
/** 图片 */
public static final int CONTENT_TYPE_IMAGE = 102;
/** 语音 */
public static final int CONTENT_TYPE_VOICE = 103;
/** 视频 */
public static final int CONTENT_TYPE_VIDEO = 104;
/** 文件 */
public static final int CONTENT_TYPE_FILE = 105;
/** 位置 */
public static final int CONTENT_TYPE_LOCATION = 106;
/** 名片 */
public static final int CONTENT_TYPE_CARD = 114;
/** 自定义消息 */
public static final int CONTENT_TYPE_CUSTOM = 110;
// ==================== OpenIM sessionType ====================
/** 单聊 */
public static final int SESSION_TYPE_SINGLE = 1;
/** 群聊 */
public static final int SESSION_TYPE_GROUP = 3;
// ==================== 离线推送 extras / 文案 ====================
/** 推送业务类型:IM 离线消息 */
public static final String PUSH_BIZ_TYPE_IM_MESSAGE = "IM_MESSAGE";
/** 推送标题 */
public static final String PUSH_TITLE_NEW_MESSAGE = "您有新消息";
/** 发送方昵称兜底 */
public static final String PUSH_DEFAULT_SENDER_NAME = "用户";
/** 系统/管理员代发时的发送方昵称兜底(如 OpenIM imAdmin */
public static final String PUSH_DEFAULT_SYSTEM_SENDER_NAME = "系统";
/** 群名称兜底 */
public static final String PUSH_DEFAULT_GROUP_NAME = "群聊";
/** extras:会话 ID */
public static final String EXTRAS_CONVERSATION_ID = "conversationId";
/** extras:发送方 ID */
public static final String EXTRAS_SENDER_ID = "senderId";
/** extras:消息类型 */
public static final String EXTRAS_MESSAGE_TYPE = "messageType";
/** extras:会话类型 */
public static final String EXTRAS_SESSION_TYPE = "sessionType";
/** extras:本地群组 ID */
public static final String EXTRAS_GROUP_ID = "groupId";
/** 单聊 conversationId 前缀 */
public static final String CONVERSATION_ID_SINGLE_PREFIX = "si_";
/** 群聊 conversationId 前缀(业务推送 extras 约定,非 OpenIM 原生 ID */
public static final String CONVERSATION_ID_GROUP_PREFIX = "group:";
/**
* OpenIM 原生群聊 conversationID 前缀(sessionType=3 ReadGroupChat
* 形如 {@code sg_{openimGroupId}}
*/
public static final String OPENIM_NATIVE_GROUP_CONVERSATION_PREFIX = "sg_";
/** 单聊 conversationId 分隔符 */
public static final String CONVERSATION_ID_SEPARATOR = "_";
/** 推送正文最大长度(对齐 PushSendReq */
public static final int PUSH_CONTENT_MAX_LEN = 200;
/** 推送 bizId 最大长度(对齐 PushSendReq */
public static final int PUSH_BIZ_ID_MAX_LEN = 64;
/** 推送摘要最大长度 */
public static final int PUSH_SUMMARY_MAX_LEN = 50;
/** 单次 Feign 推送批量用户数 */
public static final int PUSH_BATCH_SIZE = 500;
/** 离线推送幂等 TTL(分钟) */
public static final long PUSH_DEDUP_TTL_MINUTES = 10L;
/** Redis 幂等占位值 */
public static final String PUSH_DEDUP_PLACEHOLDER = "1";
/** 推送正文:昵称与摘要分隔符 */
public static final String PUSH_BODY_NAME_CONTENT_SEPARATOR = "";
/** 推送正文:群名与发送者分隔符 */
public static final String PUSH_BODY_GROUP_SEPARATOR = " | ";
/** 摘要:图片 */
public static final String SUMMARY_IMAGE = "[图片]";
/** 摘要:语音 */
public static final String SUMMARY_VOICE = "[语音]";
/** 摘要:视频 */
public static final String SUMMARY_VIDEO = "[视频]";
/** 摘要:文件 */
public static final String SUMMARY_FILE = "[文件]";
/** 摘要:位置 */
public static final String SUMMARY_LOCATION = "[位置]";
/** 摘要:名片 */
public static final String SUMMARY_CARD = "[名片]";
/** 摘要:其他消息 */
public static final String SUMMARY_DEFAULT = "[消息]";
/** JSON 对象起始字符(用于判断 content 是否为 JSON 字符串) */
public static final char JSON_OBJECT_START = '{';
/** 自定义消息 content.data / extension 字段 */
public static final String FIELD_DATA = "data";
/** 自定义消息 extension 字段 */
public static final String FIELD_EXTENSION = "extension";
/** 业务自定义类型字段 */
public static final String FIELD_CUSTOM_TYPE = "customType";
/**
* 红包领取提醒:仅聊天内系统记录,禁止离线推送 / 系统通知
*/
public static final String CUSTOM_TYPE_RED_ENVELOPE_CLAIM_NOTICE = "red_envelope_claim_notice";
}