• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/session.php
  • Класс: BitrixImOpenLinesSession
  • Вызов: Session::sendAutomaticMessage
public function sendAutomaticMessage($idTask, $idConfigTask, $configTask = []): Result
{
	$result = new Result();

	if (empty($configTask))
	{
		$configTask = ConfigAutomaticMessagesTable::getByPrimary($idConfigTask)->fetch();
	}

	if (
		$this->session['CLOSED'] !== 'Y'
		&& $this->session['STATUS'] < self::STATUS_WAIT_CLIENT
		&& !empty($configTask)
		&& $configTask['ACTIVE'] === 'Y'
		&& Loader::includeModule('imconnector')
		&& $this->isEnableSendSystemMessage()
	)
	{
		$operatorKeyboard = new BitrixImBotKeyboard();

		$connectorKeyboard = [];

		if (!empty($configTask['TEXT_BUTTON_CLOSE']))
		{
			$bottomColor = '#86AE1E';
			$textColor = '#fff';

			$operatorKeyboard->addButton([
				'TEXT' => $configTask['TEXT_BUTTON_CLOSE'],
				'ACTION' => 'SEND',
				'ACTION_VALUE' => $configTask['LONG_TEXT_BUTTON_CLOSE'],
				'BG_COLOR' => $bottomColor,
				'TEXT_COLOR' => $textColor,
				'DISPLAY' => 'LINE',
				'DISABLED' => 'Y'
			]);

			$connectorKeyboard[] = [
				'TEXT_BUTTON' => $configTask['TEXT_BUTTON_CLOSE'],
				'LONG_TEXT' => $configTask['LONG_TEXT_BUTTON_CLOSE'],
				'BOTTOM_COLOR' => $bottomColor,
				'TEXT_COLOR' => $textColor,
				'DISPLAY' => 'LINE',
				'COMMAND' => BitrixImConnectorInteractiveMessageInput::COMMAND_SESSION,
				'COMMAND_PARAMS' => [
					'COMMAND' => BitrixImConnectorInteractiveMessageInput::COMMAND_SESSION_CLOSE,
					'SESSION_ID' => $this->session['ID'],
					'CHAT_ID' => $this->session['CHAT_ID'],
					'TASK_ID' => $idTask,
					'CONFIG_TASK_ID' => $idConfigTask,
				],
			];
		}

		if (!empty($configTask['TEXT_BUTTON_CONTINUE']))
		{
			$bottomColor = '#EE322D';
			$textColor = '#fff';

			$operatorKeyboard->addButton([
				'TEXT' => $configTask['TEXT_BUTTON_CONTINUE'],
				'ACTION' => 'SEND',
				'ACTION_VALUE' => $configTask['LONG_TEXT_BUTTON_CONTINUE'],
				'BG_COLOR' => $bottomColor,
				'TEXT_COLOR' => $textColor,
				'DISPLAY' => 'LINE',
				'DISABLED' => 'Y'
			]);

			$connectorKeyboard[] = [
				'TEXT_BUTTON' => $configTask['TEXT_BUTTON_CONTINUE'],
				'LONG_TEXT' => $configTask['LONG_TEXT_BUTTON_CONTINUE'],
				'BOTTOM_COLOR' => $bottomColor,
				'TEXT_COLOR' => $textColor,
				'DISPLAY' => 'LINE',
				'COMMAND' => BitrixImConnectorInteractiveMessageInput::COMMAND_SESSION,
				'COMMAND_PARAMS' => [
					'COMMAND' => BitrixImConnectorInteractiveMessageInput::COMMAND_SESSION_CONTINUE,
					'SESSION_ID' => $this->session['ID'],
					'CHAT_ID' => $this->session['CHAT_ID'],
					'TASK_ID' => $idTask,
					'CONFIG_TASK_ID' => $idConfigTask,
				],
			];
		}

		if (!empty($configTask['TEXT_BUTTON_NEW']))
		{
			$bottomColor = '#0CA7D9';
			$textColor = '#fff';

			$operatorKeyboard->addButton([
				'TEXT' => $configTask['TEXT_BUTTON_NEW'],
				'ACTION' => 'SEND',
				'ACTION_VALUE' => $configTask['LONG_TEXT_BUTTON_NEW'],
				'BG_COLOR' => $bottomColor,
				'TEXT_COLOR' => $textColor,
				'DISPLAY' => 'LINE',
				'DISABLED' => 'Y'
			]);

			$connectorKeyboard[] = [
				'TEXT_BUTTON' => $configTask['TEXT_BUTTON_NEW'],
				'LONG_TEXT' => $configTask['LONG_TEXT_BUTTON_NEW'],
				'BOTTOM_COLOR' => $bottomColor,
				'TEXT_COLOR' => $textColor,
				'DISPLAY' => 'LINE',
				'COMMAND' => BitrixImConnectorInteractiveMessageInput::COMMAND_SESSION,
				'COMMAND_PARAMS' => [
					'COMMAND' => BitrixImConnectorInteractiveMessageInput::COMMAND_SESSION_NEW,
					'SESSION_ID' => $this->session['ID'],
					'CHAT_ID' => $this->session['CHAT_ID'],
					'TASK_ID' => $idTask,
					'CONFIG_TASK_ID' => $idConfigTask,
				],
			];
		}
		$chatEntityId = Chat::parseLinesChatEntityId($this->chat->getData('ENTITY_ID'));
		$connectorId = $chatEntityId['connectorId'] ?? '';
		InteractiveMessageOutput::getInstance($this->session['CHAT_ID'], ['connectorId' => $connectorId])->setKeyboardData($connectorKeyboard);

		Im::addMessage([
			'TO_CHAT_ID' => $this->session['CHAT_ID'],
			'MESSAGE' => $configTask['MESSAGE'],
			'SYSTEM' => 'Y',
			'IMPORTANT_CONNECTOR' => 'Y',
			'NO_SESSION_OL' => 'Y',
			'RECENT_ADD' => 'N',
			'PARAMS' => [
				'CLASS' => 'bx-messenger-content-item-ol-output',
				'IMOL_FORM' => 'offline',
				'TYPE' => 'lines',
				'COMPONENT_ID' => 'bx-imopenlines-form-offline',
				'NOTIFY' => 'N',
			],
			'KEYBOARD' => $operatorKeyboard,
		]);
	}

	$resultDelete = SessionAutomaticTasksTable::delete($idTask);
	if (!$resultDelete->isSuccess())
	{
		$result->addErrors($resultDelete->getErrors());
	}

	Debug::addSession($this,  __METHOD__, ['result' => $result]);

	return $result;
}