Slack 統合でスレッドを親トピックにオプションで紐付ける機能

以前はスレッド化されるルールがあったが、最新のアップデートでそれが機能しなくなった、ということでしょうか?それとも、アップデートでスレッド化が開始されると期待していたが、実際にはそうならない、ということでしょうか?

私は Discourse 093ee1d80cdiscourse-chat-integration da91061(最新バージョン)を実行しています。thread ルールが設定されたチャンネルでは、応答が正しくスレッド化されています。

スレッドルールの設定例を示していただけますか?管理画面 → プラグイン → チャット統合で、以下のようなルールが表示されているはずです。

編集アイコン(鉛筆)をクリックすると、以下のような画面が表示されます。

もし、以下のように表示されるルールがある場合、そのルールはスレッド化されません。

これはサイト全体ではなく、ルールごとに設定する必要がある理由については上記をご覧ください。

Slack の /discourse コマンド(または統合設定時に選択したコマンド)でルールを設定する際は、watchfollow ではなく thread を使用してください。詳細は Discourse Chat Integration に記載されています。

「いいね!」 2

はい、Slack 統合を確認し、All Posts and Replies をすべて All posts with threaded replies に変更する必要があります。

現状では、ほとんどのチャンネル統合ですべての投稿と返信を表示しています。今後、スレッド付きの返信を含むすべての投稿を表示するように変更しても問題ないでしょうか?多くのチャンネルを再設定する必要があるため、最初から適切に割り当て直すのがベストだと考えています。:+

私の理解が合っていれば、いいえ、何も「壊す」ことはありません。これは、Slack への新しい通知送信を絶対に妨げないよう安全に設計されています。もし統合がスレッドの存在を知っていれば、チャンネルではなくそのスレッドに送信するだけです。何らかの理由でスレッドのコンテキストを認識できない場合は、ルールで設定されたチャンネルに送信されます。

「スレッド化された返信を含むすべての投稿」とは、以下を意味します:

  • 既存のトピックに新しい投稿が追加された場合:
    • トピックに対してスレッド ID が保存されている場合は、それを使用してスレッドを投稿します。
    • トピックに対してスレッド ID が保存されていない場合は、Slack に通知を投稿した後、その新しい Slack 投稿のスレッド ID を使用して、以降のトピックへの投稿をスレッド化します。それ以降はスレッド化が開始されます。
  • 新しいトピックが Slack に投稿された場合、その結果として得られるスレッド ID を保存し、そのトピックに関する追加の投稿をスレッド化された返信として Slack に送信できるようにします。

私はこれを「watch と同じように動作するが、投稿先のスレッドを知っていれば、そちらを使用する」と要約しています。

さらに、「トランスクリプト」機能を使用して Slack のコンテンツを Discourse の新しいトピックとして投稿する場合、いかなるルール設定に関わらず、常にスレッド ID の保存を試みます。これにより、thread ルールが既に存在する場合、または将来追加された場合でも、Discourse の新しいトピックに対する返信が、適切な Slack スレッドで発表されるようになります。

