• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/connectors/network.php
  • Класс: BitrixImConnectorConnectorsNetwork
  • Вызов: Network::processingInputCommandKeyboard
public function processingInputCommandKeyboard($params, $line): Result
{
	$result = new Result();

	if (empty($params['USER']) || empty($params['USER']['UUID']))
	{
		$result->addError(new Error(
			'User data not transmitted',
			'ERROR_IMCONNECTOR_NOT_TRANSMITTED_USER_DATA',
			__METHOD__,
			$params
		));
	}

	$userId = 0;
	if ($result->isSuccess())
	{
		$userId = $this->getUserId($params['USER'], false);

		if (empty($userId))
		{
			$result->addError(new Error(
				'Failed to find user',
				'ERROR_IMCONNECTOR_FAILED_USER',
				__METHOD__,
				$params
			));
		}
	}

	// Interactive Message
	if (
		$result->isSuccess()
		&& isset($params['COMMAND'])
		&& isset($params['COMMAND_PARAMS'])
	)
	{
		/** @var InteractiveMessageConnectorsNetworkInput $interactiveMessage */
		$interactiveMessage = InteractiveMessageInput::init('network');

		$resultProcessing = $interactiveMessage->processingCommandKeyboard($params['COMMAND'], $params['COMMAND_PARAMS']);

		if (!$resultProcessing->isSuccess())
		{
			$result->addErrors($resultProcessing->getErrors());
		}
	}
	else
	{
		$result->addError(new Error(
			'Invalid data was transmitted',
			'IMCONNECTOR_INTERACTIVE_MESSAGE_ERROR_NOT_LOAD_CORRECT_DATA',
			__METHOD__,
			['command' => $params['COMMAND'] ?? '-empty-', 'data' => $params['COMMAND_PARAMS'] ?? '-empty-']
		));
	}

	// IM commands
	if (
		$result->isSuccess()
		&& isset($params['MESSAGE_ID'])
		&& (int)$params['MESSAGE_ID'] > 0
	)
	{
		$messageId = (int)$params['MESSAGE_ID'];

		$message = ImModelMessageTable::getById($messageId)->fetch();
		if ($message)
		{
			$relations = CIMChat::getRelationById($message['CHAT_ID'], false, false, false);
			if (isset($relations[$userId]))
			{
				$chat = ImModelChatTable::getById($message['CHAT_ID'])->fetch();

				$messageFields = $params;

				$messageFields['FROM_USER_ID'] = $userId;
				$messageFields['TO_CHAT_ID'] = $message['CHAT_ID'];
				$messageFields['MESSAGE'] =  '/'.$params['COMMAND'].' '.$params['COMMAND_PARAMS'];

				$messageFields['MESSAGE_TYPE'] = $relations[$userId]['MESSAGE_TYPE'];
				$messageFields['AUTHOR_ID'] = $userId;

				$messageFields['COMMAND_CONTEXT'] = $params['COMMAND_CONTEXT'] ?? 'KEYBOARD';
				$messageFields['CHAT_ENTITY_TYPE'] = $chat['ENTITY_TYPE'];
				$messageFields['CHAT_ENTITY_ID'] = $chat['ENTITY_ID'];

				ImCommand::onCommandAdd($messageId, $messageFields);
			}
		}
	}

	$result->setResult([
		'PARAMS' => $params,
		'USER_ID' => $userId,
	]);

	return $result;
}