← Назад к справке

IM

Recent и Notify

Рабочая справка по recent и уведомлениям Bitrix24: RecentTable, список последних чатов, notify и отличие уведомлений от обычных сообщений.

Recent — это список последних диалогов пользователя. Notify — уведомления. Это не то же самое, что просто список чатов или сообщений.

Recent

Recent нужен для интерфейса мессенджера: какие диалоги показать пользователю в списке последних.

Что такое recent

Один и тот же чат может быть в recent у одного пользователя и отсутствовать у другого. Поэтому recent всегда нужно рассматривать в контексте конкретного пользователя.

Получить recent пользователя

<?php

use Bitrix\Main\Loader;
use Bitrix\Im\Model\RecentTable;

Loader::includeModule('im');

/**
 * Получает последние диалоги пользователя.
 */
function fetchUserRecentItems(int $user_id, int $limit): array
{
    $recent_items = [];

    $recent_result = RecentTable::getList([
        'select' => [
            'USER_ID',
            'ITEM_TYPE',
            'ITEM_ID',
            'ITEM_MID',
            'CHAT_TYPE',
            'CHAT_ID',
            'MESSAGE_ID',
        ],
        'filter' => [
            '=USER_ID' => $user_id,
        ],
        'order' => [
            'MESSAGE_ID' => 'DESC',
        ],
        'limit' => $limit,
    ]);

    while ($recent_item = $recent_result->fetch()) {
        $recent_items[] = $recent_item;
    }

    return $recent_items;
}

$recent_items = fetchUserRecentItems($user_id, 50);

print_r($recent_items);

Для REST-интеграций похожую задачу решает метод im.recent.list, который возвращает список последних диалогов пользователя.

Отличие от ChatTable

Источник Что показывает
ChatTable Сам чат как объект.
RelationTable Кто состоит в чате.
RecentTable Что находится в списке последних диалогов конкретного пользователя.
MessageTable Сообщения внутри чата.

Notify

Уведомления — отдельный слой IM, связанный с системными и пользовательскими событиями.

Что такое уведомления

Уведомление может быть связано с задачей, CRM, календарём, бизнес-процессом или другим модулем. В REST-документации группа методов im.notify.* отвечает за работу с уведомлениями.

Прочитать уведомления

В коробке уведомления часто анализируют через сообщения с заполненными notify-полями. Для точной диагностики сначала выведи реальные сообщения пользователя и посмотри значения NOTIFY_EVENT.

<?php

use Bitrix\Main\Loader;
use Bitrix\Im\Model\MessageTable;

Loader::includeModule('im');

/**
 * Получает сообщения-уведомления пользователя.
 */
function fetchUserNotifyMessages(int $user_id, int $limit): array
{
    $messages = [];

    $message_result = MessageTable::getList([
        'select' => [
            'ID',
            'CHAT_ID',
            'AUTHOR_ID',
            'MESSAGE',
            'DATE_CREATE',
            'NOTIFY_EVENT',
        ],
        'filter' => [
            '=AUTHOR_ID' => $user_id,
            '!NOTIFY_EVENT' => false,
        ],
        'order' => [
            'ID' => 'DESC',
        ],
        'limit' => $limit,
    ]);

    while ($message = $message_result->fetch()) {
        $messages[] = $message;
    }

    return $messages;
}

$notify_messages = fetchUserNotifyMessages($user_id, 50);

print_r($notify_messages);

Отличие от сообщений

Тип Как воспринимать
Обычное сообщение Пользователь написал в чат.
Системное сообщение Система записала событие в чат.
Notify Уведомление пользователю от модуля или системы.

Если задача — сортировать активные чаты, notify-сообщения часто нужно исключать, чтобы не считать системное уведомление пользовательской активностью.

Источники