# 通讯模块 # 项目结构 - chat 对话页面 - session 历史会话 - contact-list 通讯录列表 # 对话模块 - 功能简介:两个用户互相发消息,接收消息,查看消息历史记录 ## 数据范式 - _User 用户表 - objectId - username 用户名 - mobile 手机号 - nickname 昵称 - Contact 通讯好友的表 - from Pointer<_User> - to Pointer<_User> - Message 消息表 - sendUser Pointer<_User> - receiveUser Pointer<_User> - contentJson 消息对象 符合各类消息格式 - isRead Boolean 消息已读 - isCancel Boolean 消息撤回 思考:图片链接和图片消息的区别,和表达方式? 图片链接,本质上是文本消息(基于字符串) 图片消息,本质上是结构化消息 {type:"image",imgUrl:"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png"} ### 消息内容规范(参考GPT多模态响应) - 参考文档:https://ai.fmode.cn/chat/share/nxZMG3CZrd 普通文本消息: { "role": "user", "content": "Here is the text: 'The quick brown fox jumps over the lazy dog.'" } 图片消息 { "role": "user", "content": { "type": "image", "data": { "url": "https://example.com/image.jpg", "alt_text": "A quick brown fox jumping over a lazy dog." } } } 音频消息 { "role": "user", "content": { "type": "audio", "data": { "url": "https://example.com/audio.mp3", "alt_text": "An audio clip of a quick brown fox jumping over a lazy dog." } } } ### 业务逻辑 #### 发送消息 - 进入会话页面 - 无记录:输入用户昵称添加好友,再进行对话 - 有记录:点击历史会话进入 - 向微服务创建一个Message,sendUser为自身,receiveUser为联系人 #### 接收消息 - 查询,receiveUser为自身,sendUser为会话窗口联系人的所有Message #### 会话列表 - 查询,receiveUser为自身,所有Message,并每个receiver只显示最新一条