• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/connectors/telegrambot.php
  • Класс: BitrixImConnectorConnectorsTelegramBot
  • Вызов: TelegramBot::processingInputWelcomeMessage
public function processingInputWelcomeMessage(array $message, int $line): Result
{
	$result = new Result();

	$telegramUserId = (int)$message['user']['id'];

	$userId = 0;
	$user = $this->getUserByUserCode(['id' => $telegramUserId]);
	if (!$user->isSuccess())
	{
		$addResult = $this->addUser($message['user']);
		if ($addResult->isSuccess())
		{
			$userId = (int)$addResult->getResult();
		}
		else
		{
			$result->addErrors($addResult->getErrors());
		}
	}
	else
	{
		$userId = (int)$user->getResult()['ID'];
	}
	if (!$userId)
	{
		return $result;
	}

	$fullUserCode = $this->generateChatCode($line, $telegramUserId, $userId);
	$chat = $this->getChat([
		'USER_CODE' => $fullUserCode,
		'USER_ID' => $userId,
		'CONNECTOR' => $message,
	]);
	$chatId = $chat->getData('ID');
	if (!$chatId)
	{
		return $result;
	}

	// CRM expectation
	if (
		!empty($message['ref']['source']) // start parameter
		&& strpos($message['ref']['source'], self::REF_PREFIX) === 0 // start parameter begins with "btrx" prefix
		&& Loader::includeModule('imopenlines')
	)
	{
		$session = new ImOpenLinesSession();
		$session->setChat($chat);

		$hasSession = $session->load([
			'USER_CODE' => $fullUserCode,
			'CONFIG_ID' => $line,
			'USER_ID' => $userId,
			'SOURCE' => self::TELEGRAM_BOT,
			'MODE' => ImOpenLinesSession::MODE_INPUT,
			'SKIP_CRM' => 'Y',// do not create crm objects
		]);
		if ($hasSession)
		{
			/** @var ImOpenLinesTracker $tracker */
			$tracker = ServiceLocator::getInstance()->get('ImOpenLines.Services.Tracker');
			$tracker->bindExpectationToChat($message['ref']['source'], $chat, $session);
		}
	}

	$connectorOutput = new Output(self::TELEGRAM_BOT, $line);
	$statusData = Status::getInstance(self::TELEGRAM_BOT, $line)->getData();

	$messageToSend = [
		'chatId' => $message['chat']['id'],
		'userId' => $userId,
		'lineId' => $line,
	];
	if (!$statusData['welcome_message'])
	{
		if ($statusData['eshop_url'])
		{
			return $connectorOutput->registerEshop($messageToSend);
		}

		return $result;
	}

	if (!empty($statusData['welcome_message']))
	{
		$this->sendMessage($statusData['welcome_message'], $chatId);
	}

	$connectorOutput->registerEshop($messageToSend);

	return $result;
}