- Модуль: 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;
}