• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/service/notifier.php
  • Класс: BitrixImBotServiceNotifier
  • Вызов: Notifier::notifyChannel
static function notifyChannel(array $params): Result
{
	$result = new Result;

	/**
	 * @global CMain $APPLICATION
	 */
	global $APPLICATION;

	$classSupport = self::detectSupportBot();

	$chatId = self::getChannel();
	if (!$chatId)
	{
		$result = self::createChannel();
		if ($result->isSuccess())
		{
			$chatId = $result->getData()['chatId'];
		}
	}
	else
	{
		self::checkChannelMembers($chatId);
	}

	if ($result->isSuccess())
	{
		$messageFields = [
			'MESSAGE_TYPE' => IM_MESSAGE_CHAT,
			'TO_CHAT_ID' => $chatId,
			'FROM_USER_ID' => $classSupport::getBotId(),
			'PARAMS' => [
				ImBotBotNetwork::MESSAGE_PARAM_ALLOW_QUOTE => 'Y',
			],
			'MESSAGE' => $params['MESSAGE'],
			'URL_PREVIEW' => $params['URL_PREVIEW'] === 'N' ? 'N': 'Y',
		];

		if (!empty($params['ATTACH']))
		{
			$messageFields['ATTACH'] = CIMMessageParamAttach::getAttachByJson($params['ATTACH']);
		}

		// feedback button
		if (!empty($params['KEYBOARD']))
		{
			if (!isset($params['KEYBOARD']['BUTTONS']))
			{
				$keyboard['BUTTONS'] = $params['KEYBOARD'];
			}
			else
			{
				$keyboard = $params['KEYBOARD'];
			}
			$keyboard['BOT_ID'] = $classSupport::getBotId();
			$messageFields['KEYBOARD'] =
				ImBotKeyboard::getKeyboardByJson($keyboard);
		}
		else
		{
			$feedback = $classSupport::getMessage('NOTIFIER_FEEDBACK');
			if (!$feedback)
			{
				$feedback = Loc::getMessage('IMBOT_NOTIFIER_FEEDBACK_SUPPORT');
			}
			$keyboard = new ImBotKeyboard($classSupport::getBotId());
			$keyboard->addButton([
				'DISPLAY' => "LINE",
				'TEXT' => $feedback,
				'BG_COLOR' => "#29619b",
				'TEXT_COLOR' => "#fff",
				'BLOCK' => "Y",
				'COMMAND' => $classSupport::COMMAND_START_DIALOG,
			]);
			$messageFields['KEYBOARD'] = $keyboard;
		}

		$messageId = CIMMessenger::add($messageFields);
		if (!$messageId)
		{
			/**
			 * @var CApplicationException $error
			 */
			$error = $APPLICATION->getException();
			if ($error)
			{
				$result->addError(new MainError($error->getString(), $error->getId()));
			}
			else
			{
				$result->addError(new MainError(
					'Cannot send message to admin group',
					'ERROR_DELIVER_NOTIFICATION'
				));
			}
		}
	}

	return $result;
}