Всем привет.
Не так давно я начал изучать Telegram API и решил написать несколько простых и полезных утилит для работы с сайтом, одной из которых я поделюсь здесь.
Речь идёт про уведомления об авторизации на сайте: когда кто-то авторизуется в панели управления сайтом, telegram-бот отправляет определённому telegram-пользователю сообщение, содержащее (по желанию) логин, пароль, адрес электронной почты, адрес админки, IP, User-Agent и пр.
Уведомление от бота
Этот функционал нужен в основном для сайтов, над которым работает несколько человек — в таком случае удобно следить за активностью пользователей.
Я не буду рассказывать о том, как создавать бота для Telegram (обращайтесь к @BotFather), получать токен и так далее, а опишу непосредственно плагин для MODX Revolution.
Порядок действий примерно такой:
  1. Регистрация бота
  2. Получение токена
  3. Создание и настройка плагина

Создание плагина

Имя, как обычно, можно указать любое. Привязать плагин нужно к событию OnManagerLogin, где будет доступна информация об авторизовавшемся пользователе (остальная информация есть в его профиле и глобальных переменных).
$apiHost = 'https://api.telegram.org/';
$token = '123456789:AAE4SAmRwSsaFSpPNCeBfy0sSK76Syd_6uU';
$chatId = '123456';

if (!function_exists('cleanSiteUrl')) {
	function cleanSiteUrl($url) {
		$url = str_replace('https://', '', $url);
		$url = str_replace('http://', '', $url);
		$url = rtrim($url, '/');
		return $url;
	}
}

switch ($modx->event->name) {
    case 'OnManagerLogin':
    	$profile = $user->getOne('Profile');
    	$managerUri = cleanSiteUrl($modx->getOption('site_url')).$modx->getOption('returnUrl', $_POST, '');
    	$message = 'Авторизация на сайте '.$managerUri."\n"
    			   .'Логин: '.$user->get('username')."\n"
    			   .'Пароль: '.$modx->getOption('password', $_POST, '')."\n"
    			   .'E-mail: '.$profile->get('email')."\n"
    			   // .'Array: '.print_r($_POST, true)."\n"
    			   // .'IP: '.$modx->getOption('REMOTE_ADDR', $_SERVER, '')."\n"
    			   // .'User-Agent: '.$modx->getOption('HTTP_USER_AGENT', $_SERVER, '')
    			   ;
    	$message = urlencode($message);
   	    $apiUri = $apiHost.'bot'.$token.'/sendMessage?chat_id='.$chatId.'&text='.$message;
	    $response = file_get_contents($apiUri);
    	break;
    default:
    	break;
}

В начале кода нужно указать токен для бота, chatId — свой id в Telegram (обращайтесь к @userinfobot), а затем просто подкорректировать информацию, которая будет приходить в уведомлении.

Решение проблем

Если вам ничего не пришло от бота, то причин несколько:
  1. Бот не сможет написать вам первым. Отбросьте гордость и напишите боту сначала сами.
  2. Неправильный токен.
  3. Неправильно указанный ваш идентификатор.
Популярность Telegram и хорошее API позволяет мутить много полезных дополнений для сайта. Предлагайте идеи и воплощайте ваши самые смелые фантазии в реальность!