discourse-chat-integration プラグインを使用した Matrix (element.io) 通知の設定

この howto は、discourse-chat-integration に含まれる Matrix (element.io) プロバイダーのセットアップ方法について説明します。

\u003e この統合をサポートしてくれた @ara4n さん、および #matrix-dev:matrix.org のメンバーの皆様に感謝します :slight_smile:

インストール

discourse-chat-integration プラグインは Discourse にバンドルされています。サイト設定で chat_integration_enabledtrue に設定して有効になっていることを確認してください。詳細については、discourse-chat-integration プラグイントピックをご覧ください。

Matrix のセットアップ

以下の手順は、element.io の Web クライアントを使用していることを前提としています。他のインターフェースでも同様の手順が可能であるはずです。

  1. 新しい シークレットウィンドウhttps://app.element.io/ を開きます(後でその理由がわかります)

  2. ボットのユーザーアカウントを作成します。後で再度ログインしたい場合に備えて、パスワードをどこかに書き留めておくと良いでしょう。Discourse 側ではパスワードは必要ありません。

  3. 通知を送信したいルームに参加するために、インターフェースを使用してルームに参加します

  4. 左上のアバターをクリックし、\u003ckbd\u003eすべての設定\u003c/kbd\u003e を選択してユーザー設定を開きます

  5. ボットの表示名とアバターを設定します

  6. 「ヘルプとについて」タブに切り替え、「詳細」までスクロールして、ホームサーバーアドレスと「アクセストークン」をコピーします(後で必要になります)。

  7. ログアウトをクリックしないでください。クリックするとアクセストークンが無効化され、機能しなくなります。代わりに、シークレットウィンドウを閉じるだけで構いません。もしシークレットウィンドウを開くのを忘れた場合は、ステップ 1 に戻ってください :wink:

