PHP实现站内信( 三 )

全部已阅 PUT:/v1/read_all_messages
response 同上
 
删除、批量删除站内信:PUT /v1/delete_messages/:messageIds
response 同上
 
全部删除站内信:PUT /v1/delete_all_messages
response 同上
 
获取消息来源列表:GET /v1/module
response
{ "code": 200, "data": [ { "id": 1, "code": "worksheet", "name": "工单平台", "create_time": "2018-01-11 15:21:38", "update_time": "2018-01-11 15:21:38", "MessageTexts": null }, { "id": 2, "code": "cmdb", "name": "资源管理", "create_time": "2018-01-11 15:22:28", "update_time": "2018-01-11 15:22:28", "MessageTexts": null }, ... ], "msg": "OK"}七、测试注意点
1 发送站内信

  • 纯接口
  • 收件用户以逗号分割,真实性不做校验
  • 收件用户有长度校验,50个字节
  • title content 有长度校验,分别是45,150个字节
  • module_name 是一个列表,必须从这里选一个
2 其他接口都可以通过前端页面测试
八、优化
  • 未读列表可以加上粗体显示,已读则是普通字体
  • 对站内信进行分类,打上不同纬度的标签,方便过滤、搜索、屏蔽
  • 用户可以设置允许接收的站内信的消息来源
  • 管理员可以对全站消息、全站人员、全站的消息属性进行增删改查,比如撤销某个站内信,让所有人都看不见
  • 管理员可以统计站内信的发送数量、各产品的使用情况、消息被读的比例、消息被读的时间、消息被读的方式(点开还是批量操作),等
 
九、关键功能点设计
右上角的图标行为
1 点击图标,展示最近的N条未读消息
  • 展示下拉框
  • 实时获取最近N条未读消息
  • N可以为5~10,具体数值取决于下拉框的高度限制
  • 当未读数不足N时,下拉框能自适应高度
  • 如果没有未读消息,展示”暂无新消息”
  • 停止每10秒的获取未读消息数接口
2 下拉框里,展示消息来源、时间(相对现在的时间:10分钟前)、title
  • 向下滑动下拉框,展示更多未读消息(只获取id小于已展示消息列表里的最小id,即不获取点击图标后新来的消息)
3 点击下拉框里的某一个消息
  • 下拉框不消失
  • 依然停止每10秒的获取未读消息数接口
  • 未读消息数减1
  • 未读消息列表删除当前消息(slice)
  • 展示弹出框
4 弹出框展示消息的来源、时间(绝对时间)、title、content
5 关闭弹出框或者点击外围:
  • 弹出框消失
  • 下拉框不消失
  • 可以继续点击某一个未读消息
6 再次点击下拉框和图标的外围
  • 下拉框消失
  • 清空已有的未读消息列表
  • 恢复每10秒的获取未读消息数接口
7 再次点击图标,重新回到#1状态
阿里云的图标行为是:
  1. 刷新页面的时候才会请求一次未读消息数,之后不再定时刷新(当然也可能是刷新时间间隔比较长,没发现;又或者采用了 socket 的方式,建立了一个长链接)
  2. hover图标,即显示未读消息的下拉框
  3. 点击图标,进入站内信管理页面,默认是“未读消息”

PHP实现站内信

文章插图
 
4 点击未读消息,新开一个Tab,展示该消息的详情(detail页面),原Tab内容不变,即没有未读数减一,也没从下拉框里删除刚点击的消息
 
5 最多展示5条消息,只要不刷新页面,就一直是这5条
6 没有滚动更多的功能,只有查看更多,点击进入站内信管理页面,默认是“未读消息”
  • 和点击图标的区别是:点击图标直接当前页面跳转到站内信管理页面,点击“查看更多”会新建一个Tab
7 多了一个“消息接受管理”的按钮,当前页面跳转到站内信管理页面,但是默认即“基本接收管理”
PHP实现站内信

文章插图
 
隐藏浏览器进度条
每10秒的获取未读消息数接口,会触发浏览器展示进度条,导致分散用户注意力,要把这个进度条隐藏掉 。
其他刷新页面的行为不受影响 。
 
参考文档
《站内信需求背景及需求分析的全过程》
《站内信功能设计》


推荐阅读