Antimatter での開発

本ガイドは開発者向けです。API を利用するスクリプトやボット、Webhook とスラッシュコマンドを基盤とした統合、サーバーおよび Web アプリに機能を追加するアプリ(プラグイン)、そして Antimatter のソースからのビルドと貢献方法について扱います。

Antimatter の拡張方法

目的を達成できる最も軽量なツールを選択してください。最初の 4 つはサーバー自体へのアクセスを必要としませんが、アプリはサーバー内で実行されます。

ツール機能適した用途
REST APIアプリが実行するすべての操作:メッセージ、チャンネル、ユーザー、ファイル、設定。WebSocket により、イベントが発生した時点で通知されます。スクリプト、他のシステムとの同期、カスタムクライアント。
Incoming WebhookJSON を送信するとチャンネルにメッセージを投稿する秘密の URL。アラート、CI の結果、監視、他のツールからの通知。
Outgoing WebhookAntimatter は、公開チャンネルのメッセージがトリガーワードで始まった場合、またはメッセージのメニューでアクションが選択された場合に、あなたの URL を呼び出し、返信を投稿します。チャット駆動のシンプルな自動化で、他のツールにメッセージを送信します。
スラッシュコマンドユーザーが /something と入力すると、Antimatter があなたの URL を呼び出し、回答をユーザーまたはチャンネルに表示します。検索、チャットから開始するアクション。
ボットプログラム用に作成されたアカウント。独自のトークン、BOT タグ、対話型メッセージとダイアログをサポートします。アシスタント、通知機能、ユーザーと対話するあらゆるもの。
アプリ(プラグイン)サーバー(Go)および Web アプリ(React)内で実行されるコード。すべてのメッセージへのフック、新しいメニュー、パネル、メッセージタイプ、ページ。機能:投票、メモ、カレンダー、ユーザーインターフェースが必要な統合。

インターフェースでは、プラグインは「アプリ」と呼ばれます。コード、API、設定では依然として「plugin」と呼ばれるため、両方の言葉が役立つ場所では本ガイドでは「アプリ(プラグイン)」と表記します。

Mattermost との互換性

Antimatter は Mattermost のフォークです。Mattermost サーバーで動作するものの大部分は、Antimatter でも動作します。

同じもの

  • /api/v4 配下のREST API、その認証、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のキーで署名されたプラグインもインストールできます。

異なる点

  • 2つのWebインターフェース。新しいインターフェースFusionがデフォルトです。従来のMattermostインターフェースも引き続き利用可能です。Fusionはほとんどのプラグインコンポーネントを描画しますが、一部の配置を変更し、いくつかは表示しません。アプリは実行中のインターフェースを判別できます。Fusionインターフェースのサポートを参照してください。
  • 追加 API。Antimatter は独自の機能用にエンドポイントを追加しています:コミュニティ属性、タイムアウト、メッセージの上部表示、メッセージリクエスト、チャンネルとカテゴリのオーバーライド、チャンネルのエクスポート、スレッドの移動、モデル接続、メッセージアクション、コミュニティの新しいフィールドなどです。詳細は Antimatter が API に追加するもの を参照してください。
  • 追加のメッセージ機能。メッセージ添付ファイルはパイプラインのステージや小さなチャートを表示でき、投稿はインライン返信やネタバレ(spoiler)として扱えます。
  • アプリ用の追加 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-serverGIFsアプリで使用されるセルフホスト型のGIFおよびステッカーサービス。
desktop-app、mobile-app、push-proxyデスクトップアプリとモバイルアプリ、およびスマートフォンへのプッシュ通知を中継するサービス。
antimatter.chatこのウェブサイトとそのドキュメント。
communityAntimatterのすべてのコンポーネントに関するIssueとディスカッション。

開始前に

  • テストサーバーを用意します。 最も手軽なのはDockerイメージです。Antimatterのインストールを参照してください。Antimatter自体の開発を行う場合は、ソースからのビルドを参照してください。
  • サーバーが許可している機能を確認します。 いくつかの統合機能はデフォルトで無効になっており、システム管理者による設定が必要です。これには、パーソナルアクセストークン、ボットアカウント、ユーザー名とアイコンの上書き、アプリのアップロードが含まれます。各ページには、必要な設定が記載されています。
  • サイトURLを把握します。 例ではhttps://chat.example.comを使用しています。これをあなたのサーバーのアドレスに置き換えてください。

このガイドの内容

  • REST API: 認証、主要リソース、ページネーション、エラー、レート制限、WebSocket、クライアントライブラリ、およびAntimatter独自の機能。
  • Webhook: 受信および送信Webhook、ペイロード、添付ファイルとカード。
  • スラッシュコマンド: カスタムコマンド、リクエストとレスポンス、オートコンプリート。
  • ボットと対話型メッセージ: ボットアカウント、ボタン、メニュー、ダイアログ。
  • アプリの作成: プラグインの構成、サーバーフック、Webアプリレジストリ、Fusion、設定、ストレージ、翻訳、パッケージング。
  • ソースからのビルド: サーバー、Webインターフェース、Dockerイメージ、アプリ。
  • コントリビューション: イシュー、プルリクエスト、スタイル、翻訳、セキュリティ、ライセンス。
ご質問はコミュニティディスカッションで受け付けています。バグはコミュニティイシューで報告してください。