Files
hfb_sys/DESKTOP_NOTIFICATION.md
T

113 lines
3.8 KiB
Markdown
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.
# 桌面通知功能说明
## 功能概述
系统已集成浏览器桌面通知功能,当收到新消息时会在 Windows/Mac 系统级别发送通知。
## 触发条件
桌面通知会在以下情况触发:
1. 收到新消息(非自己发送的)
2. 页面不在前台(浏览器最小化或切换到其他标签页)
3. 或者正在查看其他会话(不在当前消息的会话页面)
## 通知内容
- **标题**:发送者角色 + 昵称(如:"客服 · 张三"
- **内容**:消息文本(最多显示100字)
- **图片消息**:显示 "[图片消息]"
- **点击通知**:自动跳转到对应会话
## 使用方式
### 用户端
1. 进入 `/messages` 消息列表页面
2. 点击页面右上角的铃铛图标
3. 浏览器会弹出权限请求,点击"允许"
4. 之后收到新消息时会自动发送桌面通知
### 管理端
1. 进入 `/admin/chats` 客服管理页面
2. 首次进入会在用户交互后自动请求权限
3. 允许权限后即可接收通知
### 移动端
- iOS Safari:不支持桌面通知
- Android Chrome:支持桌面通知
## 权限状态
- **未开启**:默认状态,首次需要点击允许
- **已开启**:绿色铃铛图标,正常接收通知
- **已拒绝**:用户点击了拒绝,需要在浏览器设置中手动开启
- Chrome: 设置 → 隐私和安全 → 网站设置 → 通知
- Safari: 偏好设置 → 网站 → 通知
## 技术实现
### 前端文件
- `frontend/src/features/chats/composables/useDesktopNotification.ts` - 通知核心逻辑
- `frontend/src/features/chats/components/NotificationSettings.vue` - 通知设置组件
- `frontend/src/features/chats/views/ChatView.vue` - 用户端聊天页集成
- `frontend/src/features/chats/views/MobileChatView.vue` - 移动端聊天页集成
- `frontend/src/features/admin/views/AdminChatsView.vue` - 管理端集成
### 核心 API
```typescript
const { notify, requestPermission, permission } = useDesktopNotification('user')
// 发送通知
notify(chatEvent, currentConversationId)
// 请求权限
await requestPermission()
// 权限状态:'default' | 'granted' | 'denied'
console.log(permission.value)
```
## 浏览器兼容性
| 浏览器 | 桌面通知支持 |
|--------|-------------|
| Chrome | ✅ 完全支持 |
| Firefox | ✅ 完全支持 |
| Safari (macOS) | ✅ 完全支持 |
| Edge | ✅ 完全支持 |
| Safari (iOS) | ❌ 不支持 |
| 微信内置浏览器 | ❌ 不支持 |
## 通知特性
1. **智能去重**:相同会话的通知会自动替换(不会堆积)
2. **自动关闭**:通知5秒后自动消失
3. **点击跳转**:点击通知会自动跳转到对应会话并聚焦浏览器窗口
4. **不干扰当前会话**:如果正在查看该会话,不会发送通知
5. **仅限他人消息**:自己发送的消息不会触发通知
## 注意事项
1. **首次使用需要用户授权**:浏览器安全策略要求用户主动允许
2. **需要 HTTPS**:生产环境必须使用 HTTPS(本地开发 localhost 除外)
3. **系统勿扰模式**:如果操作系统开启了勿扰模式,通知可能不会显示
4. **浏览器设置**:用户可以在浏览器设置中随时关闭网站通知
## 测试方法
1. 打开两个浏览器窗口(或使用隐私模式)
2. 窗口A:登录用户/客服A,进入某个会话
3. 窗口B:登录用户/客服B,进入相同会话
4. 在窗口B发送消息
5. 将窗口A最小化或切换到其他标签页
6. 应该会收到系统通知
## 排查问题
如果没有收到通知,检查:
1. 浏览器是否支持 Notification API
2. 网站通知权限是否被拒绝(检查浏览器地址栏左侧的锁图标)
3. 操作系统通知设置是否开启
4. 浏览器是否开启了勿扰模式
5. 是否在查看当前会话(查看当前会话不会发通知)
6. 是否是自己发送的消息(自己发送的不会通知)