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-сообщения часто нужно исключать, чтобы не считать системное уведомление пользовательской активностью.