====== 群晖 Chat:搭建私有团队通讯平台 ======
[[https://www.synology.com/zh-tw|群晖科技(Synology Inc.)]]推出的 Synology Chat 是一款私有化部署的即时通讯工具,类似于自建的 Slack 或微信企业版。所有消息、文件、聊天记录都存储在你的 NAS 上,数据不会经过第三方服务器。
===== 什么是 Synology Chat?=====
Synology Chat 是群晖 DSM 套件中心中的一款第一方套件,提供团队即时通讯、频道管理、文件分享、消息搜索等功能(([[https://www.synology.com/zh-tw/dsm/feature/chat|Synology Chat 功能介绍]])).
与公共 IM 工具相比,它的核心差异在于:
* **数据私有**: 所有消息、文件、历史记录全部存在你的 NAS 上,群晖或任何第三方都无法访问
* **无用户数限制**: 不按人头收费,只要 NAS 性能够用,加多少用户都可以
* **与 DSM 深度集成**: 直接使用 DSM 用户账户体系,无需额外管理一套账号
* **Webhook / API**: 支持 incoming/outgoing webhook,可以对接外部系统和机器人
===== 核心功能 =====
==== 频道与讨论 ====
* **公开频道**: 团队全员可见,适合项目讨论、公告发布
* **私有频道**: 仅限受邀成员加入,适合敏感话题或小团队协作
* **一对一私聊**: 私密对话,仅双方可见
* **消息回复串**: 在消息上右键可以开启串回复,避免话题混乱
* **@提及**: 支持 @用户 和 @频道,通知相关人员
==== 文件与媒体 ====
* 直接在聊天中发送文件、图片、视频,文件存储在 NAS 上
* 消息中的图片和链接支持预览
* 聊天中的文件可以直接在 File Station 中访问
==== 搜索与历史 ====
* 全文搜索聊天记录,支持关键词、日期、发送者筛选
* 所有历史消息永久保存(取决于你的硬盘容量),不会被自动删除
==== 集成与扩展 ====
* **Incoming Webhook**: 外部系统可以通过 webhook 向频道推送消息,适合 CI/CD 通知、监控告警等场景。具体设置步骤请参考官方文档:(([[https://kb.synology.com/zh-tw/DSM/tutorial/How_to_configure_webhooks_and_slash_commands_in_Chat_Integration|Synology Chat 整合 Webhook 与斜线指令官方中文文档]]))
* **Outgoing Webhook / 机器人**: 频道内可以通过 @机器人 触发外部操作(例如查询服务器状态、执行命令等)
* **Synology Office 集成**: 聊天中可以直接创建和协作编辑文档、表格、幻灯片
===== 安装与配置 =====
==== 安装 ====
* 登录 DSM → **套件中心**
* 搜索 **Synology Chat Server**
* 点击「安装」即可。安装过程自动完成,无需额外配置
==== 客户端 ====
Synology Chat 提供全平台客户端:
* Web 端: 直接在浏览器中访问%%https://你的NAS:5001/chat%%(或通过 QuickConnect)
* 桌面客户端: ''Windows/macOS/Linux'' 客户端,支持消息通知和文件拖拽
* 移动App: iOS / Android 客户端(在 App Store / Google Play 搜索 "Synology Chat"),支持推送通知
==== 外网访问 ====
和所有群晖服务一样,Chat 支持多种外网访问方式:
* **QuickConnect**: 在 DSM QuickConnect 设置中勾选 Chat,即可通过 QuickConnect ID 从外网访问
* **DDNS + 端口转发**: 如果 [[zh:synology:ddns|你配置了 DDNS]](动态域名),可以直接通过域名访问 Chat
* **反向代理**: 通过 Nginx Proxy Manager 等工具将 Chat 暴露在标准 443 端口(([[https://kb.synology.com/en-global/DSM/tutorial/How_to_use_reverse_proxy_with_Synology_Chat|Synology Chat 反向代理设置]]))
===== Webhook 集成 =====
Webhook 是 Synology Chat 对接外部系统的核心机制。简单来说,它是一种**反向 API**——不是你去轮询查消息,而是系统在有事件发生时主动通知你。
Chat 支持两种方向的 Webhook:
==== Incoming Webhook:外部系统 → 推消息到 Chat ====
**概念**:Incoming Webhook 相当于一个**专用入口 URL**。外部系统(监控系统、CI/CD 工具、自定义脚本)向这个 URL 发一条 HTTP POST 请求,Chat 就会把消息显示在指定频道里。
**架构**:
外部系统(监控/CI/脚本)
│
│ HTTP POST(JSON 格式消息)
▼
Synology Chat Server
│
▼
指定频道中显示消息
也就是说,消息的流向是**从外到内**——外部系统主动推送。
**典型用途**:
* **运维告警**:Prometheus + Alertmanager 在服务器宕机或磁盘满时推送告警到「运维」频道
* **CI/CD 通知**:Jenkins/GitHub Actions 在构建完成或部署成功后推送结果到「开发」频道
* **系统状态报告**:定时脚本每天汇总 NAS 状态(CPU、内存、存储用量)并推送到「日报」频道
* **自定义通知**:任何你写脚本能获取的信息,都可以通过 curl/Python/Shell 推到 Chat
==== 配置 Incoming Webhook ====
在目标频道 → 频道设置 → 整合 → 新增 **Incoming Webhook**,设置名称和图标,即可获得一个专属 URL。
Webhook URL 格式:
%%https://你的NAS:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=你的token%%
**调用方法**:向此 URL 发送 HTTP POST 请求,payload 参数为 JSON 字符串。
最简单的例子——用 curl 发送一条消息:
curl -sk -X POST "https://你的NAS:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=你的token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "payload={\"text\":\"Hello from bot!\"}"
发送富文本消息(支持 Synology Chat 的 Markdown 格式):
curl -sk -X POST "https://你的NAS:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=你的token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "payload={\"text\":\"**构建完成**\\n项目:my-app\\n状态:✅ 成功\\n耗时:2分34秒\"}"
不只是 curl,任何支持 HTTP POST 的语言或工具(Python requests、JavaScript fetch、PowerShell Invoke-RestMethod 等)都可以调用 Webhook。
==== Outgoing Webhook:Chat 里的消息 → 触发外部服务 ====
**概念**:Outgoing Webhook 的方向与 Incoming 相反。你在频道里发一条以特定关键词开头的消息,Chat 就会把这条消息的内容转发给你指定的外部服务 URL。你的服务处理后,可以把结果回复到频道。
**架构**:
用户在频道发消息(例如:「/status 磁盘」)
│
▼
Synology Chat Server
│
│ HTTP POST(将消息内容发给你的服务)
▼
你的外部服务(Web 服务器、脚本、API)
│
│ HTTP 响应(可选的回复消息)
▼
频道中显示服务回复
也就是说,消息的流向是**从内到外再到内**——Chat 将消息转给外部程序,外部程序处理后把结果送回频道。
**典型用途**:
* **查询机器人**:频道里发「/disk」查硬盘用量,「/uptime」查服务器运行时间
* **执行脚本**:发「/deploy 前端」触发远端部署脚本
* **对接内部系统**:发「/jira BUG-123」查 Jira 工单状态
* **斜线指令**:Chat 的斜线指令本质上也是 Outgoing Webhook——你输入 ''/command'',Chat 转发给你配置的服务端处理
==== 配置 Outgoing Webhook ====
在频道 → 频道设置 → 整合 → 新增 **Outgoing Webhook**,设置**触发关键词**(例如 "/status")和你的**回调 URL**。
当有人在频道发送以触发词开头的消息时,Chat 会将消息内容和发送者信息 POST 到你的回调 URL。你的服务处理请求后,可以在 HTTP 响应中返回消息文本,Chat 会自动将其发送到频道。
详细的配置步骤请参考官方文档(([[https://kb.synology.com/zh-tw/DSM/tutorial/How_to_configure_webhooks_and_slash_commands_in_Chat_Integration|Synology Chat 整合 Webhook 与斜线指令官方中文文档]])).
===== QuickConnect 与 Chat 的配合 =====
如果你通过 [[zh:synology:quickconnect|QuickConnect]] 访问 Chat,需要注意:
Webhook 回调 URL 必须使用 NAS 的**内网地址**或 **DDNS 域名**,不能使用 QuickConnect 域名。因为 QuickConnect 是中继/穿透服务,不支持作为 webhook 回调目标。
也就是说:
* **从外网访问 Chat 界面**: 可以用 QuickConnect
* **Chat 内部 webhook 回调**: 必须用内网 IP 或公网 IP + DDNS
===== 企业级功能 =====
对于有更高需求的企业用户,Synology Chat 还提供:
* **消息审核与归档**: 管理员可以查看和导出所有频道的消息记录,满足合规审计需求
* **权限管控**: 基于 DSM 用户组的权限管理,可以控制谁能创建频道、谁能发送文件
* **LDAP / AD 集成**: 与企业现有的 Active Directory 或 LDAP 用户目录对接
* **C2 Backup 备份**: 聊天记录可以备份到群晖 C2 云服务或另一台 NAS(([[https://kb.synology.com/en-global/DSM/tutorial/How_to_back_up_Chat_messages|Synology Chat 消息备份]]))
===== Synology Chat vs 其他方案 =====
| 对比项 | Synology Chat | Mattermost | Rocket.Chat | Slack / Discord |
| 部署方式 | DSM 套件,一键安装 | Docker / 手动部署 | Docker / 手动部署 | 云端 SaaS |
| 数据私有 | ✅ 完全私有 | ✅ 完全私有 | ✅ 完全私有 | ❌ 数据在第三方服务器 |
| 费用 | **免费**(含在 DSM 中)| 免费(自托管)| 免费(自托管)| 免费版有消息限制,付费版按人收费 |
| 用户数 | 无限制 | 无限制 | 无限制 | 免费版限制 90 天消息历史 |
| 维护难度 | 极低,DSM 自动维护 | 需要自己维护数据库和升级 | 需要自己维护 | 零维护 |
| 移动端推送 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ✅ 支持 |
| 与 NAS 集成 | ✅ 深度集成(File Station、Office)| ❌ 需自行对接 | ❌ 需自行对接 | ❌ 无法集成 |
| 适合场景 | 群晖用户、小团队 | 技术团队、需要高度定制 | 需要丰富第三方集成 | 不在乎数据隐私的团队 |
===== 典型使用场景 =====
==== 场景一:小团队内部通讯 ====
一个 10 人小团队使用群晖 Chat 作为日常沟通工具。所有人使用 DSM 账号登录,按项目创建频道(如「前端开发」「后端开发」「运维通知」),配合 Synology Office 在线协作编辑文档。
==== 场景二:运维告警通知 ====
服务器监控系统(如 Prometheus + Alertmanager)通过 incoming webhook 将告警推送到 Chat 的「运维告警」频道。当磁盘空间不足或服务宕机时,团队成员即时收到通知,可以直接在 Chat 中讨论应对方案。
==== 场景三:自定义机器人 ====
如果你熟悉编程,可以利用 Outgoing Webhook 编写自定义机器人,实现自动化响应——例如查询服务器状态、执行命令、对接内部系统等。
===== 总结 =====
Synology Chat 是群晖 NAS 上最被低估的套件之一。对于已经拥有群晖 NAS 的用户来说,它提供了一个零成本、零维护、数据完全私有的团队通讯方案。
它的优势不在于功能堆叠(这方面不如 Mattermost 或 Rocket.Chat 丰富),而在于**和 DSM 生态的无缝集成**——用户管理、文件存储、Office 协作、移动端推送全部开箱即用,无需额外搭建数据库或配置反向代理。
如果你已经有群晖 NAS 且有小团队沟通需求,Synology Chat 值得一试——毕竟装一下不花钱,不满意卸载就是(([[https://www.synology.com/zh-tw/dsm/feature/chat|Synology Chat 官方页面]]))。