Отправка сообщения в Telegram в MODx Revo

Сегодня нам хотелось бы вам рассказать, как связать MODx с Telegram. Рассказ будет на основе связки AjaxForm с FormIt. Но любой может адаптировать код по своему и присылать сообщения в телеграм по любому событию в MODx Revo.

Итак, для начала нам нужно создать бота для Telegram. Как это сделать вы легко сможете найти на просторах сети. После того, как вы создали бота, вы получите token, который в дальнейшем нам понядобится. Также напишите что-нибудь вашему боту и перейдите по ссылке:

https://api.telegram.org/bot/getUpdates

, где — это тот токен, который вы получили при создании бота. На данной странице вы увидите JSON код, в котором вам необходимо найти следующую строчку: «chat»:{«id»:<chat_id>"}, где <chat_id> — это идентификатор чата, который нам понадобится в дальнейшем.

Отлично! Теперь у нас есть токен и идентификатор чата и мы можем приступить к написанию сниппета, который будет hook’ом для FormIt:

<?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'];
$subject = $values['subject'];
$text = $values['text'];

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

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

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

if($subject){
	$arr["Тема сообщения"] = $subject;
}

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

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

Хук у нас написан! Теперь вызовем его при инициализации FormIt:

[[!AjaxForm?
	&snippet=`FormIt`
	&form=`contactFormTpl`
	&hooks=`spam,email,FormItSaveForm,telegrambot`
	&emailTpl=`contactEmailTpl`
	&emailSubject=`Вам сообщение с сайта [[++site_name]]`
	&emailTo=`info@dart.agency`
	&emailFrom=`noreply@dart.agency`
	&formName=`Сообщение с сайта`
	&validate=`name:required,email:required,text:required,user:blank,username:blank,captcha:blank`
]]

Теперь вы получите не только email сообщение, но и сообщение в Telegram от бота.

telegram api php modx revo

Отправка сообщения в Telegram в MODx Revo

0 Число голосов: 3
5
5
1
3

Комментарии ()

  1. DATE 07 апреля 2018, 21:52 # 0
    Как указать 2 chat_id
    1. Андрей 22 ноября 2019, 15:42 # 0
      Вы разобрались, как отправлять в несколько чатов?
    2. Андрей 06 ноября 2019, 16:52 # 0
      Как узнать chat_id бота? Ссылка api.telegram.org/bot/getUpdates не работает.
      1. Андрей 27 ноября 2019, 13:14 # 0
        Ответа не дождался. В итоге поступил таким образом:1) Создал бота и сниппет по инструкции, как написал автор.2) Создал беседу в Телеграм и добавил туда людей.3) В $chat_id указал id этой беседы. Она будет со знаком минус, типа такого: "-123456"Готово)

        Наши клиенты

        Многие компании уже доверяют нам. Будьте в их числе!

        Хотите реализовать проект?

        Контакты

        Напишите нам - мы расскажем вам много интересного!


        Пермь, ул. Крупской 34, офис 510