Заводим себе бота
Для этого запускаем телеграмм, и ищем пользователя @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:
Записываем его рядом с токеном) Теперь у нас есть все необходимые данные чтобы можно было отправлять уведомления в телегу, например подставляя текст в ссылку:
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
Все)
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, после чего вешаем плагин на системные события, например такие:
И пользуемся) Надеюсь информация для вас является полезной!
Спасибо за хорошую и полезную инструкцию.
Вопрос такой. После отправки FormIt + AjaxForm все приходит и на почту и в телегу, но после отправки сообщение подтверждение не появляется и в консоли 504 ошибка появляется на action.php у AjaxForm и форма остается висеть неочищенная на странице.
Пожалуйста. У меня такой проблемы не было
А как отправлять сообщение от бота, например, двум пользователям, которые добавили себя бота? Перечислить id пользователей через запятую не работает..
Если не ошибаюсь также id чата, только через знак минус) -5 к примеру)
Не помогло((
Хотя, id бота это первые цифры токена, сервис для его вычисления не нужен)
Не выводит никакую информацию в браузере при попытке получить id бота https://api.telegram.org/bot/getUpdates
Просто отдает пустой результат {«ok»:true,»result»:[]}
Нужно https://api.telegram.org/botЗДЕСЬ_ТОКЕН/getUpdates
Так я и делал, конечно же. Попробуйте сами, не выведет id. Но, если и вставить id нашего же бота, от имени которого отправляем сообщение, выдает следующее: {«ok»:false,»error_code»:403,»description»:»Forbidden: bot can’t send messages to bots»}
То есть не хочет отправлять сообщение самому себе, и ботам в целом, видимо
У меня также. В итоге удалось решить вопрос?
Я невнимательно прочитала (слова «что-нибудь написать боту» пропустила). Как только написала, ссылка заработала и удалось выяснить id.
Бывает) Как говорится дьявол кроется в деталях)
Осталось найти нормальное решение для антиспама
Попробуйте что-то из этого https://web-revenue.ru/modx-revo/kak-izbavitsya-ot-spama-s-formit-ajaxform