package com.ruoyi.jarvis.wecom; /** * 企微自建应用:会话空间与 Jarvis 桥接的唯一约定身份字段说明与 Redis 键规范。 *

* 锚定字段(存在且稳定):企业微信成员 UserID,在接收到自建应用的明文 XML 中与节点 * {@code FromUserName} 对应。该 ID 由管理员在「管理后台—通讯录」中设定, * 企业内唯一;一般不随成员对外昵称修改而变化。 *

*

* 下列场景必须使用同一值(trim 后): *

*

*

* 禁止使用 MsgId、消息正文、CorpId+AgentId 单独、或其它逐条变化的量作为会话主键(会导致会话无法连续)。 * AgentId 仅作业务旁路信息;若未来多应用共用同一回调入口,可在会话 JSON 内记录 agentId,但会话键仍以成员 UserID 为主。 *

*/ public final class WeComConvention { private WeComConvention() { } /** * 多轮会话在 Redis 中的键前缀。完整键 = 此前缀 + 成员 UserID(trim)。 */ public static final String SESSION_REDIS_KEY_PREFIX = "interaction_state:wecom:"; /** * 企微推送明文 XML 中表示「发送方成员 UserID」的节点名(供解析端对照,值为成员 UserID 字符串)。 */ public static final String XML_FROM_USERNAME = "FromUserName"; /** * @param wecomMemberUserId 成员 UserID,须与明文 XML 中 FromUserName 一致 */ public static String sessionRedisKey(String wecomMemberUserId) { if (wecomMemberUserId == null || wecomMemberUserId.trim().isEmpty()) { throw new IllegalArgumentException("wecomMemberUserId 不能为空(应为企业微信 FromUserName / 成员 UserID)"); } return SESSION_REDIS_KEY_PREFIX + wecomMemberUserId.trim(); } }