チャットメッセージブロックの拡張

みなさん、こんにちは。

Discourse Chat で GitLab や GitHub のアクティビティ通知を表示する、あるいはより一般的にはあらゆる種類の定期的なイベントを表示するプラグインを開発したいと考えています。

よりリッチな出力を得るために、アクティビティをカード形式で表示したいのですが、チャットメッセージにはこの目的に有用そうな blocks という JSON フィールドがあることがわかりました。残念ながら現在、ブロックタイプはチャットの内部実装をパッチなしでは拡張できないようです。スキーマ、シリアライザー、フロントエンドレンダラーのすべてがサポートされているブロック/エレメントタイプを列挙しているためです。

blocks をプラグインの拡張ポイントとして機能させることは可能でしょうか? それとも、プラグインはこれを内部実装の詳細として扱うべきでしょうか?

具体的には、Discourse は以下のいずれかの提案を受け入れる姿勢でしょうか?

  1. コアに汎用的なイベント/カードブロックタイプを追加する
  2. registerChatBlockType 風のプラグイン API を提供する

マークダウンをレンダリングし、クライアント側で処理済みのチャットメッセージを装飾する手段に頼ることもできますが、この方向性が許容される範囲内だと考えられるなら、構造化されたブロックの方がよりクリーンなモデルだと考えられます。

現時点では優先順位は高くありませんが、どのような種類の API が必要だとお考えか、詳しくお聞かせいただけますか?

基本的には、プラグインが以下を行えるようなAPIを望んでいます。

  1. そのプラグインが所有するチャットメッセージブロックタイプの名称を登録する
  2. オプションとして、そのブロック用のJSONスキーマバリデータを提供する
  3. そのブロック用のレンダラーを登録する

これらはすべてパッチを当てることで実現可能ですが、公式APIが存在すれば、安定性と安全性がより高まります。私のユースケースはForgeのアクティビティ通知ですが、RSSプラグインに代わるRSS、ソーシャルメディアフィードなど、他のアプリケーションも存在すると思われます。