• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/automaticaction/messages.php
  • Класс: BitrixImOpenLinesAutomaticActionMessages
  • Вызов: Messages::sendMessages
static function sendMessages($limitTime = 60, $limit = 0): void
{
	$time = new ToolsTime;

	$configs = [];
	$configsAutomaticMessage = [];
	$chats = [];
	$configManager = new Config();

	$count = 0;
	$countIterationPull = 0;
	while (
		($time->getElapsedTime() <= $limitTime)
		&& (
			empty($limit)
			|| ($count < $limit)
		)
	)
	{
		if ($countIterationPull > 10 && Loader::includeModule('pull'))
		{
			$countIterationPull = 0;

			PullEvent::send();
		}

		$select = SessionTable::getSelectFieldsPerformance('SESSION');

		$select['ID'] = 'ID';
		$select['CONFIG_AUTOMATIC_MESSAGE_ID'] = 'CONFIG_AUTOMATIC_MESSAGE_ID';

		$tasks = SessionAutomaticTasksTable::getList([
			'select' => $select,
			'filter' => [
				'<=DATE_TASK' => new DateTime()
			],
			'order' => [
				'DATE_TASK'
			],
			'limit' => 1
		]);

		if ($task = $tasks->fetch())
		{
			SessionAutomaticTasksTable::update($task['ID'], ['DATE_TASK' => (new DateTime())->add('120 SECONDS')]);

			$sessionFields = [];
			foreach ($task as $key => $value)
			{
				$newKey = str_replace('IMOPENLINES_MODEL_SESSION_AUTOMATIC_TASKS_SESSION_', '', $key);

				if ($newKey !== $key)
				{
					$sessionFields[$newKey] = $value;
				}
			}

			if (!isset($configs[$sessionFields['CONFIG_ID']]))
			{
				$configs[$sessionFields['CONFIG_ID']] = $configManager->get($sessionFields['CONFIG_ID']);

				if (empty($configsAutomaticMessage[$task['CONFIG_AUTOMATIC_MESSAGE_ID']]))
				{
					$automaticMessagesThisConfig = $configManager->getAutomaticMessage($sessionFields['CONFIG_ID']);

					foreach ($automaticMessagesThisConfig as $automaticMessage)
					{
						$configsAutomaticMessage[$automaticMessage['ID']] = $automaticMessage;
					}
				}
			}

			if (!isset($chats[$sessionFields['CHAT_ID']]))
			{
				$chats[$sessionFields['CHAT_ID']] = new Chat($sessionFields['CHAT_ID']);
			}

			$session = new Session();
			$session->loadByArray($sessionFields, $configs[$sessionFields['CONFIG_ID']], $chats[$sessionFields['CHAT_ID']]);
			$resultSendAutomaticMessage = $session->sendAutomaticMessage($task['ID'], $task['CONFIG_AUTOMATIC_MESSAGE_ID'], $configsAutomaticMessage[$task['CONFIG_AUTOMATIC_MESSAGE_ID']]);

			if ($resultSendAutomaticMessage->isSuccess())
			{
				$countIterationPull++;
			}
			$count++;
		}
		else
		{
			break;
		}
	}

	if (
		$countIterationPull > 0 &&
		Loader::includeModule('pull')
	)
	{
		PullEvent::send();
	}
}