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