- Модуль: imbot
- Путь к файлу: ~/bitrix/modules/imbot/lib/bot/network.php
- Класс: BitrixImBotBotNetwork
- Вызов: Network::operatorMessageAdd
static function operatorMessageAdd($messageId, $messageFields)
{
if (!MainLoader::includeModule('im'))
{
return false;
}
if (!empty($messageFields['BOT_CODE']))
{
$list = ImBot::getListCache();
foreach ($list as $botData)
{
if ($botData['TYPE'] != ImBot::TYPE_NETWORK)
{
continue;
}
if ($messageFields['BOT_CODE'] == $botData['APP_ID'])
{
$messageFields['BOT_ID'] = (int)$botData['BOT_ID'];
break;
}
}
if ((int)$messageFields['BOT_ID'] <= 0)
{
return false;
}
}
$message = [
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'MESSAGE' => $messageFields['MESSAGE'],
'PARAMS' => [],
'URL_PREVIEW' => 'Y',
];
if (!empty($messageFields['PARAMS']))
{
$message['PARAMS'] = $messageFields['PARAMS'];
}
if ($messageId > 0)
{
$message['PARAMS'][self::MESSAGE_PARAM_CONNECTOR_MID] = [$messageId];
}
if (!empty($messageFields['KEYBOARD']))
{
$message['KEYBOARD'] = self::processIncomingKeyboard($messageFields);
}
if (!empty($messageFields['ATTACH']))
{
$message['ATTACH'] = CIMMessageParamAttach::getAttachByJson($messageFields['ATTACH']);
}
if (!empty($messageFields['FILES']))
{
if (!($message['ATTACH'] instanceof CIMMessageParamAttach))
{
$message['ATTACH'] = new CIMMessageParamAttach(null, CIMMessageParamAttach::CHAT);
}
foreach ($messageFields['FILES'] as $value)
{
if ($value['type'] === 'image')
{
$message['ATTACH']->addImages([[
'NAME' => $value['name'],
'LINK' => $value['link'],
'WIDTH' => (int)$value['width'],
'HEIGHT' => (int)$value['height'],
]]);
}
else
{
$message['ATTACH']->addFiles([[
'NAME' => $value['name'],
'LINK' => $value['link'],
'SIZE' => $value['size'],
]]);
}
}
}
// url preview
if (isset($messageFields['URL_PREVIEW']) && $messageFields['URL_PREVIEW'] === 'N')
{
$message['URL_PREVIEW'] = 'N';
}
// system
if (
isset($messageFields['PARAMS'], $messageFields['PARAMS']['CLASS'])
&& $messageFields['PARAMS']['CLASS'] === 'bx-messenger-content-item-ol-output'
)
{
$message['URL_PREVIEW'] = 'N';
}
if (!empty($messageFields['USER']))
{
$message['PARAMS']['USER_ID'] = $messageFields['USER']['ID'];
$nameTemplateSite = CSite::getNameFormat(false);
$userName = CUser::formatName($nameTemplateSite, $messageFields['USER'], true, false);
if ($userName)
{
$message['PARAMS']['NAME'] = $userName;
}
$userAvatar = ImUser::uploadAvatar($messageFields['USER']['PERSONAL_PHOTO'], $messageFields['BOT_ID']);
if ($userAvatar)
{
$message['PARAMS']['AVATAR'] = $userAvatar;
}
}
// Update bot fields (name, desc, avatar, welcome mess) using data from incoming message
if (!empty($messageFields['LINE']))
{
$needUpdateBotFields = true;
$needUpdateBotAvatar = true;
$bot = ImBot::getCache($messageFields['BOT_ID']);
if ($bot['MODULE_ID'] && MainLoader::includeModule($bot['MODULE_ID']) && class_exists($bot["CLASS"]))
{
if (method_exists($bot["CLASS"], 'isNeedUpdateBotFieldsAfterNewMessage'))
{
$needUpdateBotFields = call_user_func_array([$bot["CLASS"], 'isNeedUpdateBotFieldsAfterNewMessage'], []);
}
if (method_exists($bot["CLASS"], 'isNeedUpdateBotAvatarAfterNewMessage'))
{
$needUpdateBotAvatar = call_user_func_array([$bot["CLASS"], 'isNeedUpdateBotAvatarAfterNewMessage'], []);
}
}
if ($needUpdateBotFields || $needUpdateBotAvatar)
{
$botData = ImUser::getInstance($messageFields['BOT_ID']);
if ($needUpdateBotFields)
{
$updateFields = [];
if ($messageFields['LINE']['NAME'] != htmlspecialcharsback($botData->getName()))
{
$updateFields['NAME'] = $messageFields['LINE']['NAME'];
}
if ($messageFields['LINE']['DESC'] != htmlspecialcharsback($botData->getWorkPosition()))
{
$updateFields['WORK_POSITION'] = $messageFields['LINE']['DESC'];
}
if ($messageFields['LINE']['WELCOME_MESSAGE'] != $bot['TEXT_PRIVATE_WELCOME_MESSAGE'])
{
ImBot::update(['BOT_ID' => $messageFields['BOT_ID']], [
'TEXT_PRIVATE_WELCOME_MESSAGE' => $messageFields['LINE']['WELCOME_MESSAGE']
]);
}
if (!empty($updateFields))
{
self::getCurrentUser()->update($messageFields['BOT_ID'], $updateFields);
}
}
if ($needUpdateBotAvatar && !empty($messageFields['LINE']['AVATAR']))
{
$botAvatar = ImUser::uploadAvatar($messageFields['LINE']['AVATAR'], $messageFields['BOT_ID']);
if ($botAvatar && $botData->getAvatarId() != $botAvatar)
{
$connection = MainApplication::getConnection();
$connection->query("UPDATE b_user SET PERSONAL_PHOTO = ".(int)$botAvatar." WHERE ID = ".(int)$messageFields['BOT_ID']);
}
}
}
}
$connectorMid = ImBot::addMessage(['BOT_ID' => $messageFields['BOT_ID']], $message);
if ($messageId > 0)
{
self::clientMessageReceived([
'BOT_ID' => $messageFields['BOT_ID'],
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'MESSAGE_ID' => $messageId,
'CONNECTOR_MID' => $connectorMid,
]);
}
return true;
}