既存のルールは bin/rails c を実行して変更できるかもしれませんが、ライブサイトでは意図的にスレッド化するチャンネルとしないチャンネルを選んでいるため、それを触りたくありません。また、Ruby の知識が浅すぎるため、フォーラムでランダムな Ruby コードを提案して、あなたの環境で問題が起きることを恐れています。:sadpanda: 多分 DiscourseChat::Rule.where( で始まると思いますが、それ以上のことはお手伝いできません。申し訳ありません!

「いいね!」 4

@sunjam 余談ですが、この機能が望ましく価値があるとお感じいただけたことを嬉しく思います!(特に、私自身は Slack のスレッドをあまり好まないという皮肉を踏まえて、私よりもその価値を高く評価する他の人のためにこの作業を行った点においてです!)

UI に「watch」ルールをすべて「thread」ルールに変換するボタンを追加するのが理にかなっていることは想像できます。しかし、実際にそれを行うための知識が十分ではなく、自分自身でも使うつもりはありません。私は本当に Discourse に少し手を出しているバックエンド開発者なので、そのようなボタンを追加する PR のレビューとしても役には立たないでしょう。私にできることは、誰かがそのような機能を実装したい場合、無能な応援団になることだけです。:slight_smile:

「いいね!」 1

@mcdanlj 問題を見つけました。新しいチャンネル統合を作成する際、2.6 beta1 の「フィルタのテストに合格」ではスレッド化された返信が表示されません。統合を作成した後、統合を編集することでオプションとして利用可能になります。

今、同じ現象を確認しました。そのUIには気づいておらず、Slackのスラッシュコマンドでルールを作成していました。

フロントエンドコードに関する限られた理解の範囲では、これは @david が他の統合タイプから thread を非表示にするために求めたコードの副産物ではないかと考えています:

  @computed("channel.provider")
  available_filters(provider) {
    const available = [];

    if (provider === "slack") {
      available.push({
        id: "thread",
        name: I18n.t("chat_integration.filter.thread"),
        icon: "chevron-right"
      });
    }

間違っている可能性もあります。

しかし、私は実際にはバックエンド開発者であり、この問題をどう修正すればよいか分かりません。既存のルールを編集する際には channel.providerslack になるのに、新しいルールを作成する際にはならない理由も不明です。:grimacing:

これで大丈夫だと思います:

https://github.com/discourse/discourse-chat-integration/commit/945c0a6e4f2a844ce66be711d6342ef982541206

動作確認をお願いします :slight_smile:

「いいね!」 3

私の環境では修正されたことを確認しました。@david さん、私が知らなかった部分を整理してくださり、ありがとうございます!

「いいね!」 1

@sunjam 追伸:Slack 統合ルールを「watch」から「thread」へ移行する際、大部分は移行しましたが一部は残しました。その際、あなたの痛みを痛いほど感じました。目がくらんでしまい、無事に終わってホッとしたものです。なので、私の作業内容自体は変えるつもりはありませんが、変換に必要な労力を軽んじるわけではありません。少なくとも、これは一回限りのコストです。

もし Rails コンソールでワンコマンドで通常の watch ルールをすべて thread ルールに変換できるようなものがあるなら、私はまだ見つけられていません。もし見つけていたら、それを使って変換した後、watch ルールとして残したい少数のルールだけ元に戻したはずです。:smiling_face:

「いいね!」 2

スラック側の「未読すべて」と「スレッド」にスレッドの返信が表示されていますか?新しい投稿は表示されるようですが、スレッドの返信はこれらの通知をトリガーしないようです。

Discourse が投稿するメッセージは、他の Slack スレッドとは異なる通知が送られるわけではありませんが、これは Discourse の範囲を超え、Slack のスレッド通知の仕組みそのものに関わる問題です。Slack のスレッド通知のルールは優れていないと感じていますが、Slack は誰でも改善に貢献できるオープンソースプロジェクトではありません。スレッドの追加投稿の通知を受け取るには、そのスレッドに参加するか、購読する必要があります。少なくとも、それが今週のルールです。スレッドが Slack で初めて導入された頃は、チャンネルの通知ルールに従っていたと記憶しています。Slack にて、スレッドの通知をチャンネルに追従させる設定が見つからず、そのせいで仕事で重要な情報を見逃してしまうため、本当にイライラします。

私は Slack のスレッドの実装を非常に嫌っているため、私がこの機能を実装したという事実は皮肉そのものです。しかし、私は少数派の立場にいると考えており、Slack のスレッドを高く評価する大多数の人々にとって Discourse をより親しみやすいものにするために、この機能を実装しました。

「いいね!」 1

ご澄清ありがとうございます。ThreadExampleに関わる方々はスレッド付きの返信を確認できるようですし、それで十分機能しています。いずれにせよ、これはSlack側の整理整頓にとって非常に有用なオプションであり、さらに他のチャット統合でも同様の概念のバリエーションを取り入れるきっかけになればと願っています!

「いいね!」 1

その通りです。「関係者」には、スレッドの3つの縦点メニューを開き、「スレッドをフォロー」を選択する人も含まれます。スレッドの初期にモックアップがあったことに気づきましたが、実際に動作する例を共有したことはありませんでした。そこで今日から、https://forum.makerforums.info/c/k40 の Slack チャンルでは、以下のような表示になります:

「いいね!」 3

今日初めて試してみた…かなり最高だ。

「いいね!」 2

@david さん、スレッド ID の設定を無視してチャンネルに投稿されてしまうバグを修正してくださり、本当にありがとうございます!

「いいね!」 2

@mcdanlj さん、こんにちは

Discourse のスレッドを Slack と同期できるようにしてくださり、本当にありがとうございます。一つ気づいた問題がありまして、リンクを単独の行に貼り付けて onebox で投稿すると、Slack のスレッドに投稿されたメッセージからそのリンクが完全に消えてしまい、空白の行しか表示されません。私の場合、リンクは 2 行のテキストの間に挟まれていましたが、その 2 行は正常に投稿されました。

私が行った操作は投稿されたメッセージの「内容」を変更したわけではありません。単に、場合によってはスレッドを指定するだけです。

Slack に投稿されたメッセージの書式設定に関する問題は、別のバグ報告として、別のスレッドで提起することをお勧めします。私はそれについては確認も変更もしていません。

「いいね!」 1

要約:スレッド化された返信を Slack に送信する際、トピックを移動させるのは問題です。

気づいた点として、Discourse でカテゴリ間をトピックを移動させると、Slack チャンネルでのスレッド化が壊れてしまうようです。これは、あるカテゴリでトピックを作成し、その後、別の Slack チャンネル用に設定されたカテゴリに移動させた場合に発生します。

投稿 A が移動されたため、同じ Slack 上のスレッドに返信が送信されなくなります。その結果、Slack 側では返信が全く表示されなくなります。返信を個別(スレッド化せず)に保つことで、この問題を回避できます。

なるほど、そういう理屈もありますね。その場合、どうするのが正解なのかさえわかりません…

「いいね!」 1

確信はありませんが、念のため記載しておきます。代替案として、スレッドを使わずに特定の追加 Slack チャンネルでのみ統合を有効化し、少なくとも 1 つのチャンネルに表示されるようにするという方法があります。:+1: