基于 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-dockerDocker 镜像,包含捆绑的应用程序以及 compose 文件。
antimatter-plugin-*每个捆绑应用对应一个仓库:polls、todo、notes、whiteboard、calendar、mail、gifs、memes、voice-channels、calls、boards(Kanban)、playbooks、agents 和 metrics。
gifs-serverGIFs 应用所使用的自托管 GIF 和贴纸服务。
desktop-app、mobile-app、push-proxy桌面端和移动端应用,以及将推送通知转发至手机的服务。
antimatter.chat本网站及其文档。
communityAntimatter 各部分的议题和讨论。

开始之前

  • 获取测试服务器。最快的方式是使用 Docker 镜像:请参阅安装 Antimatter。若要开发 Antimatter 本身,请参阅从源代码构建。
  • 检查服务器允许的功能。部分集成功能默认处于关闭状态,且需要系统管理员权限:个人访问令牌、机器人账号、用户名和图标覆盖,以及上传应用。每个页面都会说明所需的具体设置。
  • 了解您的站点 URL。示例中使用的是 https://chat.example.com。请将其替换为您服务器的地址。

本指南内容

  • REST API:身份验证、主要资源、分页、错误、速率限制、WebSocket、客户端库以及 Antimatter 的扩展功能。
  • Webhooks:传入和传出 Webhook、负载、附件和卡片。
  • 斜杠命令:自定义命令、其请求和响应、自动补全。
  • 机器人和交互式消息:机器人账号、按钮、菜单和对话框。
  • 编写应用:插件结构、服务器钩子、Web 应用注册表、Fusion、设置、存储、翻译和打包。
  • 从源代码构建:服务器、Web 界面、Docker 镜像和应用。
  • 贡献指南:问题、拉取请求、代码风格、翻译、安全和许可证。
欢迎在社区讨论中提问。请在社区问题中报告错误。