- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_rest.php
- Класс: CIMRestService
- Вызов: CIMRestService::onBotMessageAdd
static function onBotMessageAdd($arParams, $arHandler)
{
$arParams = array_change_key_case($arParams, CASE_UPPER);
if (!$arHandler['APP_CODE'])
{
$parts = parse_url($arHandler['EVENT_HANDLER']);
parse_str($parts['query'], $query);
$query = array_change_key_case($query, CASE_UPPER);
if ($query['CLIENT_ID'])
{
$arHandler['APP_CODE'] = 'custom'.$query['CLIENT_ID'];
}
}
if (!$arHandler['APP_CODE'])
{
throw new Exception('Event is intended for another application');
}
$bots = Array();
foreach ($arParams[0] as $botData)
{
if ($botData['APP_ID'] == $arHandler['APP_CODE'])
{
$sendBotData = self::getAccessToken($arHandler['APP_ID'], $botData['BOT_ID']);
$sendBotData['AUTH'] = $sendBotData;
$sendBotData['BOT_ID'] = $botData['BOT_ID'];
$sendBotData['BOT_CODE'] = $botData['CODE'];
$bots[$botData['BOT_ID']] = $sendBotData;
if ($arParams[2]['CHAT_ENTITY_TYPE'] != 'LINES' && $botData['TYPE'] != BitrixImBot::TYPE_SUPERVISOR)
{
BitrixImBot::startWriting(Array('BOT_ID' => $botData['BOT_ID']), $arParams[2]['DIALOG_ID']);
}
}
}
if (empty($bots))
{
throw new Exception('Event is intended for another application');
}
$arParams[2]['MESSAGE_ID'] = $arParams[1];
$arParams[2]['CHAT_TYPE'] = $arParams[2]['MESSAGE_TYPE'];
$arParams[2]['LANGUAGE'] = BitrixImBot::getDefaultLanguage();
if ($arParams[2]['FROM_USER_ID'] > 0)
{
$fromUser = BitrixImUser::getInstance($arParams[2]['FROM_USER_ID'])->getFields();
$user = Array(
'ID' => $fromUser['id'],
'NAME' => $fromUser['name'],
'FIRST_NAME' => $fromUser['first_name'],
'LAST_NAME' => $fromUser['last_name'],
'WORK_POSITION' => $fromUser['work_position'],
'GENDER' => $fromUser['gender'],
'IS_BOT' => $fromUser['bot']? 'Y':'N',
'IS_CONNECTOR' => $fromUser['connector']? 'Y':'N',
'IS_NETWORK' => $fromUser['network']? 'Y':'N',
'IS_EXTRANET' => $fromUser['extranet']? 'Y':'N',
);
}
else
{
$user = Array();
}
return Array(
'BOT' => $bots,
'PARAMS' => $arParams[2],
'USER' => $user
);
}