投稿の編集で通知が発生する

Hello,

I have been updated some featured/pinned topics and they seem to be sending out updates every time that I update them. Is there a way to disable this? “Watch first Post” shouldn’t trigger if the post is just slightly edited as far as I can tell?

Thanks!

What you’re describing is not really possible.

What do you mean by “I have been updated”? What exactly did you do, step by step? Describe it in detail? Your question is unanswerable until you provide this information.

Edits don’t alert anyone in Discourse… ever, that I can think of. You will be notified if someone else edits your post by default, using the typical Discourse notifications.

「いいね!」 1

Edits notify the original author. I get notifications when @codinghorror fixes my posts with alarming frequency. (I don’t think it’s what this person is describing, but it is edits giving notifications)

Edit: oops

As I said above, already…

「いいね!」 1

Sorry fort he lack of clarity.
For some reason, editing a post that I created would notify other users of the edit. It appears that it occurred in topics that used the tagging of a group and that group would be notified (even if the tag was not a new one).

  1. Create a post with multiple tags of groups of members
  2. Let it propagate and send notifications. Wait whatever number of minutes is needed for it to send out to any current watch lists/etc.
  3. Come back to the post and edit it.
  4. Add something useless, like the word unicorn and note that the right hand side of the edit window alerts that you will notify the groups in the post despite not having added or edited anything to do with those tags.
  5. Save
  6. Check the logs and note that all members in those groups are now notified of the edit (though the notifications appear as a New Topic notification.
「いいね!」 3

Interesting so this is specific to group mentions? Perhaps you can try to repro this when you have time @jomaxro

It appears to be on my end at least.

I have not been able to repro this. I tested it on try, with 3 users. In one post I mentioned all of them individually, in the other I mentioned a group all 3 were in. They all received the initial mention notification, they did not receive further notifications on edit.




I’m unsure about the type of notification here. Are you referring to a notification that appears on your user profile, i.e., as an extra entry in the list that appears when you click on your avatar up right?

Or is it a small blue dot next to the topic title in the topic list?

「いいね!」 1

当社のサイトのいずれかで、この挙動を確認しています。

グループに言及している投稿を編集すると、以下の警告が表示されます。

また、そのグループのメンバーが編集の保存時に新しい通知を受け取っていることも確認できました。

「いいね!」 2

@tshenry さん、これを再現できますか?

「いいね!」 1

Hmm @Grayden_Shand、投稿が編集される前にグループへの言及が既に行われていたと推測されますか?投稿を編集して新しい言及を追加した場合、そのユーザーやグループには通知が送信されることはご存知かと思います。

私は以下の 2 つのシナリオをテストしました:

  1. グループへの言及が既にある投稿に対して「ニンジャ編集」を行った場合、編集中は警告が表示されますが、編集完了後に通知は送信されません。
  2. 編集猶予期間を過ぎた後に編集を行った場合、編集中は警告が表示されますが、グループに対して新しい通知は送信されません。

再現手順に関する追加情報があればご提供いただけますでしょうか?


余談ですが、投稿レベルで「言及が通知をトリガーするかどうか」を制御するトグル機能があると便利かもしれません。これにより、編集時の制御が強化されるだけでなく、単に他のユーザーが利用できるようにマジックなユーザーカードやプロフィールリンクを投稿に含めたい場合にも役立ちます。

「いいね!」 2

はい、投稿が編集される前からグループへの言及は含まれていました。また、編集を行ったユーザーはトピックの所有者とは異なるユーザーでした。

今日は開発環境で再現を試み、成功すれば改めて報告いたします。

「いいね!」 1

見つけました…

通知は、投稿が作成された後にグループに参加したユーザーに送信されています。

つまり、通知を受け取っているユーザーにとっては、自分たちがメンション通知を受け取るのは初めてですが、誰かが初めて通知を受け取ったわけではありません。

一方で、最初からグループにいた人(元々のメンション通知を受け取った人)は、編集による追加の通知を受け取りません。

再現手順(2人のユーザーが必要)

  1. 新しいグループを作成
  2. そのグループをメンションする新しい投稿またはトピックを作成
  3. 新しいユーザーを作成
  4. そのユーザーをグループに追加
  5. 投稿を編集 – この時点で新しいユーザーが通知を受け取ります。
  6. 投稿を再度編集 – 新しいユーザーは、追加の編集に対しては通知を受け取りません。

ここで「正しい」動作がどうあるべきか確信が持てません。個人的には、編集時にメンション通知を送信しない方向に傾きますが、実装がどの程度複雑になるかはわかりません。

また、もう一点補足ですが、「グループ内の X 人に通知しようとしています」というメッセージは、実際に誰かが通知を受け取るかどうかに関わらず、編集を行う際に表示されます。

この警告メッセージを、その投稿について以前通知を受け取っていない人の数にリンクさせ、実際に通知される人数を正確に計算することは可能でしょうか。

「いいね!」 4

なるほど、ありがとうございます!私も同じ動作を確認しています。

投稿の編集を通じてメンション通知を送信する機能は、私や他のユーザーが時々利用する重要な機能ですので、これは残す必要があります。しかし、グループとの連携の仕方が少しおかしいと感じます。

現時点での私の意見としては、投稿に対してグループへの通知は 1 回だけ行うべきです。最初のグループメンションが行われたにグループに追加されたユーザーは、その後の投稿編集の結果としてグループメンション通知を受け取るべきではありません。また、投稿が最後に保存されて以降に新しいグループメンションがない場合、グループへの通知に関する JIT の教育用バナーは編集時に表示されるべきではありません

以前メンションされていなかったグループが編集でメンションされた場合は、彼ら通知を受けるべきです。これはユーザーメンションの動作と同じです。新しくメンションされたグループがある場合も、同様に教育用バナーを表示すべきです。

group_mentions テーブルにレコードが存在するかどうかに基づいた条件分岐を追加すれば実現できると思います。投稿を保存する時点で レコードを作成します

@codinghorror さん、どうお考えですか?

「いいね!」 2

承知しました。しかし、本当にこれを修正すべきバグとみなすべきでしょうか?

編集時にすべての @group 通知を完全に抑制すると、新しい @group を編集した際にメンション通知が発生しなくなります。これは過去の通知の動作から大きく変わるもので、非常に驚きを与える変更です。

一方、新しい @group に対してのみ通知を送るような巧妙なアプローチを取ると、差分を走査する複雑なコードや、より多くの管理作業を抱え込むことになってしまいます。

ここで簡単な解決策を思いつくことはできません。

「いいね!」 4

つまり、3 つのグループ言及を含む投稿を想像してみてください。それが編集され、4 つ目の言及が追加された場合です。

編集を保存する際、その投稿の現在のグループ言及リストを取得するために、以下のようなクエリを使用できます。

-- [params]
-- text :post_id

select gm.group_id, g.name
from group_mentions gm
join groups g on (gm.group_id = g.id)
where post_id = :post_id

その後、このクエリの結果と投稿内で言及されているグループのリストを比較することで、新しい言及(複数含む)を特定できます。

これは大した計算量ではないように思えますが、何か見落としているのかもしれません。また、これはバックグラウンドタスクで実行できる種類の処理にも思えます。

グループへの通知に関する JIT バナーについては、このロジックを API エンドポイント(/post/<id>/mentions.json)を通じて公開し、非同期でこのデータを取得できるようにする案もあります。

新しい投稿を作成してその方法で通知する方がシンプルではありませんか?ここでは、かなり限定的なエッジケースを支援するために、巨大な複雑さの塔を構築することに少し不安を感じています。

「いいね!」 1

あまり複雑にしたくありません。

このコードの一部を確認しました(@tshenry さん、リンクをありがとうございます)。それほど複雑にする必要はなさそうです。

現在のグループメンションはここ(78〜80 行目)でトリガーされています。expand_group_mentions() 関数は、グループメンションの通知を受け取るべきユーザーを生成するジェネレーターであり、SiteSetting.max_users_notified_per_group_mention のようなポリシーを尊重しています。

このロジックを置くのに最適な場所だと思われます。

create_notification 関数では、すでに同じタイプの通知を受け取っているユーザーに対しては通知を抑制しています。そのため、グループメンションを含む投稿を編集すると、新しいグループメンバーに対して通知がトリガーされます。実際にはグループの全ユーザーに対して通知が生成されますが、すでに通知を受け取っている人に対しては抑制されるのです。

私は同様のアプローチを提案します。つまり、expand_group_mentions() 関数を更新して、group_mentions テーブルにレコードが存在するグループを除外するようにします。

以下のようなイメージです(Ruby の構文に詳しくないため、ご容赦ください):

  def expand_group_mentions(groups, post)
    return unless post.user && groups

    Group.mentionable(post.user, include_public: false).where(id: groups.map(&:id)).each do |group|
      next if group.user_count >= SiteSetting.max_users_notified_per_group_mention

      # すでにメンションされているグループをチェック
      next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0

      yield group, group.users
    end

  end

ただし、これでは JIT 警告については何も解決しません。

この問題の解決に協力したいと考えています。ただ迷惑になっているだけなら、お知らせください :slight_smile:

「いいね!」 2

新しいサポート質問を投稿しようとしたところ、このトピックを見つけました。

関連しているようです。

投稿して、通知すべき人を見落としていることに気づいた場合、最善の方法は何でしょうか?

  1. 投稿を編集して、特定のグループや複数の人を @ メンションする?
  2. 彼らを通知するために新しいメッセージを作成する?その場合、多くの情報を繰り返すか、元の投稿へのリンクを追加する必要があります。

可能であれば、オプション 1 の方が(すっきりして)好ましいのですが。

どなたか確認してもらえますか?編集時に特定の個人やグループを @ メンションした場合、まだ通知されていない人にも通知されますか?もし通知されないなら、それが実装可能であれば便利な機能になるかもしれません。

余談ですが、もし忘れてしまった場合は、編集可能な時間枠を利用して通知送信前に投稿を編集することがあります。しかし、その方法では、間に合うかどうか確実ではありません。編集が投稿されて初めて、それが「編集」として表示されるかどうかがわかります。

この編集で、通知が届くかどうかテストします。@Rhidian @codinghorror

届かないようです :confused:

「いいね!」 2