• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/bot/supportbox.php
  • Класс: BitrixImBotBotSupportBox
  • Вызов: SupportBox::onMessageAdd
static function onMessageAdd($messageId, $messageFields)
{
	if ($messageFields['SYSTEM'] === 'Y')
	{
		return false;
	}

	// check restrictions
	if (!self::checkMembershipRestriction($messageFields))
	{
		(new CIMChat($messageFields['BOT_ID']))->deleteUser($messageFields['CHAT_ID'], $messageFields['BOT_ID']);
		return false;
	}

	if (!self::checkMessageRestriction($messageFields))
	{
		return false;
	}

	$dialogId = (string)$messageFields['FROM_USER_ID'];
	$isChat = $messageFields['CHAT_ENTITY_TYPE'] === self::CHAT_ENTITY_TYPE;
	if ($isChat)
	{
		$dialogId = 'chat'.(int)$messageFields['CHAT_ID'];
	}

	if (
		self::isEnabledQuestionFunctional()
		&& !(self::instanceDialogSession(self::getBotId(), $dialogId)->getSessionId() > 0)
		&& !self::allowAdditionalQuestion()
	)
	{
		self::markMessageUndelivered($messageId);

		$questionDisallowed = self::getQuestionDisallowMessage();
		if ($questionDisallowed)
		{
			self::sendMessage([
				'DIALOG_ID' => $dialogId,
				'MESSAGE' => $questionDisallowed,
				'KEYBOARD' => self::getQuestionResumeButton(),
				'URL_PREVIEW' => 'N',
				'SYSTEM' => 'Y',
			]);
		}

		return true;
	}

	$managedCache = Application::getInstance()->getManagedCache();
	$cacheKey = 'telemetry_sent_' . md5($messageFields['BOT_ID'], $messageFields['DIALOG_ID']);
	if (!$managedCache->read(86400, $cacheKey))
	{
		$dialogSession = self::instanceDialogSession((int)$messageFields['BOT_ID'], $messageFields['DIALOG_ID']);
		if ($dialogSession->getParam('TELEMETRY_SENT') === 'N')
		{
			self::sendTelemetry($messageFields);
			$dialogSession->update(['TELEMETRY_SENT' => 'Y']);
			$managedCache->set($cacheKey, true);
		}
	}

	return parent::onMessageAdd($messageId, $messageFields);
}