Discourse のセットアップ

  1. Discourse のサイト設定で、chat_integration_matrix_homeserver 設定にホームサーバーアドレスを入力します。プロトコルを含めることを忘れないでください(例: https://matrix.org)。末尾のスラッシュは含めないでください。

  2. 先にコピーしたアクセストークンを chat_integration_matrix_access_token サイト設定に貼り付けます

  3. chat_integration_matrix_enabled を有効にします

  4. \u003ckbd\u003eプラグイン\u003c/kbd\u003e タブ、次に \u003ckbd\u003eチャット統合\u003c/kbd\u003e に移動します

  5. \u003ckbd\u003eMatrix\u003c/kbd\u003e タブ、次に \u003ckbd\u003eチャンネルの作成\u003c/kbd\u003e に移動します

  6. チャンネルの名前を入力します(これは管理インターフェースでのみ表示され、任意の名前を付けられます)

  7. 通知を送信したいルームの「ルーム ID」を入力します。Element Web クライアントでは、ルームを開き、上部の名前をクリックして一番下までスクロールすると確認できます。以下のような形式になります。

    !cdGUowUAqlgLHVerqE:matrix.org
    

    注: 新しい Matrix Room v12 の ID は :server サフィックスを含まない場合があります(例: !abcdefghijkl)。どちらの形式もサポートされています。

  8. \u003ckbd\u003eチャンネルを保存\u003c/kbd\u003e

  9. 作成したチャンネルにある \u003ckbd\u003eテスト\u003c/kbd\u003e ボタンを使用して、すべてが正常に動作しているか確認します。以下のような表示が確認できるはずです。

  10. discourse-chat-integration の手順に従って、チャンネルの「ルール」を設定します。

技術的な注記
  • 執筆時点では、ユーザーフレンドリーな方法で「ボット」の「アクセストークン」を取得する方法は見当たりませんでした。シークレットウィンドウを使用する解決策が、私が発見した中で最もユーザーフレンドリーな方法です

  • このプラグインは、Matrix 仕様の一部である org.matrix.custom.html 形式を使用してリッチテキストメッセージを送信します。フォーマットされたメッセージをサポートしていないクライアントは、プレーンテキストメッセージにフォールバックします

  • デフォルトでは、メッセージは m.notice として送信されます(Matrix クライアントは通常、これをより静かにレンダリングします)。chat_integration_matrix_use_notice サイト設定を無効にすることで、これを m.text に変更できます

  • この実装では、アクセストークンの「更新」に関する規定はありません。これは、現在使用されているほとんどのホームサーバーがトークンを失効させないという理解に基づいています。将来これが変更された場合は、見直す必要があります

「いいね!」 19

The test is not working for us:

422 No Reason Phrase

and the spinner will keep on turning indefinitely until full page reload. How can we triage the error?

「いいね!」 4

I just tried setting up a matrix integration using the instructions above, and it all worked ok. Can you confirm that you’re running the latest version of Discourse and this plugin?

Are you using the matrix.org homeserver, or your own homeserver? The 422 error is coming from that server.

I would suggest double checking your channel identifier, and also your matrix access token in your Discourse site settings.

「いいね!」 4

Thanks for the hints. I’ll try that out, before reporting back here.

「いいね!」 4

I have absolutely the same issue as @almereyda has.
@david, can you update obtaing “Access Token”, please? (Riot seems to be intensively developed :+1:)
+“Doctor log

「いいね!」 2

アクセストークンの取得に関する最新の手順についても興味があります…

「いいね!」 1

Element(Riot のリブランディング)では現在「ルーム設定」と呼ばれています。

完璧に動作します。

「いいね!」 2

このページを更新して、その変更を反映しました。

アクセス トークンは、設定の下部にある「ヘルプと概要」の下にあるようです。

私も同じ無限スピナーの問題を抱えています。 :frowning:

matrix.org と fedora.im の両方のルームで試しました。

「いいね!」 1

自分でセットアップを実行してみましたが、問題なく動作したようです。いくつか考えられることがあります。

  • ルームは暗号化されていますか? 暗号化されたルームをサポートするために追加作業が必要かどうかはわかりません。

  • アクセストークンは時間の経過とともに期限切れになるのかもしれません。2017年に統合を構築したときはそうではありませんでしたが、それはずっと昔のことです :older_man:。今週後半にローカル設定を再度試して、まだ動作するかどうか確認します。

「いいね!」 1

されていません。

そうかもしれませんが、アクセストークンをコピーしてすぐに使用しましたが、うまくいきませんでした。

「いいね!」 3

記録のために、@mattdmと私はDiscourseの設定にあるホームサーバーURLの末尾のスラッシュに起因する問題であることを突き止めました。

OPの指示にこの件についての注意点を追加し、最新のelement.io UIで動作するようにアクセストークンの指示も更新しました。

「いいね!」 5

スレッドサポートで何かうまくいった人はいますか?

チャットプラグインの最新バージョン(コミット ba40ede510986f74a23345082ac578e126467b97)をインストールし、テスト用のMatrixルーム(暗号化なし、公開ルーム)を設定したところ、上記で説明されているようにテストを実行しようとすると500 HTTPエラーが発生します(Set up Matrix (element.io) notifications using the discourse-chat-integration plugin - #2 by almereyda

ボットアカウントのアクセストークンは、API(_matrix/client/r0/rooms/{room_id}/send/m.room.message)を使用して、私たち自身のMatrixサーバーにメッセージを送信することで独立して検証されました。

Discourseのログには以下が表示されます。

Started POST "/admin/plugins/chat-integration/test" for 141.142.60.55 at 2022-11-16 18:16:47 +0000
Processing by DiscourseChatIntegration::ChatController#test as */*
  Parameters: {"channel_id"=>"107", "topic_id"=>"466"}
Completed 500 Internal Server Error in 62ms (ActiveRecord: 0.0ms | Allocations: 10109)
NameError (uninitialized constant FinalDestination::HTTP)
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'
「いいね!」 1

試していませんが、それは興味深いですね。チャンネルの乱雑さを減らすためにすべての投稿を1つのスレッドに入れるということですか、それともトピックの返信をマトリックスのスレッドに投稿することですか?

「いいね!」 2

トピックの返信をMatrixスレッドに投稿します。
(現在のSlackと同じフロー)

「いいね!」 1

Matrixでスレッド返信サポートの追加について、何か進展はありましたか?一部のユーザーがそれを喜ぶと思います。

「いいね!」 3