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

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

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

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

, где <token> — это тот токен, который вы получили при создании бота. На данной странице вы увидите 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

Оцените статью:

Проголосовало: 71

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

  1. DATE 07 апреля 2018, 21:52 # 0
    Как указать 2 chat_id

    Написать комментарий

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

    Контакты

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


    614060, Россия, г. Пермь,
    ул. Крупской, д. 34, офис 510.
    +7 (342) 277-43-93