如何实现以机器人为中介的双人消息中转通信功能?
实现机器人中介的双人通信流程
一、补全配对逻辑
你之前的思路是对的,用户点“找好友”就把状态设为等待配对,但得加关键一步:用户状态设为等待的瞬间,立刻查数据库里有没有其他同样处于“等待配对”状态且未绑定的用户。
- 要是找到另一个,直接给俩用户分配同一个会话ID(比如用UUID生成唯一值),同时把双方状态改成“已配对”,再把彼此的用户ID互相绑定(存成
配对用户ID字段) - 要是没找到,就让用户保持“等待配对”状态,等其他人发起请求
二、数据库表结构优化
别只存用户ID和状态,加几个字段更方便后续逻辑:
user_id:用户唯一标识status:状态值(可选:空闲、等待配对、已配对)pair_user_id:配对成功后,存储对方的用户IDsession_id:配对会话的唯一ID,用来关联两个用户
三、消息转发核心逻辑
用户发消息时,按这个流程处理:
- 先从数据库取当前用户的状态和配对用户ID
- 如果状态不是“已配对”,直接回复“先点找好友完成配对再发消息”
- 如果是已配对状态,直接把消息(可以加个“对方说:”前缀)发给配对用户对应的账号
给你写段伪代码参考:
def process_user_message(user_id, msg_content): # 从数据库获取用户会话数据 user_info = db.fetch_one("SELECT status, pair_user_id FROM user_sessions WHERE user_id = ?", (user_id,)) if not user_info or user_info['status'] != '已配对': send_msg_to_user(user_id, "先完成配对再发消息哦") return # 转发消息给配对用户 send_msg_to_user(user_info['pair_user_id'], f"对方:{msg_content}")
四、配对解除与异常处理
- 主动解除:用户点“结束会话”时,把双方的状态改回“空闲”,清空
pair_user_id和session_id - 被动解除:定期扫描“已配对”状态的用户,发现离线超过10分钟的,自动解除配对并重置状态
- 重复配对拦截:如果用户已经处于“等待配对”或“已配对”状态,再点“找好友”直接提示“你当前正在配对/会话中,不用重复操作”
五、超时机制
给“等待配对”状态加个超时时间,比如5分钟。超过时间还没找到配对用户,自动把状态改回“空闲”,同时给用户发消息:“配对超时啦,重新点找好友试试?”
内容的提问来源于stack exchange,提问作者Cisco
相关产品推荐
相关产品推荐

