• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/bot/support24.php
  • Класс: BitrixImBotBotSupport24
  • Вызов: Support24::onStartWriting
static function onStartWriting($params)
{
	if (!self::checkTypingRestriction($params))
	{
		return false;
	}

	if (self::isActivePartnerSupport())
	{
		if (!self::isUserIntegrator($params['USER_ID']))
		{
			return false;
		}
	}

	if (self::getSupportLevel() === self::SUPPORT_LEVEL_FREE)
	{
		if (self::isActiveFreeSupport())
		{
			if (!self::isActiveFreeSupportForUser($params['USER_ID']))
			{
				return false;
			}
		}
		else if (!self::isUserIntegrator($params['USER_ID']))
		{
			return false;
		}
	}
	else if (self::getSupportLevel() === self::SUPPORT_LEVEL_PAID)
	{
		if (!self::isActivePaidSupportForUser($params['USER_ID']))
		{
			return false;
		}
	}

	if ($params['BOT_ID'] == $params['DIALOG_ID'])
	{
		$params['DIALOG_ID'] = (string)$params['USER_ID'];
	}

	$dialogId = (string)$params['DIALOG_ID'];

	// ITR menu on before any dialog starts
	if (self::hasBotMenu())
	{
		if ((int)self::instanceDialogSession(self::getBotId(), $dialogId)->getParam('CLOSED') == 1)
		{
			self::instanceDialogSession(self::getBotId(), $dialogId)->update(['MENU_STATE' => null]);
		}

		if (!self::isMenuTrackStarted($dialogId) && !self::isMenuTrackFinished($dialogId))
		{
			self::showMenu(['DIALOG_ID' => $dialogId]);
			if (!self::isMenuTrackFinished($dialogId))
			{
				return false;//continue menu travel
			}
		}
		elseif (self::isMenuTrackStarted($dialogId) && !self::isMenuTrackFinished($dialogId))
		{
			return false;//do nothing
		}
	}

	// Show greeting message on before any dialog starts
	elseif (self::allowSendStartMessage($params))
	{
		// Message for only three state: free, paid and partner.
		$message = '';
		if (self::getSupportLevel() == self::SUPPORT_LEVEL_FREE)
		{
			if (self::isUserIntegrator($params['USER_ID']))
			{
				$message = self::getMessage('DIALOG_START_INTEGRATOR', self::getSupportLevel());
			}
			else
			{
				$message = self::getMessage('DIALOG_START', self::getSupportLevel());
			}
		}
		elseif (self::getSupportLevel() == self::SUPPORT_LEVEL_PAID)
		{
			if (self::isUserIntegrator($params['USER_ID']))
			{
				$message = self::getMessage('DIALOG_START_INTEGRATOR', self::getSupportLevel());
			}
			else
			{
				$message = self::getMessage('DIALOG_START', self::getSupportLevel());
			}
		}

		if (!empty($message))
		{
			self::sendMessage([
				'DIALOG_ID' => $dialogId,
				'MESSAGE' => $message,
				'SYSTEM' => 'N',
				'URL_PREVIEW' => 'N'
			]);
			self::startDialogSession([
				'BOT_ID' => self::getBotId(),
				'DIALOG_ID' => $dialogId,
				'GREETING_SHOWN' => 'Y',
			]);
			self::stopMenuTrack($dialogId);
		}
	}

	return parent::onStartWriting($params);
}