Псевдо-бот для телеграмма
Нашел такой пример. В нем все работает если вызывать его из файла site.ru/bot.php а если вставить этот код в новый снипет то MODX выдает 500 ошибку. Научите вызывать curl в снипетах и плагинах MODX
<?php
//Создадим переменную, которая будет содержать то, чтонам нужно.
$Peremenaya=«api.telegram.org/bot[ТОКЕН]/sendMessage?disable_web_page_preview=true&chat_id=[ЧАТ ИД]&text=Нам написали тикет скорее отвечайте»;
// создание нового ресурса cURL
$ch = curl_init();
// установка URL и других необходимых параметров
curl_setopt($ch, CURLOPT_URL, "$Peremenaya");
//а это что бы на страницу не выводилось
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
//это в справочнике прочтете
curl_setopt($ch, CURLOPT_HEADER, 0);
// загрузка страницы и выдача её браузеру другими словами при открытии страницы где вы этот скрипт сделаете автоматически отправится сообщение в заданный вами телеграм чат.
curl_exec($ch);
// завершение сеанса и освобождение ресурсов
curl_close($ch);
?>
<?php
//Создадим переменную, которая будет содержать то, чтонам нужно.
$Peremenaya=«api.telegram.org/bot[ТОКЕН]/sendMessage?disable_web_page_preview=true&chat_id=[ЧАТ ИД]&text=Нам написали тикет скорее отвечайте»;
// создание нового ресурса cURL
$ch = curl_init();
// установка URL и других необходимых параметров
curl_setopt($ch, CURLOPT_URL, "$Peremenaya");
//а это что бы на страницу не выводилось
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
//это в справочнике прочтете
curl_setopt($ch, CURLOPT_HEADER, 0);
// загрузка страницы и выдача её браузеру другими словами при открытии страницы где вы этот скрипт сделаете автоматически отправится сообщение в заданный вами телеграм чат.
curl_exec($ch);
// завершение сеанса и освобождение ресурсов
curl_close($ch);
?>
Комментарии: 11
на хостинге curl включён?
cURL support enabled
cURL Information 7.38.0
usr --with-curl=/opt/curlssl
cURL Information 7.38.0
usr --with-curl=/opt/curlssl
А в логах на сервере что?
В логах пусто
Ошибка 500 — internal server error, внутренняя ошибка сервера — часто возникает из-за того, что веб-сервер предотвращает выполнение скрипта в целях безопасности.В связи с этим, в логах Apache, Nginx или PHP не должно быть пусто.
Либо, предлагаю попробовать переписать использование CURL на встроенный в MODX CURL-клиент — modx.pro/help/7518/#comment-52713
Также, как вариант, попробовать запустить свой код в компоненте Console. Проверить, будет ли там работать.
Это в консоле работает а на сайте все равно 500:
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request('https://api.telegram.org/bot[ТОКЕН]/sendMessage?disable_web_page_preview=true&chat_id=[ЧАТ ИД]&text=TEST-BOT', '/', 'POST', $params = array('foo' => 'foo'));
print $result;
Хоть и выполняется в консоле, но к сообщению дописывается «Array» (например: TEST-BOTArray)
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request('https://api.telegram.org/bot[ТОКЕН]/sendMessage?disable_web_page_preview=true&chat_id=[ЧАТ ИД]&text=TEST-BOT', '/', 'POST', $params = array('foo' => 'foo'));
print $result;
Хоть и выполняется в консоле, но к сообщению дописывается «Array» (например: TEST-BOTArray)
«Array», наверняка, дописывается по причине того, что ты передаёшь массив параметров в POST запросе. Попробуй переписать на GET…
И не может всё-таки быть, чтобы в лог ничего не писалось. Может быть ты не туда смотришь?
И не может всё-таки быть, чтобы в лог ничего не писалось. Может быть ты не туда смотришь?
Сохранил в снипет с перезаписью теперь все работает и заголовок страницы отправляет. Остался один вопрос как скрыть вывод снипета?
$url = «api.telegram.org/bot[ТОКЕН]/sendMessage?disable_web_page_preview=true&chat_id=[ЧАТ ИД]&text=TEXT »;
$message = $modx->resource->get('pagetitle');
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request($url, $message);
print $result;
$url = «api.telegram.org/bot[ТОКЕН]/sendMessage?disable_web_page_preview=true&chat_id=[ЧАТ ИД]&text=TEXT »;
$message = $modx->resource->get('pagetitle');
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request($url, $message);
print $result;
Не понял вопроса.
На странице снипет выводит следующее:
{«ok»:true,«result»:{«message_id»:ID,«from»:{«id»:63901264,«first_name»:«NAME»,«username»:«NAMEBOT»},«chat»:{«id»:ID,«first_name»:«NAME»,«type»:«private»},«date»:1460450949,«text»:«TEXT \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?»}}
Этот код снипета должен же работать если его вставить в плагин?
{«ok»:true,«result»:{«message_id»:ID,«from»:{«id»:63901264,«first_name»:«NAME»,«username»:«NAMEBOT»},«chat»:{«id»:ID,«first_name»:«NAME»,«type»:«private»},«date»:1460450949,«text»:«TEXT \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?»}}
Этот код снипета должен же работать если его вставить в плагин?
Должен. А зачем print делать, если результата отработки не надо выводить? И кстати не print, а return лучше использовать.
И код, пожалуйста, в тег code оформляй, когда комментарий пишешь. Ибо невозможно читать и повторно использовать, если кому пригодится.
И код, пожалуйста, в тег code оформляй, когда комментарий пишешь. Ибо невозможно читать и повторно использовать, если кому пригодится.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.