• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/PushService.php
  • Класс: BitrixImV2MessageSendPushService
  • Вызов: PushService::getFormatGroupChatMessage
private function getFormatGroupChatMessage(Message $message, GroupChat $chat): array
{
	$fromUserId = $message->getAuthorId();

	$arUsers = CIMContactList::GetUserData(Array(
		'ID' => $fromUserId,
		'PHONES' => 'Y',
	));

	$arChat = CIMChat::GetChatData([
		'ID' => $chat->getChatId(),
		'USE_CACHE' => 'N',
	]);

	// todo: Replace it with Chat methods
	$pushParams = $message->getPushParams();
	$extraParamContext = $pushParams['CONTEXT'] ?? null;
	if (
		!empty($arUsers['users'])
		&& $extraParamContext == Chat::ENTITY_TYPE_LIVECHAT
		&& BitrixMainLoader::includeModule('imopenlines')
	)
	{
		[$lineId, $userId] = explode('|', $arChat['chat'][$chat->getChatId()]['entity_id']);
		$userCode = 'livechat|' . $lineId . '|' . $chat->getChatId() . '|' . $userId;
		unset($lineId, $userId);

		foreach ($arUsers['users'] as $userId => $userData)
		{
			$arUsers['users'][$userId] = BitrixImOpenLinesConnector::getOperatorInfo($pushParams['LINE_ID'], $userId, $userCode);
		}
	}

	return [
		'chatId' => $chat->getChatId(),
		'dialogId' => $chat->getDialogId(),
		'chat' => $arChat['chat'] ?? [],
		'lines' => $arChat['lines'][$chat->getChatId()] ?? null,
		'userInChat' => $arChat['userInChat'] ?? [],
		'userBlockChat' => $arChat['userChatBlockStatus'] ?? [],
		'users' => (is_array($arUsers) && is_array($arUsers['users'])) ? $arUsers['users'] : null,
		'message' => [
			'id' => $message->getMessageId(),
			'templateId' => $message->getUuid(),
			'templateFileId' => $message->getFileIds(),
			'prevId' => $chat->getPrevMessageId(),
			'chatId' => $chat->getChatId(),
			'senderId' => $fromUserId,
			'recipientId' => $chat->getDialogId(),
			'system' => ($message->isSystem() ? 'Y': 'N'),
			'date' => DateTime::createFromTimestamp(time()), // DATE_CREATE
			'text' => Text::parse($message->getMessage()),
			'textLegacy' => Text::parseLegacyFormat($message->getMessage()),
			'params' => $message->getParams()->toPullFormat(),
			'counter' => 0,
			'isImportant' => $message->isImportant(),
			'importantFor' => $message->getImportantFor(),
		],
		'files' => $message->getFilesDiskData(),
		'notify' => 'Y',
	];
}