Думаю получится большая статья, потому что постараюсь расписать поподробнее из нескольких частей. Начнем, пожалуй с самого начала
1. Настройка передачи сообщения используя api.telegram.org
Для этого нужно создать бота, который будет присылать вам, передаваемые ему сообщения через обычную адресную строку
Чтобы создать бота в телеграме ищем отца ботов: BotFather, отправляем ему команду /start, потом /newbot, отец ботов попросит дать название боту, придумываем его так чтобы оно заканчивалось на bot, и после этого он выдаст нам токен - довольно длинный набор цифр и букв.
Этот токен копируется при нажатии на него, и уже почти сразу мы можем использовать нашего бота. Находим его по имени, опять же открываем диалог и отправляем команду /start. Можно сразу написать ему какую-нибудь фигню, чтобы потом проще было распознать id чата, с вами.
Что для этого нужно сделать? А нужно всего лишь открыть браузер и в нем в адресной строке ввести https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-то_есть_ваш_токен/getUpdates
На этом скрине уже другой ID чата потому что добавил бота в группу, и групповые ID идут с минусом. Узнал его так же командой get Updates
МСГбокс может выдавать ответ от сервера, но тут он отключен: для проверки работы скрипта лучше раскомментить
Теперь интересно сделать так чтобы, отсылалось именно то что вводится в отдельное поле, и делается это так:
Все так сложно по той простой причине что передавать русские буквы нужно в кодировке UTF-8 и для это используется javascrip функция encodeURIComponent, и эта сложная функция делает эти преобразования. Потом просто нужно добавить &URLEncode(inp) чтобы передать введенный текст
1. Настройка передачи сообщения используя api.telegram.org
Для этого нужно создать бота, который будет присылать вам, передаваемые ему сообщения через обычную адресную строку
Чтобы создать бота в телеграме ищем отца ботов: BotFather, отправляем ему команду /start, потом /newbot, отец ботов попросит дать название боту, придумываем его так чтобы оно заканчивалось на bot, и после этого он выдаст нам токен - довольно длинный набор цифр и букв.
Этот токен копируется при нажатии на него, и уже почти сразу мы можем использовать нашего бота. Находим его по имени, опять же открываем диалог и отправляем команду /start. Можно сразу написать ему какую-нибудь фигню, чтобы потом проще было распознать id чата, с вами.
Что для этого нужно сделать? А нужно всего лишь открыть браузер и в нем в адресной строке ввести https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-то_есть_ваш_токен/getUpdates
Вот эти полученные Айди чата пригодятся для того чтобы бот смог отправлять вам сообщения.
2. Передача сообщения и обход блокировки телеграм
Следующая картинка будет сразу 2 в одном - показывает как работает пересылка сообщения, и как обойти блокировку телеграм. Дело в том что в России даже с выполнением верхней команды может возникнуть затруднение по причине блокировки. Решить это можно разными способами, но поскольку у меня имеется платных хостинг для одного небольшого сайта, я решил использовать его. Для этого нужно настроить на нем прокси для api телеграма. Делаться это может разными способами, можно сделать поддомен, а можно просто как папку сделать. На самом деле эту работу делала поддержка в хостере, и я не совсем знаю как это правильно делается, но в инете нашел такую конструкцию (на моем хостинге она не пошла кстати):
location /telegramapi { proxy_set_header Host api.telegram.org; proxy_pass https://api.telegram.org; client_max_body_size 100M; }
Зеркало api телеграма конфигурация для nginx. Папка https://sample.com/telegramapi/ будет заменять адрес https://api.telegram.org
Ну а теперь к отправке сообщения, картинка:
Структура запроса такая же: https://api.telegram.org/ (здесь он заменен на прокси на моем домене) дальше идет слово /bot (без него будет ошибка) потом ваш токен/ и потом конструкция /sendMessage?chat_id=-399тут ID чата &text=ваш текст.
3. Передача сообщения через vbs
Ну вот и подошли мы к самому интересному. Передача сообщений в телеграм через vbs интересна тем что не нужно запускать браузер для запроса, метод GET передает все что нужно скриптом vbs.
Конструкция легко гуглится
Dim objHTTPSet objHTTP = CreateObject("Microsoft.XMLHTTP")Call objHTTP.Open("GET", "https://api.telegram.org/bot969.....4/sendMessage?chat_id=70...8&text=mytext", False)Call objHTTP.Send'MsgBox(objHTTP.ResponseText)
МСГбокс может выдавать ответ от сервера, но тут он отключен: для проверки работы скрипта лучше раскомментить
Теперь интересно сделать так чтобы, отсылалось именно то что вводится в отдельное поле, и делается это так:
inp = InputBox("Введи текст для передачи")
Function URLEncode(Data)
Dim CharPosition, CharCode, oScript
Set oScript = CreateObject("ScriptControl") ' New MSScriptControl.ScriptControl
oScript.Language = "JavaScript"
URLEncode = ""
Data = Replace(Data, "&", "&")
For CharPosition = 1 To Len(Data)
CharCode = AscW(Mid(Data, CharPosition, 1))
URLEncode = URLEncode & oScript.Eval("encodeURIComponent(String.fromCharCode(" & CharCode & "))")
Next
end function
Все так сложно по той простой причине что передавать русские буквы нужно в кодировке UTF-8 и для это используется javascrip функция encodeURIComponent, и эта сложная функция делает эти преобразования. Потом просто нужно добавить &URLEncode(inp) чтобы передать введенный текст
$apiToken = "my_bot_api_token";
ОтветитьУдалить$data = [
'chat_id' => '@my_channel_name',
'text' => 'Hello world!'
];
$response = file_get_contents("https://api.telegram.org/bot$apiToken/sendMessage?" . http_build_query($data) );
ОтветитьУдалитьvar xhr = new XMLHttpRequest();
xhr.open('GET', 'url', true);
xhr.send();
xhr.onreadystatechange = function() {
if (this.readyState != 4) return;
// по окончании запроса доступны:
// status, statusText
// responseText, responseXML (при content-type: text/xml)
if (this.status != 200) {
// обработать ошибку
alert( 'ошибка: ' + (this.status ? this.statusText : 'запрос не удался') );
return;
}
// alert (this.responseText); // получить результат из this.responseText или this.responseXML
}
https://kirkizh.ru/tag/Telegram/
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалить