基于 Antimatter 进行开发
本指南面向开发者。内容涵盖使用 API 的脚本和机器人、基于 Webhook 和斜杠命令构建的集成、为服务器和 Web 应用添加功能的应用(插件),以及从源码构建 Antimatter 以进行贡献。
扩展 Antimatter 的方式
选择最轻量且能满足需求的工具。前四种方式无需访问服务器本身;应用则运行在服务器内部。
| 工具 | 功能说明 | 适用场景 |
|---|---|---|
| REST API | 涵盖应用所能执行的所有操作:消息、频道、用户、文件、设置。WebSocket 会在事件发生时发送通知。 | 脚本、与其他系统的同步、自定义客户端。 |
| 传入 Webhook | 一个秘密 URL,当外部系统向其发送 JSON 数据时,它会向频道发布消息。 | 警报、CI 结果、监控、来自其他工具的通知。 |
| 传出 Webhook | 当公共频道中的消息以触发词开头,或有人在消息菜单中选择你的操作时,Antimatter 会调用你的 URL 并发布你的回复。 | 简单的聊天驱动自动化,用于向其他工具发送消息。 |
| 斜杠命令 | 用户输入 /something;Antimatter 调用您的 URL,并将您的回复显示给该用户或整个频道。 | 查询、从聊天发起的操作。 |
| 机器人 | 为程序创建的账户,拥有独立的令牌、机器人标签,以及交互式消息和对话框。 | 助手、通知器,以及任何需要与人交互的功能。 |
| 应用(插件) | 在服务器(Go)和 Web 应用(React)内部运行的代码:每条消息的钩子、新菜单、面板、消息类型、页面。 | 功能特性:投票、笔记、日历、需要用户界面的集成。 |
在界面中,用户将插件称为“应用”。本指南在两个词都有帮助时使用“应用(插件)”,因为代码、API 和配置中仍然使用“plugin”一词。
与 Mattermost 的兼容性
Antimatter 是 Mattermost 的分支。大多数适用于 Mattermost 服务器的功能也适用于 Antimatter。
相同之处
- REST API 位于
/api/v4之下,其身份验证、WebSocket 和错误格式均保持一致。服务器报告版本为12.0.0,因此检查服务器版本的客户端和应用会看到一个较新的 Mattermost 版本。 - Webhook 和斜杠命令,包括其兼容 Slack 的负载。
- 服务器插件 API 和钩子:Antimatter 保持其不变。服务器代码基于相同的 Go 模块构建,即
github.com/mattermost/mattermost/server/public。Antimatter 仅添加了用于其 AI 服务的方法(参见 AI 服务)。 - Web 应用插件注册表:Mattermost 注册表中的每个
register…方法均存在于 Antimatter 的两个 Web 界面中。 - 客户端库:Go 客户端
model.Client4和 TypeScript 客户端@mattermost/client(参见 客户端库)。 - 插件包:包含
plugin.json清单文件的.tar.gz文件。使用 Mattermost 密钥签名的插件可以安装,使用 Antimatter 密钥签名的插件也可以安装。
不同之处
- 两个 Web 界面。新界面 Fusion 是默认选项;经典 Mattermost 界面仍然可用。Fusion 渲染大多数插件组件,但放置位置有所不同,并且省略了少数组件。应用可以判断当前运行的是哪个界面。参见 支持 Fusion 界面。
- 额外 API。 Antimatter 为其自身功能添加了端点:社区属性、超时、顶部消息、消息请求、频道和分类覆盖、频道导出、移动话题、模型连接、消息操作,以及社区的新字段。参见 Antimatter 对 API 的添加。
- 额外消息功能。消息附件可以显示流水线阶段和小型图表;帖子可以是内联回复或剧透内容。
- 应用的额外 Web 应用钩子:编辑器“+”菜单项、表情符号选择器标签页、频道视图中的面板、侧栏频道下方的页脚、集成页面上的条目、表情符号选择器的添加和管理视图,以及在新窗口中重新打开原位置的侧边面板。参见 仅 Antimatter 拥有的钩子。
- 无许可证。所有功能均可在无许可证密钥的情况下使用。许可证、试用和企业升级端点已移除;
GET /api/v4/license/client保留供询问的客户端使用。一些为 Mattermost 付费版本构建的应用程序会自行检查许可证并拒绝运行。 - 名称。界面中团队被称为社区,但 API 和代码中仍使用
team。环境变量使用AM_前缀,命令行工具为amctl,服务器二进制文件为antimatter。
代码所在位置
所有内容均为开源,托管在 GitHub 上的 AntimatterChat 组织下。每个仓库都基于其 main 分支运行。
| 仓库 | 内容 |
|---|---|
| antimatter | 服务器(Go 语言,位于 server/)、两个 Web 界面(webapp/fusion 和 webapp/channels)、TypeScript 客户端以及 amctl。 |
| antimatter-docker | Docker 镜像,包含捆绑的应用程序以及 compose 文件。 |
antimatter-plugin-* | 每个捆绑应用对应一个仓库:polls、todo、notes、whiteboard、calendar、mail、gifs、memes、voice-channels、calls、boards(Kanban)、playbooks、agents 和 metrics。 |
| gifs-server | GIFs 应用所使用的自托管 GIF 和贴纸服务。 |
| desktop-app、mobile-app、push-proxy | 桌面端和移动端应用,以及将推送通知转发至手机的服务。 |
| antimatter.chat | 本网站及其文档。 |
| community | Antimatter 各部分的议题和讨论。 |
开始之前
- 获取测试服务器。最快的方式是使用 Docker 镜像:请参阅安装 Antimatter。若要开发 Antimatter 本身,请参阅从源代码构建。
- 检查服务器允许的功能。部分集成功能默认处于关闭状态,且需要系统管理员权限:个人访问令牌、机器人账号、用户名和图标覆盖,以及上传应用。每个页面都会说明所需的具体设置。
- 了解您的站点 URL。示例中使用的是
https://chat.example.com。请将其替换为您服务器的地址。