четверг, 20 февраля 2020 г.

Еще один способ отправки сообщения в telegram

В прошлой серии я подробно написал о том как с помощью скрипта vbs отправлять сообщения в телегу. Сегодня будем делать то же самое, но немного другим способом.
Задача у меня стояла таким образом: имеется некая программа, которая при наступлении определенного события может запускать другие программы или в том числе и скрипты vbs либо bat. То есть, чтобы узнать о том что это событие произошло, нужно чтобы нам приходило оповещение на телефон, и телеграм для этого очень хорошо подходит. Как уже выяснилось в прошлом посту, для этого создается бот, который правильным образом настраивается. Затем пишется скрипт vbs, который отправляет get запрос на сервер api.telegram.org, в котором прописывается что и куда отправлять. Еще раз для понимания: адрес вида https://api.telegram.org/botAAA_это_токен_бота_000/sendMessage?chat_id=тут ID чата&text= тут ваш текст (все что красное нужно поставить свое)- если вставить в браузер и перейти по нему, то вам придет сообщение от бота с текстом тут ваш текст. Чтобы не открывать браузер каждый раз, можно такую ссылку вставить в скрипт, который будет посылать этот запрос (тот самый XMLHttpRequest) на сервер телеграма, и вам снова будет приходить сообщение с вашим текстом. Собственно на этот скрипт и будет ссылаться наша программа, и при наступлении заданного события скрипт запустится и отправит нам сообщение в телеграм.
Проблема в том что телеграм в России заблокирован, и перейдя по такому адресу ничего не происходит. Подключаешься через ВПН и это начинает работать. Чтобы все это работало без ВПН нужно придумывать что-то для обхода блокировок. В прошлом посте вскользь упоминалось о том, что можно на зарубежном хостинге где телеграм не запрещен, настроить что-то типа прокси и все запросы по адресу прокси будут транслироваться на сервера телеграм. Есть и другой способ, который немного проще, который и хочу описать в этом посту.

Что сделал: 
  • Зарегистрировал бесплатный PHP хостинг, добавил туда новый сайт. 
  • На сайте создал папку send, туда закинул index.php в который добавил следующий код, взятый отсюда (немного модифицировал под свои нужды)
<?php

// bot token
define('TELEGRAM_TOKEN', 'ТОКЕН БОТА');

// chat id
define('TELEGRAM_CHATID', 'ЧАТ ID');

date_default_timezone_set('Europe/Moscow');
message_to_telegram(date("d M H:i:s").' тут текст');

function message_to_telegram($text)
{
    $ch = curl_init();
    curl_setopt_array(
        $ch,
        array(
            CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage',
            CURLOPT_POST => TRUE,
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_TIMEOUT => 10,
            CURLOPT_POSTFIELDS => array(
                'chat_id' => TELEGRAM_CHATID,
                'text' => $text,
            ),
        )
    );
    curl_exec($ch);
}
  • Теперь проходишь по адресу своего сайта: https://mysite.myhosting.com/send и тебе снова приходит сообщение от бота с твоим текстом и временем перед ним, безо всяких подключений к VPN
  • Код по вызову этого адреса в скрипте немного отличается: вместо запроса GET нужен POST - может быть это не совсем правильно, но у меня заработало так.
Dim objHTTP
Set objHTTP = CreateObject("Microsoft.XMLHTTP")
Call objHTTP.Open("POST", "https://mysite.myhosting.com/send/", false)
Call objHTTP.Send

1 комментарий: