danjw
(Dan)
1
コンテキスト
当社は、API を通じてプログラムでユーザーをグループに追加し、個別のグループに対してプライベートメッセージを自動的に作成するシステムを運用しています。すべて API を介して行っています。
例えば、「cooking-class-101」というグループがあったとします。
このグループに対して、参加者を「cooking-class-101」と「system」の 2 名としたプライベートメッセージを作成します。
この仕組みにより、人々のグループに対して自動的にプライベートグループチャットを作成することができ、非常にうまく機能しています。
問題
現在、グループに所属する一般ユーザーに対して、トピックに新しい投稿が追加されても、メッセージバスが更新を返さないという問題が発生しています。
例えば、トピック ID が 123 のグループ用プライベートメッセージがあるとします。メッセージバスが topic/123 チャネルを購読していることは確認できますが、別のユーザーがトピックに投稿しても、メッセージバスは何も返さず、最新の投稿が自動的に表示されません。
一方、topic/presence/123 チャネルでは正しくデータが返されることを確認しており、メッセージバス自体は正常に動作していることがわかります。
対照的に、グループに所属し、かつプライベートメッセージに参加している管理者ユーザーに対しては、メッセージバスが topic/123 チャネルで正しくデータを返しており、新しい投稿がリアルタイムでトピック上に表示されます。
また、グループのメンバーである一般ユーザーを個別にトピックに招待した場合(つまり、参加者が「cooking-class-101」「system」「一般ユーザー」の 3 名となった場合)、その一般ユーザーは topic/123 チャネルからメッセージバスの応答を正しく受け取り、新しい投稿をリアルタイムで確認できるようになります。
調査
Discourse のコードを調査した結果、プライベートメッセージのトピックにおいては、新しい投稿が公開された際にグループへの通知が行われていない可能性が示唆される以下の箇所が見つかりました:
上記リンクにある topic.allowed_users が、グループが追加されたプライベートメッセージのトピックで何を返すのかは完全に理解できていませんが、グループに所属するユーザーのリストが含まれていないのではないかと推測しています。
これをバグとしてタグ付けしましたが、これは意図された動作である可能性もあります。
「いいね!」 2
sam
(Sam Saffron)
2
私にはバグというよりサポート対応のように感じられます。
逆向きに始め、UI 上ですべての操作を行ってください。
動作しますか?
例:
- user1 はグループ A のメンバーです
- グループ A にメッセージが送信されます
- user1 がそのメッセージを確認します
- user2 がそのメッセージに返信を投稿します
- リプライがライブで表示されますか?
表示される場合、API の使い方に問題がある可能性があります。
「いいね!」 3
danjw
(Dan)
3
サム、ご返信ありがとうございます。
Discourse の UI 内からこの動作を検証しましたが、同じ誤った挙動が見られました。つまり、返信はリアルタイムで表示されず、通知または通知アラートのみが表示されるという問題です。
最新の投稿を確認するには、ページを再読み込みする必要があります。
ただし、上記の例において user1 が管理者である場合は、すべて期待通りに動作します。
「いいね!」 2
sam
(Sam Saffron)
4
さて、これは明らかにバグのようですね。テストいたしますが、数日かかるかもしれません。
「いいね!」 4
danjw
(Dan)
5
素晴らしいです、ありがとうございます!さらに情報が必要であればお知らせください。
「いいね!」 1
danjw
(Dan)
8
こんにちは、サムさん。このバグの進捗状況を確認できる場所があれば教えていただけませんか?Discourse のバグ報告や修正のプロセスについては、まだ詳しくないんです。よろしくお願いします!
「いいね!」 2
sam
(Sam Saffron)
9
Kris が修正したと思いますので、再テストをお勧めします。
「いいね!」 3
@danjw さん、こんにちは。
お伝えし忘れていました。Sam の言うとおり、以下の PR で修正済みです。
「いいね!」 3