• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/connector.php
  • Класс: BitrixImOpenLinesConnector
  • Вызов: Connector::onStartWriting
static function onStartWriting($params)
{
	if (
		empty($params['CHAT']) ||
		!in_array($params['CHAT']['ENTITY_TYPE'], ['LINES', 'LIVECHAT']) ||
		$params['BY_EVENT']
	)
	{
		$result = true;
	}
	else
	{
		if ($params['CHAT']['ENTITY_TYPE'] == 'LINES')
		{
			$chatData = Chat::parseLinesChatEntityId($params['CHAT']['ENTITY_ID']);
			$userCode = $params['CHAT']['ENTITY_ID'];
		}
		else // LIVECHAT
		{
			$chatData = Chat::parseLinesChatEntityId($params['CHAT']['ENTITY_ID']);
			$chatData['connectorChatId'] = 0;
			$chatData['connectorId'] = self::TYPE_LIVECHAT;

			$userCode = $chatData['connectorId'] . '|' . $chatData['lineId'] . '|' . $params['CHAT']['ID'] . '|' . $params['USER_ID'];

			$orm = ModelSessionTable::getList([
				'select' => ['CHAT_ID'],
				'filter' => [
					'=USER_CODE' => $userCode,
					'=CLOSED' => 'N'
				]
			]);
			if ($session = $orm->fetch())
			{
				$chatData['connectorChatId'] = $session['CHAT_ID'];
			}
		}

		if (
			$chatData['connectorChatId'] <= 0 &&
			!self::isNeedConnectorWritingStatus($chatData['connectorId'])
		)
		{
			$result = true;
		}
		else
		{
			$chat = new Chat($params['CHAT']['ID']);
			if (
				$chat->isSilentModeEnabled() ||
				$params['LINES_SILENT_MODE']
			)
			{
				$result = true;
			}
			else
			{
				$actualLineId = Queue::getActualLineId([
					'LINE_ID' =>  $chatData['lineId'],
					'USER_CODE' => $userCode
				]);

				$fields = [
					'connector' => [
						'connector_id' => $chatData['connectorId'],
						'line_id' => $chatData['lineId'],
						'user_id' => $chatData['connectorUserId'],
						'chat_id' => $chatData['connectorChatId'],
					],
					'chat' => ['id' => $chatData['connectorChatId']],
					'user' => Queue::getUserData($actualLineId, $params['USER_ID'])
				];

				$result = (new self())->sendStatusWriting($fields);
			}
		}
	}

	return $result;
}