• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/livechat.php
  • Класс: BitrixImOpenLinesLiveChat
  • Вызов: LiveChat::onMessageSend
static function onMessageSend($messageId, $messageFields)
{
	$chatEntityType = $messageFields['CHAT_ENTITY_TYPE'] ?? null;
	if ($chatEntityType !== 'LIVECHAT')
	{
		return false;
	}

	$messageFields['MESSAGE_ID'] = $messageId;
	Log::write($messageFields, 'LIVECHAT MESSAGE SEND');

	if ($messageFields['SKIP_CONNECTOR'] == 'Y')
	{
		return false;
	}

	[$lineId, $userId] = explode("|", $messageFields['CHAT_ENTITY_ID']);

	$extraFields = Array();
	if ($messageFields['AUTHOR_ID'] > 0)
	{
		$user = BitrixImUser::getInstance($messageFields['AUTHOR_ID']);
		if ($userId == $messageFields['AUTHOR_ID'])
		{
			$extraFields['EXTRA_URL'] = $user->getWebsite();
		}
		else if (!$user->isConnector() && !$user->isBot())
		{
			return false;
		}
	}

	$chatId = $messageFields['TO_CHAT_ID'];

	if (
		trim($messageFields['MESSAGE']) == '' &&
		empty($messageFields["ATTACH"]) &&
		empty($messageFields["FILES"])
	)
	{
		return false;
	}

	$files = [];
	if(!empty($messageFields["FILES"]))
	{
		foreach ($messageFields["FILES"] as $field)
		{
			$files[] = File::getById($field['id'])->getFileId();
		}
	}

	$message = [
		'id' => $messageId,
		'date' => "",
		'text' => $messageFields['MESSAGE'],
		'files' => $files,
		'attach' => $messageFields['ATTACH'],
		'system' => $messageFields['SYSTEM'],
	];

	$event = new BitrixMainEvent('imconnector', 'OnReceivedMessage', [
		'user' => $messageFields['CHAT_AUTHOR_ID'],
		'connector' => 'livechat',
		'line' => $lineId,
		'chat' => ['id' => $chatId],
		'message' => $message,
		'extra' => $extraFields
	]);
	$event->send();

	return true;
}