Личное сообщение группы — проблема с Message Bus

Контекст
У нас есть система, которая программно добавляет пользователей в группы через API и автоматически создает личные сообщения для отдельных групп, также полностью через API.

Например, у нас может быть группа с названием: cooking-class-101

Для неё мы создаем личное сообщение с участниками cooking-class-101 и system.

Это отлично работает для нас как способ автоматического создания приватных чатов для групп людей.

Проблема
Проблема, которую мы наблюдаем, заключается в том, что для обычных пользователей, являющихся частью группы, шина сообщений не возвращает никаких обновлений при добавлении новых постов в тему.

Например, у нас есть личное сообщение группы с идентификатором темы 123. Мы видим, что шина сообщений подписана на канал topic/123, однако, если другой пользователь создает пост в теме, шина сообщений ничего не возвращает, и поэтому последний пост не отображается автоматически.

Мы подтвердили, что шина сообщений в целом работает как ожидается, так как она корректно возвращает данные на канале topic/presence/123.

В противовес этому, для пользователей-администраторов, которые являются частью группы, добавленной в личное сообщение, шина сообщений корректно возвращает данные на канале topic/123, и новый пост поэтому правильно отображается в теме в реальном времени.

Мы также подтвердили, что если обычного пользователя, являющегося членом группы, отдельно пригласить участвовать в теме (то есть теперь в теме участвуют cooking-class-101, system и обычный пользователь), то он начинает корректно получать ответы от шины сообщений на канале topic/123 и, следовательно, видеть новые посты в реальном времени.

Исследование
Изучение кода Discourse привело меня к следующему, что выглядит так, будто для тем личных сообщений группы не уведомляются о публикации новых постов: discourse/app/models/post.rb at b7b81afe553a79f58f79f49a6c2ceff831aa4ec7 · discourse/discourse · GitHub

Я не до конца уверен, что должно возвращать свойство topic.allowed_users по ссылке выше для темы личного сообщения, к которой добавлена группа, но я подозреваю, что оно не включает список пользователей, состоящих в этой группе.

Я пометил это как баг, но это может быть и ожидаемым поведением?

2 лайка

Похоже на проблему с поддержкой, а не на баг.

Начните с обратного, выполните все действия через интерфейс.

Работает ли это?

Например:

  • пользователь1 является участником группы A
  • сообщение отправлено в группу A
  • пользователь1 просматривает сообщение
  • пользователь2 публикует ответ на сообщение
  • Видите ли вы, что ответ приходит в реальном времени?

Если да, то что-то не так с тем, как вы используете API.

3 лайка

Спасибо за ответ, Сэм.

Мы протестировали это через интерфейс Discourse, и проблема сохраняется — ответ не появляется в реальном времени, приходит только уведомление/предупреждение.

Чтобы увидеть новый пост, необходимо обновить страницу.

Однако, в вашем примере выше, если user1 является администратором, всё работает как положено.

2 лайка

Что ж, это, безусловно, похоже на ошибку. Мы проверим, это может занять несколько дней.

4 лайка

Отлично, спасибо! Дайте знать, если понадобится дополнительная информация

1 лайк

Привет, Сэм! Просто оставляю комментарий, чтобы узнать, есть ли где-то возможность следить за прогрессом по этой ошибке? Я не совсем в курсе процесса отчётов об ошибках и их исправления в Discourse. Спасибо!

2 лайка

Я почти уверен, что Крис это исправил. Рекомендую проверить снова.

3 лайка

Привет, @danjw,

извини, я забыл сообщить тебе. Сам прав, это было исправлено в PR ниже:

3 лайка