Уведомления с MODX в Telegram

Уведомления с MODX в Telegram MODX Revo
В данном уроке разберем, как настроить отправку различных уведомлений в Telegram из MODX: отправка форм, заказов, редактирование ресурсов.

Заводим себе бота

Для этого запускаем телеграмм, и ищем пользователя @botfather, выбираем его и запускаем, набрав /start и Enter (если работаете c ПК) или отправить. После чего должны прийти все доступные команды. Для создания нового бота, выбираем (/newbot).

Создание нового бота

После чего botFather попросит нас ввести название бота (Alright, a new bot. How are we going to call it? Please choose a name for your bot.). Я написал (web-revenue). Вводите свое имя и отправляете.

Потом botFather попросит ввести имя пользователя (Username). Username должен заканчиваться на Bot или _bot. Это то имя, по которому можно будет этого бота найти (в моем случае @webrev_bot). Вводите и отправляете.

После этого всего должно прийти сообщение о создании бота с токеном. Он то нам и нужен, запишите его.

Вводите свое имя и отправляете.

Дальше добавляем своего бота в контакт лист (запустите его и что-нибудь напишите).

Запускаем своего бота

Теперь нам нужно узнать ID бота, для этого, заходим по ссылке:

https://api.telegram.org/bot<bot_token>/getUpdates

где <bot_token> — тот самый токен который мы получили ранее (Use this token to access the HTTP API: токен).

Там подсматриваем свой id:

Смотрим ID бота
Записываем его рядом с токеном) Теперь у нас есть все необходимые данные чтобы можно было отправлять уведомления в телегу, например подставляя текст в ссылку:

https://api.telegram.org/bot<bot_token>/sendMessage?chat_id=<id>&text=<text>

Отправка сообщений с FormIt + AjaxForm в Telegram

Для того чтобы дублировать сообщения с AjaxForm (в связке с FormIt), на просто FormIt не тестировал, необходимо написать хук и добавить его в вызовы форм!

Создаем сниппет с именем sendMessageTelegram (это и есть хук) со следующим кодом:

<?php
$token = "<token>";
$chat_id = "<chat_id>";

$values = $hook->getValues();

// Получаем название формы
$formName = $modx->getOption('formName', $formit->config, 'form-'.$modx->resource->get('id'));

// Получаем ip адрес отправителя
$ip = $modx->getOption('REMOTE_ADDR', $_SERVER, '');

// Берем данные с формы
$name = $values['name'];
$phone = $values['phone'];
$email = $values['email'];
$message = $values['message'];

// Создаем массив данных
$arr = array(
"Название формы" => $formName,
"IP" => $ip,
"Имя" => $name);

if($phone){
	$arr["Телефон"] = $phone;
}

if($email){
	$arr["Email"] = $email;
}

if($message){
	$arr["Текст сообщения"] = $message;
}

$txt = '<strong>Заполнена форма - '.$formName."</strong>\n";
// Цикл по массиву (собираем сообщение)
foreach($arr as $key => $value) { 
     $txt .= "<strong>".$key."</strong>: ".$value." \n"; 
  }

// Отправляем сообщение посредством cURL
$website="https://api.telegram.org/bot".$token;
$params=[
    'chat_id' => $chat_id,
    'text' => $txt,
	'parse_mode' => 'html'
];
$ch = curl_init($website . '/sendMessage');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
$modx->log(MODX_LOG_LEVEL_ERROR, $result);
curl_close($ch);

//Возвращаем true – это особенность написания хуков для FormIt.
return true;

Здесь вам нужно вписать вместо <token> — свой токен, <chat_id> — id чата бота.

Где берем данные с формы и создаем массив указываются названия полей (из формы или форм) и их расшифровка.

Заполняем хук

Важно! В данном хуке использует синтаксис fenom, по этому у вас обязательно должен быть установлен компонент PdoTools и должны быть включены настройки pdotools_fenom_default и pdotools_fenom_modx.

Теперь подключаем наш хук к вызову формы, пример:

[[!AjaxForm?
                        &form=`tpl.AjaxForm.kon`
                        &snippet=`FormIt`
                        &hooks=`email,sendMessageTelegram`
                        &emailSubject=`Обратная связь с сайта [[++site_name]]`
                        &emailTo=`[[++emailsender]]`
                        &emailFrom=`info@site.ru`
                        &emailTpl=`tpl.email.o`
                        &validationErrorMessage=`В форме содержатся ошибки!`
                        &successMessage=`Спасибо за вашу заявку! В ближайшее время с Вами свяжется наш специалист.`
                    ]]

После чего можно попробовать отправить тестовое сообщение, делать это лучше в режиме инкогнито. Если все сделали правильно, форма прилетит в телегу боту.

Результат работы бота

Уведомления о заказах из MiniShop2 в Telegram

Устанавливаем с репозитория modstore бесплатно дополнение msTelegram. После чего идете в системные настройки, там есть 2 опции:

  • mstelegram_token, сюда вводим токен.
  • mstelegram_recepients, сюда вводим id чатов, кто будет получать уведомления.

И проверяем чтобы плагин был повешен на событие msOnCreateOrder

msOnCreateOrder

Все)

MODX — уведомления об обновлениях ресурсов

К примеру у вас есть проект на котором копирайтеры , журналисты или к примеру SEO специалисты наполняют сайт и вы хотите быть в курсе, что вам публикуют. Тогда создайте плагин, с именем telegram со следующим кодом:

<?php
$title= $resource->get('pagetitle');
$alias= $resource->get('uri');

if ($resource->get('published') == "1")  {

$fp=fopen("https://api.telegram.org/bot<bot_token>/sendMessage?chat_id=<id>&text={$title} http://site.info/{$alias}","r"); 
while(!feof($fp)) 
{  $content .= fread($fp,1024); } 
fclose($fp); };

Не забудьте в коде поставить свой токен и id, после чего вешаем плагин на системные события, например такие:

Системные события публикаций ресурсов и тикетов

И пользуемся) Надеюсь информация для вас является полезной!

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( 1 оценка, среднее 5 из 5 )
Web-Revenue.ru
Добавить комментарий

  1. Amsterdam

    А как отправлять сообщение от бота, например, двум пользователям, которые добавили себя бота? Перечислить id пользователей через запятую не работает..

    Ответить
    1. Алексей автор

      Если не ошибаюсь также id чата, только через знак минус) -5 к примеру)

      Ответить
  2. Amsterdam

    Хотя, id бота это первые цифры токена, сервис для его вычисления не нужен)

    Ответить
  3. Amsterdam

    Не выводит никакую информацию в браузере при попытке получить id бота https://api.telegram.org/bot/getUpdates

    Просто отдает пустой результат {«ok»:true,»result»:[]}

    Ответить
    1. Алексей автор

      Нужно https://api.telegram.org/botЗДЕСЬ_ТОКЕН/getUpdates

      Ответить
      1. Amsterdam

        Так я и делал, конечно же. Попробуйте сами, не выведет id. Но, если и вставить id нашего же бота, от имени которого отправляем сообщение, выдает следующее: {«ok»:false,»error_code»:403,»description»:»Forbidden: bot can’t send messages to bots»}

        То есть не хочет отправлять сообщение самому себе, и ботам в целом, видимо

        Ответить
  4. Илья

    Осталось найти нормальное решение для антиспама

    Ответить
    1. Алексей автор

      Попробуйте что-то из этого https://web-revenue.ru/modx-revo/kak-izbavitsya-ot-spama-s-formit-ajaxform

      Ответить