• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/kpimanager.php
  • Класс: BitrixImOpenLinesKpiManager
  • Вызов: KpiManager::addMessage
public function addMessage($fields)
{
	$result = false;
	$lastMessage = $this->getLastMessage();

	if (
		$lastMessage === false
		|| !is_null($lastMessage['TIME_ANSWER'])
	)
	{
		$addFields = array(
			'SESSION_ID' => $this->sessionId,
			'MESSAGE_ID' => $fields['MESSAGE_ID'],
			'IS_FIRST_MESSAGE' => $lastMessage === false ? 'Y' : 'N'
		);

		if (!empty($fields['LINE_ID']))
		{
			$orm = ConfigTable::getById($fields['LINE_ID']);
			$config = $orm->fetch();

			if (!empty($config))
			{
				$isActiveOperator = $this->checkOperatorActivity($fields['OPERATOR_ID'], $fields['LINE_ID']);
				if ($isActiveOperator)
				{
					$addFields['TIME_STOP'] = null;
				}
				else
				{
					$addFields['TIME_STOP'] = DateTime::createFromTimestamp(time());
					$addFields['TIME_STOP_HISTORY'][] = [
						'TIME_PAUSE' => $addFields['TIME_STOP'],
						'TIME_CONTINUE' => null
					];
				}

				$sessionFields = SessionTable::getById($this->sessionId)->fetch();

				$chat = new Chat($sessionFields['CHAT_ID']);

				$sessionObject = new Session();
				$sessionObject->loadByArray($sessionFields, $config, $chat);

				$isWorktime = (new AutomaticActionWorkTime($sessionObject))->isWorkTimeLine();
				if ($isWorktime)
				{
					if ($addFields['IS_FIRST_MESSAGE'] == 'Y')
					{
						if (intval($config['KPI_FIRST_ANSWER_TIME']) > 0)
						{
							$addFields['TIME_EXPIRED'] = DateTime::createFromTimestamp(time() + $config['KPI_FIRST_ANSWER_TIME']);
						}
					}
					else
					{
						if (intval($config['KPI_FURTHER_ANSWER_TIME']) > 0)
						{
							$addFields['TIME_EXPIRED'] = DateTime::createFromTimestamp(time() + $config['KPI_FURTHER_ANSWER_TIME']);
						}
					}
				}
			}
		}

		$result = SessionKpiMessagesTable::add($addFields);
	}

	return $result;
}