Создаем бота Telegram на локальном компьютере Windows — PHP и Delphi.
Задача: Запустить бота Telegram на локальном компьютере под управлением Windows (в данном случае под Windows 7) и выполнять различные процессы с использованием PHP и Delphi.
Чтобы не плодить баяны не повторяться , настоятельно рекомендую ознакомится с второй частью от @naykob, так как именно в ней расписано как завести бота через «помощника @BotFather» для дальнейшей работы с ним.
Краткая инструкция для Лиги лени.
Самое главное запомнить token для получения доступа к Telegram API:
Далее выбираем локальный сервер, мой выбор пал на Open Server Panel, так как Denwer давно не обновляется, хотя для данной задачи и он бы подошёл. Далее я буду описывать все действия на примере Open Server.
Переходим в папку с установленным Open Server и исходя из какой разрядности ваша операционная система запускаем необходимый exe.
Переходим в папку «domains» и создаем новую папку, в моём случае это «pikabu-bot.ru«, именно в ней будут располагаться файлы бота.
Маленькое отступление: Для того что бы сервер Telegram видел наш локальный сервер мы сделаем туннелирование при помощи консольного приложения Ngrok. Приложение создает безопасный общедоступный URL вида: (https://yourapp.ngrok.io) который будет ссылаться на ваш\наш локальный веб-сервер. Ngrok бесплатен хотя и имеет платные плюшки , например в виде постоянного домена, но мы справимся и без этого.
Как говорит интернет его нужно запускать с параметрами:
Но сдается мне что это не совсем правильно так как устанавливается перенаправленние на «localhost» и приходится настраивать Алиасы (об этом в конце поста), если кто подскажет как правильно, будет круто. При его запуске становиться доступна страница статистики расположенная по адресу:
http://localhost:4040/status
На ней нас интересует только полученный адрес по которому наш локальный сервер доступен из вне, одно из ограничений бесплатной версии Ngrok заключается в том что при каждом новом запуске нам выдаётся новый адрес. В файле «webhook.php» мы парсим данное значение и устанавливаем webhook c новым адресом который ведет к файлу «bot.php» на нашем локальном сервере. И все наше содержимое будет общаться с Telegram по https как он и любит.
Содержимое всех файлов и их краткое описание:
index.php
По сути заглушка которая показывает информацию о боте.
lib.php
Функция перевода символов в нижний регистр, учитывающая кириллицу для удобного анализа. Ни чего интересного.
Имя должно быть без знака @, посмотреть его можете в своем профиле, если там его нет укажите его в настройках приложения мессенджера.
Консольное приложение которое принимает в качестве параметра путь для приложения которое нужно запустить, так как если напрямую запустить приложение командой из bot.php exec(‘calc.exe’);
то все остальные команды не будут выполняться пока запущенное приложение, в данном случае калькулятор не будет завершён, есть родной способ это обойти но решил исполнить именно в таком виде так как функционал по мере необходимости можно наращивать.
В файле bot.php видно как обращаться к данному приложению:
exec(‘run.exe C:\Windows\System32\calc.exe’);
Так как в Windows параметры\текст с пробелами считается разными параметрами, в цикле соединяю все параметры в одну строку и далее выполняем её, а после приложение закрывается, тем самым у нас остаётся свободный скрипт от выполнения приложения.
Еще немного о webhook.php
Для автоматического запуска приложения Ngrok и установки webhook’а, было написанно еще одно консольное приложение start.exe которое так же принимает параметры запуска.
Настроить start.exe можно через ярлык и засунуть в автозагрузку:
Про Алиасы:
Осталось дело за малым, настроить Open Server. После запуска в области уведомлений возле часов будет иконка с флажком, кликаем по нему и переходим в настройки во вкладку «Алиасы» и перенаправляем наш созданный домен на «localhost».
Очень удобно делать подобные манипуляции с ботом на домашней машине, чем каждое исправление заливать на хостинг\сервер.
Я осознано упускал очевидные, по крайней мере для меня, вещи, но несмотря на это надеюсь что изложил достаточно доходчиво.
За ошибки прошу не пинать. Все для минусов приложил.
Писал\собирал\записывал и скриншотил — я, значит и тегу «моё» быть. Спасибо.
Источник статьи: http://pikabu.ru/story/sozdaem_bota_telegram_na_lokalnom_kompyutere_windows__php_i_delphi_5316574
Как написать бот для телеграмм delphi
Бродил тут по интернетам в поисках новых блогов о программирование на delphi и натолкнулся на блог о программирование на lazarus, там была пара статей о том как начать делать бота для Telegram. Эта тема меня раньше как то не интересовала, но тут решил попробовать написать хотя бы маленького бота что бы разобраться с принципами работы. Побродив по интернету в поисках наработок по данному вопросу, я ничего интересного не нашел, в основном это были библиотеки для работы с telegram при помощи C#, Python, PHP для delphi нашел только один какой то пробный проект на github. Поэтому решил попробовать сделать все сам с нуля так сказать.
Telegram — бесплатный кроссплатформенный мессенджер для смартфонов и других устройств, позволяющий обмениваться текстовыми сообщениями и медиафайлами различных форматов. Создан Павлом Дуровым не за долго до ухода из вконтакта. В феврале 2016 года один из создателей Telegram Павел Дуров заявил, что мессенджером пользуются уже более 100 миллионов человек, при этом сервис доставляет около 15 миллиардов сообщений ежедневно.
Что бы начать создавать бота необходимо его зарегистрировать в системе Telegram.
Для этого необходимо установить на телефон само приложение (либо воспользоваться веб версией клиента ) и добавить в контакты бота BotFather через чат с ним можно управлять своими ботами.
Сначала вводится команда /newbot Затем система предложит ввести имя для бота, если имя систему устроит она предложит указать пользовательское имя для бота с обязательным окончанием имени на bot или _bot, если все продет успешно то система вам выдать уникальный идентификатор бота, который затем можно будет использовать для работы. Он примерно такого вида 12345678:AAHOjf*****ROYb03utz*********. Более подробно можно почитать тут.
Общение с системой происходит посредством HTTPS запросов GET и POST, в качестве параметров запроса можно передавать
- URL query string
- application/x-www-form-urlencoded
- application/json (кроме загрузки файлов)
- multipart/form-data (для загрузки файлов)
Если запрос выполнен удачно то в ответ система вернет json объект
Где поле ok будет равно true.
Для работы с запросами я решил использовать набор бесплатных компонентов Synapse, а для парсинга JSON объектов использовать superobject. Поскольку работа с сервисом осуществляется посредством протокола https, то также потребуются библиотеки OpenSSL, собрать из исходников можно тут, я же просто вбил название библиотеки в поиск windows и нашел на компе несколько штук из которых выбрал наиболее последнюю версию. Выкладываю для скачивания. ссылка
Поскольку раньше мне не доводилось работать с synapse то пришлось обратиться к интернету, там нашлась подборка статей по работе с данной библиотекой.
После скачивания всего и вся я создал простой проект приложения в среде delphi.
В раздел uses добавил httpsend, ssl_openssl, superobject и начал экспериментировать.
Поскольку для работы с сервисом используется шифрованное соединение то для начала создается компонент httpsend с использованием шифрования.
Затем данные объект можно использовать для работы с запросами.
В качестве первого запроса я решил получить информацию о боте.
Выполняется это посредством запроса.
https://api.telegram.org/bot /getMe
В качестве результата сервис возвращает JSON обьект, который распарсивается при помощи объекта ISuperObject.
Затем попробовал отправить сообщение, но для его отправки необходимо сначала написать что то боту с телефона или через веб клиент иначе не получить идентификатор чата с которым бот будет общаться. Для этого используется запрос вида
https://api.telegram.org/bot /getUpdates
В запрос передаются параметры
chat_id | Идентификатор первого сообщения с которого необходимо получать данные, должен быть на единицу больше чем последнее полученное сообщение. |
offsetlimit | Ограничитель на количество возвращаемых обновлений, по умолчанию равен 100 |
timeout | Таймаут в секундах для длительных запросов |
Делается это так примерно. Поскольку у меня бот тестовый то я особо с кодом не заморачивался.
Данный код выдергивает текст и json объекта складывает в memo, а так же собирает в listview идентификаторы пользователей. Затем выделенному в listview пользователю можно отсылать сообщение.
Сообщение отсылается посредством такого запроса.
https://api.telegram.org/bot /sendMessage
В качестве параметров передаются
chat_id | Идентификатор чата то есть пользователя которому отправляется сообщение |
text | Тест сообщения |
parse_mod | если отправляет текст с html или markdown оформлением |
disable_web_page_preview | Показывать содержимое отправленных ссылок |
disable_notification | Отсутствие индикации при получение сообщения, у пользователей ios это будет сообщение без оповещение, у пользователей android это будет сообщение без звука. |
reply_to_message_id | Идентификатор сообщения на которое был произведен ответ |
reply_markup | Дополнительные пользовательские функции, подробнее тут |
Не обязательно перечислять все параметры в запросе можно использовать лишь chat_id и text
Поскольку запрос передавался методом get то пришлось обработать отправляемый текст функцией urlencode стянутой с просторов интернета
Затем я попробовал отправить фото на телефон, пришлось изрядно повозиться, поскольку раньше не доводилось работать с http запросами на низком уровне.
Сам запрос отправки фото такой.
https://api.telegram.org/bot /sendPhoto
В качестве параметров передаются
chat_id | Идентификатор чата то есть пользователя которому отправляется сообщение |
photo | Само фото, либо его идентификатор на серверах telegram |
caption | Подпись к фото |
disable_notification | Отсутствие индикации при получение сообщения, у пользователей ios это будет сообщение без оповещение, у пользователей android это будет сообщение без звука. |
reply_to_message_id | Идентификатор сообщения на которое был произведен ответ |
reply_markup | Дополнительные пользовательские функции, подробнее тут |
Опять же в качестве передаваемых параметров можно использовать не все параметры. Пришлось изрядно повозится с кодировками структурой http post запроса.
Но вот такой корявенький код получился
Разделитель для передаваемых параметров запроса
Отправка всего остального происходит аналогично вышеуказанному способу. Дальше я особо не стал заморачиваться с ботом, поскольку программу минимум я выполнил. А остальное будет дополняться по мере потребностей.
Источник статьи: http://delphi-devs.ru/index.php/telegram-bot-na-delphi.html
Telegram API
Всем привет, товарищи, давайте прольем свет уже.
Как пользоваться все таки API в Telegram.
И вообще рабочие они или нет?
Запрос не сложный, а работать не хочет.
Использовал браузер для теста и THttpClent из модуля System.Net.HttpClient
Добавлено через 2 часа 51 минуту
Похоже Telegram это большая заноза.
Открыть Skype и Telegram одновременно на одной форме
Доброго времени суток . Необходимо создать программу , которая будет одновременно открывать скайп и.
Бот telegram не может подключиться к https://api.telegram.org:443: (Java)
Здравствуйте! Возникла такая проблема при запуске бота в intelij idea ultimate программа выдает.
Telegram API
Все привет. Появилась идея создать API доступ ко своему аккаунту в телеграмм, есть ли такая.
Telegram API
Здравствуйте, для получения обновлений использую следующую конструкцию: $data =.
в документации есть раздел Getting Started
в переводе с нерусского это С чего начать
и там прямо написано, с чего надо начинать
с аутентификации и авторизации
Спасибо, ценю за внимание.
Все ссылки я уже перебрал,
и перевел уже весь telegram.
Ну нет не где конкретного примера
https://www.google.ru/search?q. i+telegram сюда ходил, брал исходники, ставил себе компонент, котрый там был, компилил дэмо. Но это все не то, там реализация на основе уже готового аккаунта. (Бот)
Моя задача, написать что то похожее на авторегистратор.
В telegram я нашел вот это
не работает.
Видимо не скачать мне весь телеграм (((
Пробовал через Web Интерфейс IE, сниффить https, там каракули в запросе
Добавлено через 8 часов 49 минут
Getting started
* Getting Started
* Security
* Optimization
* API methods
* Updates log
Creating an application
How to get your application identifier and create a new Telegram app.
* Sign up for Telegram using any application.
* Log in to your Telegram core: https://my.telegram.org.
* Go to ‘API development tools’ and fill out the form.
* You will get basic addresses as well as the api_id and api_hash parameters required for user authorization.
* For the moment each number can only have one api_id connected to it.
Все это я выполнил
User authorization
How to register a user’s phone to start using the API.
Застрял здесь
Добавлено через 24 секунды
Добавлено через 1 минуту
В документации не понятно следующее
Добавлено через 14 минут
а вот это работает
Добавлено через 8 минут
На все один ответ
Добавлено через 2 минуты
Может отсниффить офф. приложение? Посоветуйте нормальный сниффер.
Я так подозреваю есть связь, вот этого
——BEGIN RSA PUBLIC KEY——
MIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sq Dsm6
lyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS
an9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw
Efzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xay EGB+
8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aI hc3n
Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB
——END RSA PUBLIC KEY——
Добавлено через 2 часа 55 минут
давайте поразмыслим.
Создание ключа авторизации
Формат запроса описан с использованием двоичной Сериализации данных и Язык ТЛ. Все большие цифры передаются в виде строк, содержащих требуемую последовательность байтов с прямым порядком байтов. Хэш-функции, такие как SHA1, возвращающие строки (из 20 байт), которое также может быть интерпретировано как большие числа с обратным порядком байтов. Небольшое число (Тип int, долго, int128, int256), как правило, с обратным порядком байтов; однако, если они являются частью алгоритма SHA1, байты не переставить. Таким образом, если х-64 более низкого порядка бит SHA1 из строки s, то финал 8 байт 20-байтовую строку в SHA1(ы) принимаются и интерпретируются как 64-разрядное целое число.
До отправки незашифрованных сообщений (в данном случае требуются для генерации ключа авторизации), клиенту необходимо пройти (р,Q) разрешение следующим образом.Создание ключа авторизации
Формат запроса описан с использованием двоичной Сериализации данных и Язык ТЛ. Все большие цифры передаются в виде строк, содержащих требуемую последовательность байтов с прямым порядком байтов. Хэш-функции, такие как SHA1, возвращающие строки (из 20 байт), которое также может быть интерпретировано как большие числа с обратным порядком байтов. Небольшое число (Тип int, долго, int128, int256), как правило, с обратным порядком байтов; однако, если они являются частью алгоритма SHA1, байты не переставить. Таким образом, если х-64 более низкого порядка бит SHA1 из строки s, то финал 8 байт 20-байтовую строку в SHA1(ы) принимаются и интерпретируются как 64-разрядное целое число.
До отправки незашифрованных сообщений (в данном случае требуются для генерации ключа авторизации), клиенту необходимо пройти (р,q) разрешение следующим образом.
Посвящение обмен ключами ДИФФИ-хелмана
1) клиент отправляет запрос на сервер
req_pq#60469778 nonce:int128 = ResPQ
Значение случайное число выбирается случайным образом клиентом (случайных чисел) и определяет клиента в этой связи. После этого шага, это известно всем.
2) сервер отправляет ответ в виде
resPQ#05162463 nonce:int128 server_nonce:int128 pq:string server_public_key_fingerprints:Vector long = ResPQ
Здесь string PQ-это представление натурального числа (в двоичном большой Формат с прямым порядком байтов). Это число является произведением двух различных нечетных простых чисел. Как правило, PQ-это меньше или равно 2^63-1. Значение server_nonce выбран случайным образом на сервере; после этого шага, это известно всем.
server_public_key_fingerprints находится список публичных ключей RSA отпечатков пальцев (64 низкого порядка битов в формате SHA1 (server_public_key); открытый ключ представлен как голый Тип rsa_public_key н:струны:струна = RSAPublicKey, где, как обычно, Н И е-числа в обратный порядок байтов формата сериализации в виде строк байтов, после чего SHA1 используется компьютерная), полученных сервером.
Все последующие сообщения содержат пары (случайный код, server_nonce) как в виде обычного текста, и зашифрованные части, которая позволяет определить “временные сессии” — один из ключевых поколения протокол, описанный на этой странице использует один и тот же (нонсенс, server_nonce) пара. Злоумышленник не может создать параллельную сессию с сервером с такими же параметрами и использовать части сервера или клиента-зашифрованные сообщения для своих целей в такой параллельной сессии, потому что другой server_nonce будет выбран сервером для любого нового “временные сессии”.
Источник статьи: http://www.cyberforum.ru/delphi-beginners/thread2044483.html