- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_rest.php
- Класс: CIMRestService
- Вызов: CIMRestService::commandAnswer
static function commandAnswer($arParams, $n, CRestServer $server)
{
if ($server->getAuthType() == BitrixRestSessionAuthAuth::AUTH_TYPE)
{
throw new BitrixRestRestException("Access for this method not allowed by session authorization.", "WRONG_AUTH_TYPE", CRestServer::STATUS_FORBIDDEN);
}
$arParams = array_change_key_case($arParams, CASE_UPPER);
$clientId = $server->getClientId();
if (!$clientId)
{
if (!empty($arParams['CLIENT_ID']))
{
$clientId = 'custom'.$arParams['CLIENT_ID'];
}
else
{
throw new BitrixRestAccessException("Client ID not specified");
}
}
$commands = BitrixImCommand::getListCache();
if (isset($arParams['COMMAND_ID']))
{
if (!isset($commands[$arParams['COMMAND_ID']]))
{
throw new BitrixRestRestException("Command not found", "COMMAND_ID_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
if ($commands[$arParams['COMMAND_ID']]['APP_ID'] != $clientId)
{
throw new BitrixRestRestException("Command was installed by another rest application", "APP_ID_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
else if (isset($arParams['COMMAND']))
{
$commandFound = false;
foreach ($commands as $command)
{
if ($command['APP_ID'] == $clientId && $command['COMMAND'] == $arParams['COMMAND'])
{
$commandFound = true;
$arParams['COMMAND_ID'] = $command['COMMAND_ID'];
break;
}
}
if (!$commandFound)
{
throw new BitrixRestRestException("Command not found", "COMMAND_ID_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
$botId = intval($commands[$arParams['COMMAND_ID']]['BOT_ID']);
$arMessageFields = Array();
$arParams['MESSAGE_ID'] = intval($arParams['MESSAGE_ID']);
if ($arParams['MESSAGE_ID'] <= 0)
{
throw new BitrixRestRestException("Message ID can't be empty", "MESSAGE_ID_EMPTY", CRestServer::STATUS_WRONG_REQUEST);
}
$arMessageFields['MESSAGE'] = trim($arParams['MESSAGE']);
if ($arMessageFields['MESSAGE'] == '')
{
throw new BitrixRestRestException("Message can't be empty", "MESSAGE_EMPTY", CRestServer::STATUS_WRONG_REQUEST);
}
$attach = CIMMessageParamAttach::GetAttachByJson($arParams['ATTACH']);
if ($attach)
{
if ($attach->IsAllowSize())
{
$arMessageFields['ATTACH'] = $attach;
}
else
{
throw new BitrixRestRestException("You have exceeded the maximum allowable size of attach", "ATTACH_OVERSIZE", CRestServer::STATUS_WRONG_REQUEST);
}
}
else if ($arParams['ATTACH'])
{
throw new BitrixRestRestException("Incorrect attach params", "ATTACH_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
if (isset($arParams['KEYBOARD']) && !empty($arParams['KEYBOARD']) && $botId > 0)
{
$keyboard = Array();
if (is_string($arParams['KEYBOARD']))
{
$arParams['KEYBOARD'] = CUtil::JsObjectToPhp($arParams['KEYBOARD']);
}
if (!isset($arParams['KEYBOARD']['BUTTONS']))
{
$keyboard['BUTTONS'] = $arParams['KEYBOARD'];
}
else
{
$keyboard = $arParams['KEYBOARD'];
}
$keyboard['BOT_ID'] = $botId;
$keyboard = BitrixImBotKeyboard::getKeyboardByJson($keyboard);
if ($keyboard)
{
if ($keyboard->isAllowSize())
{
$arMessageFields['KEYBOARD'] = $keyboard;
}
else
{
throw new BitrixRestRestException("You have exceeded the maximum allowable size of keyboard", "KEYBOARD_OVERSIZE", CRestServer::STATUS_WRONG_REQUEST);
}
}
else
{
throw new BitrixRestRestException("Incorrect keyboard params", "KEYBOARD_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
if (isset($arParams['MENU']) && !empty($arParams['MENU']))
{
$menu = Array();
if (is_string($arParams['MENU']))
{
$arParams['MENU'] = CUtil::JsObjectToPhp($arParams['MENU']);
}
if (!isset($arParams['MENU']['ITEMS']))
{
$menu['ITEMS'] = $arParams['MENU'];
}
else
{
$menu = $arParams['MENU'];
}
$menu['BOT_ID'] = $arParams['BOT_ID'];
$menu = BitrixImBotContextMenu::getByJson($menu);
if ($menu)
{
$arMessageFields['MENU'] = $menu;
}
else
{
throw new BitrixRestRestException("Incorrect menu params", "MENU_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
if (isset($arParams['SYSTEM']) && $arParams['SYSTEM'] == 'Y')
{
$arMessageFields['SYSTEM'] = 'Y';
}
if (isset($arParams['URL_PREVIEW']) && $arParams['URL_PREVIEW'] == 'N')
{
$arMessageFields['URL_PREVIEW'] = 'N';
}
$id = BitrixImCommand::addMessage(Array(
'MESSAGE_ID' => $arParams['MESSAGE_ID'],
'COMMAND_ID' => $arParams['COMMAND_ID']
), $arMessageFields);
if (!$id)
{
throw new BitrixRestRestException("Message isn't added", "WRONG_REQUEST", CRestServer::STATUS_WRONG_REQUEST);
}
return $id;
}