Перейти к содержанию

Работа с чатом

При отправке сообщения отправляет параметр DIALOG_ID - как я понимаю, эта некая абстракция, помогающая указать чат независимо от того, личка это или групповой чат. При личном сообщении DIALOG_ID - ID того пользователя, которому пишется сообщение

Отправка в личку

При отправке в личку в качестве DIALOG_ID передаётся ID того пользователя, кому написано сообщение. Далее с помощью по этим параметрам получается сам chatId - ID записи из таблицы b_im_chat

/bitrix/modules/im/lib/dialog.php
$chatId = \CIMMessage::GetChatId($dialogId, $userId);

Метод делает такой запрос

-- RelationFrom - ID того пользователя, кому адресовано сообщение
-- RelationTo - ID того пользователя, который написал и отправил сообщение
SELECT RelationFrom.CHAT_ID
FROM
    b_im_chat Chat,
    b_im_relation RelationFrom,
    b_im_relation RelationTo
WHERE
    Chat.ID = RelationTo.CHAT_ID
  and Chat.TYPE = 'P'
  and RelationFrom.USER_ID = 
  and RelationTo.USER_ID = 257
  and RelationFrom.MESSAGE_TYPE = 'P'
  and RelationTo.MESSAGE_TYPE = 'P'
  and RelationFrom.CHAT_ID = RelationTo.CHAT_ID

Отправка сообщения в общий чат

При отправке сообщения в общий чат DIALOG_ID принимает такое значение:

dialogId: chat123

Далее метод Dialog::getChatId($dialogId); достаёт id чата:

/bitrix/modules/im/lib/V2/Controller/BaseController.php
$chatId = Dialog::getChatId($dialogId);
return Chat::getInstance((int)$chatId);

Удаление чатов

Для получения dialogId скопировать ссылку на чат:

https://portal.loc/online/?IM_DIALOG=chat55555

\Bitrix\Main\Loader::includeModule('im');

$dialogId = 'chat55555';
$userId = 1;

$chat = \Bitrix\Im\V2\Chat::getInstance(\Bitrix\Im\Dialog::getChatId($dialogId));
new \Bitrix\Im\V2\Chat\Cleanup\ChatContentCollector($chat)->deleteChat($userId);

Форматирование сообщений

https://helpdesk.bitrix24.ru/open/22091486/

Пример отправки сообщения в групповой чат

$chatId = 123;
$message = <<<TEXT
[COLOR=#ff0000]Внимание![/COLOR]

текст сообщения
TEXT;
\CIMMessenger::Add([
    'DIALOG_ID'       => 'chat' . $chatId,
    'FROM_USER_ID'    => BITRIX24_NOTIFICATION_USER_ID,
    'MESSAGE'         => $message,
    'MESSAGE_TYPE'    => 'C',
    'SKIP_USER_CHECK' => 'Y',
]);