• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat/EntityChat.php
  • Класс: BitrixImV2ChatEntityChat
  • Вызов: EntityChat::add
public function add(array $params, ?Context $context = null): Result
{
	$result = new Result;

	$paramsResult = $this->prepareParams($params);
	if ($paramsResult->isSuccess())
	{
		$params = $paramsResult->getResult();
	}
	else
	{
		return $result->addErrors($paramsResult->getErrors());
	}

	$chat = new static($params);
	$chat->setExtranet($chat->checkIsExtranet());
	$chat->save();

	if (!$chat->getChatId())
	{
		return $result->addError(new ChatError(ChatError::CREATION_ERROR));
	}
	else
	{
		foreach ($chat->getUserIds() as $userId)
		{
			if ($chat->getAuthorId() == $userId)
			{
				$isManager = 'Y';
			}
			else
			{
				$isManager = in_array($userId, $params['MANAGERS']) ? 'Y' : 'N';
			}

			RelationTable::add([
				'CHAT_ID' => $chat->getChatId(),
				'MESSAGE_TYPE' => $chat->getType(),
				'USER_ID' => $userId,
				'STATUS' => IM_STATUS_READ,
				'MANAGER' => $isManager,
			]);

			if (BitrixImV2EntityUserUser::getInstance($userId)->isBot())
			{
				BitrixImBot::changeChatMembers($chat->getChatId(), $userId);
				BitrixImBot::onJoinChat('chat' . $chat->getChatId(), [
					'CHAT_TYPE' => $chat->getType(),
					'MESSAGE_TYPE' => $chat->getType(),
					'BOT_ID' => $userId,
					'USER_ID' => $params['USER_ID'],
					'CHAT_AUTHOR_ID' => $chat->getAuthorId(),
					'CHAT_ENTITY_TYPE' => $chat->getEntityType(),
					'CHAT_ENTITY_ID' => $chat->getEntityId(),
					'ACCESS_HISTORY' => true,
				]);
			}
		}
	}

	$chat->addIndex();

	$result->setResult([
		'CHAT_ID' => $chat->getChatId(),
		'CHAT' => $chat,
	]);

	return $result;
}