- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/widget/action.php
- Класс: BitrixImOpenLinesWidgetAction
- Вызов: Action::execute
static function execute(int $messageId, string $actionValue)
{
if (!BitrixMainLoader::includeModule('imconnector'))
{
return false;
}
if (!BitrixMainLoader::includeModule('pull'))
{
return false;
}
if (!self::checkAccess($messageId))
{
return false;
}
$buttonExists = false;
$keyboardButtons = CIMMessageParam::Get($messageId, 'KEYBOARD');
foreach ($keyboardButtons as $button)
{
if ($button['ACTION_VALUE'] === $actionValue)
{
$buttonExists = true;
break;
}
}
if (!$buttonExists)
{
return false;
}
try
{
$decodeValue = Json::decode($actionValue);
}
catch(ArgumentException $e)
{
$decodeValue = false;
}
if (!$decodeValue || !isset($decodeValue['ACTION']))
{
return false;
}
$keyboard = new Keyboard();
foreach ($keyboardButtons as $button)
{
$button['DISABLED'] = 'Y';
$keyboard->addButton($button);
}
CIMMessageParam::Set($messageId, ['KEYBOARD' => $keyboard]);
CIMMessageParam::SendPull($messageId, ['KEYBOARD']);
BitrixPullEvent::executeEvents();
$command = $decodeValue['ACTION'];
unset($decodeValue['ACTION']);
$actionValue = Json::encode($decodeValue);
/** @var BitrixImConnectorInteractiveMessageConnectorsLivechatInput $interactiveMessage */
$interactiveMessage = BitrixImConnectorInteractiveMessageInput::init('livechat');
$result = $interactiveMessage->processingCommandKeyboard($command, $actionValue);
if (!$result->isSuccess())
{
$keyboard = new Keyboard();
foreach ($keyboardButtons as $button)
{
$keyboard->addButton($button);
}
CIMMessageParam::Set($messageId, ['KEYBOARD' => $keyboard]);
CIMMessageParam::SendPull($messageId, ['KEYBOARD']);
}
return true;
}