• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/bot/network.php
  • Класс: BitrixImBotBotNetwork
  • Вызов: Network::register
static function register(array $params = [])
{
	if (!MainLoader::includeModule('im'))
	{
		return false;
	}

	if (empty($params['CODE']))
	{
		return false;
	}

	$agentMode = isset($params['AGENT']) && $params['AGENT'] == 'Y';

	$botId = self::getNetworkBotId($params['CODE'], true);
	if ($botId)
	{
		return $agentMode ? "" : $botId;
	}

	$properties = [
		'NAME' => mb_substr($params['LINE_NAME'], 0, 50),
		'WORK_POSITION' => $params['LINE_DESC'] ? mb_substr($params['LINE_DESC'], 0, 255) : Loc::getMessage('IMBOT_NETWORK_BOT_WORK_POSITION'),
	];

	$avatarData = self::uploadAvatar($params['LINE_AVATAR']);
	if ($avatarData)
	{
		$properties['PERSONAL_PHOTO'] = $avatarData;
	}

	$botParams = [
		'APP_ID' => $params['CODE'],
		'CODE' => self::BOT_CODE.'_'.$params['CODE'],
		'MODULE_ID' => self::MODULE_ID,
		'TYPE' => ImBot::TYPE_NETWORK,
		'INSTALL_TYPE' => ImBot::INSTALL_TYPE_SILENT,
		'CLASS' => isset($params['CLASS']) ? $params['CLASS'] : static::class,
		'METHOD_MESSAGE_ADD' => 'onMessageAdd',/** @see Network::onMessageAdd */
		'METHOD_MESSAGE_UPDATE' => 'onMessageUpdate',/** @see Network::onMessageUpdate */
		'METHOD_MESSAGE_DELETE' => 'onMessageDelete',/** @see Network::onMessageDelete */
		'METHOD_BOT_DELETE' => 'onBotDelete',/** @see Network::onBotDelete */
		'METHOD_WELCOME_MESSAGE' => 'onChatStart',/** @see Network::onChatStart */
		'TEXT_PRIVATE_WELCOME_MESSAGE' => isset($params['LINE_WELCOME_MESSAGE']) ? $params['LINE_WELCOME_MESSAGE'] : '',
		'PROPERTIES' => $properties
	];

	$botId = static::getBotId();
	if ($botId > 0)
	{
		ImBot::update(['BOT_ID' => $botId], $botParams);
	}
	else
	{
		$botId = ImBot::register($botParams);
	}

	if ($botId)
	{
		$sendParams = [
			'CODE' => $params['CODE'],
			'BOT_ID' => $botId
		];
		if (isset($params['OPTIONS']) && !empty($params['OPTIONS']))
		{
			$sendParams['OPTIONS'] = $params['OPTIONS'];
		}

		$http = self::instanceHttpClient();
		$result = $http->query('RegisterBot', $sendParams, true);
		if (isset($result['error']))
		{
			self::unRegister($params['CODE'], false);
			return false;
		}

		self::setNetworkBotId($params['CODE'], $botId);

		$avatarId = ImUser::getInstance($botId)->getAvatarId();
		if ($avatarId > 0)
		{
			ImModelExternalAvatarTable::add([
				'LINK_MD5' => md5($params['LINE_AVATAR']),
				'AVATAR_ID' => $avatarId
			]);
		}

		// Add commands for BotNetwork only. Children do it by its self.
		if (__CLASS__ == static::getClassName())
		{
			self::registerCommands($botId);
			self::registerApps($botId);
		}
	}

	return $agentMode ? "" : $botId;
}