Проверка новых сообщений в чате через API

Здравствуйте,

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

Более конкретно, я пытаюсь использовать настройки пользователя в “chat_header_indicator_preference”. На данный момент у меня установлено значение “all_new”, которое, как я понимаю, должно отображать любые новые сообщения в каналах, к которым я принадлежу, а также непрочитанные упоминания и личные сообщения.

Я надеялся, что при обращении к /session/current.json смогу найти там что-то полезное для этой цели, но пока ничего подходящего не обнаружил.

Существует ли какой-либо API-эндпоинт, с помощью которого можно определить наличие новых сообщений на основе настройки chat_header_indicator_preference пользователя??

/chat/api/me/channels и ключ отслеживания содержат всю необходимую информацию, возможно, в будущем мы создадим более специализированную конечную точку

Спасибо @j.jaffeux. Я изучаю /chat/api/me/channels и вижу, что в разделе отслеживания можно пройти по всем каналам и проверить, есть ли у какого-либо канала unread_count > 0, что полезно.

Однако это, похоже, не связано с настройкой chat_header_indicator_preference пользователя и также не сообщает, есть ли для пользователя новые личные сообщения (DM) или упоминания.

В теории я могу попытаться воспроизвести логику chat_header_indicator_preference, сначала проверив, установлена ли у пользователя эта настройка в значение “all_new”. Если да, то проверить, есть ли у каких-либо его каналов unread_count > 0. Если все они равны 0, то проверить наличие непрочитанных DM или упоминаний.

Но я надеюсь, что существует более эффективный способ… (к тому же я не уверен, как получить вторую часть данных — информацию о непрочитанных DM/упоминаниях).

Любая помощь или рекомендации будут очень кстати.

Извините, я не совсем понял, чего вы пытаетесь добиться.

Я пытаюсь отобразить бейдж в моём приложении, если у пользователя есть новая активность в чате.

В разделе «Настройки» → «Чат» есть параметр с именем chat_header_indicator_preference, у которого есть следующие опции:

Пользователь ожидает увидеть красный бейдж, указывающий на новую активность, только в соответствии с этим параметром. Если у пользователя выбрано «Все новые сообщения», я ожидаю, что бейдж появится при наличии любой новой активности в любом из каналов, в которых он состоит, а также при наличии упоминаний или личных сообщений (DM).

Вы показали мне, как перебрать все каналы и проверить наличие непрочитанных сообщений, но:

  1. это никак не связано с данным параметром;
  2. это не поможет мне понять, есть ли у пользователя личные сообщения или упоминания.

В идеале я надеялся найти конечную точку (endpoint), которая помогла бы отобразить бейдж в зависимости от параметра chat_header_indicator_preference клиента.

Если это невозможно, то, похоже, мне сначала нужно проверить наличие непрочитанных сообщений в разделе «tracking» в chat/api/me/channels, а затем проверить второе место, чтобы узнать, есть ли у него личные сообщения или упоминания.

Я не знаю, где находится это второе место, но надеялся, что кто-то здесь сможет подсказать мне правильное направление.

Всё ли это понятно?

Отслеживание включает как прямые, так и публичные каналы.

Спасибо… для меня это не было очевидным.

В системе отслеживания есть ли способ узнать, какие каналы являются личными сообщениями, а какие — публичными?

Если у пользователя chat_header_indicator_preference установлено значение «Личные сообщения и упоминания», я бы не хотел показывать значок для обычных новых сообщений в канале.

Да, у вас есть direct_message_channels и public_channels, поэтому вы можете выполнять поиск по ID в модуле отслеживания.