Достаем https соединение для бота Telegram

Дневник злостного критика-рецидивиста — жуткого зануды
Слесарь, электрик, программист…
Предыдущая | | Следующая
26 Март 2016 @ 15:30
Как бесплатно разместить бота для Telegram с WebHook  
Вступление
Для впервые читающих меня на тему мессенджера Telegram(современного аналога ICQ, клона WhatsApp)
и написания к нему ботов, замечу, что несмотря на название «бот», эта сущность не рассылает спам, не регистрируется на форумах и не подбирает пароли. Словом «бот» разработчики платформы Telegram называют дополнения к своему мессенджеру, расширяющие его функционал. Взаимодействие с этими дополнениями осуществляется так же, как и с людьми, посредством контактов. Фактически, вместо человека за псевдонимом контакта скрывается программа-бот, которая по команде пользователя выполняет те или иные действия — выдаёт прогноз погоды, выводит курсы валют и т.п. Ничего зловредного такая программа не делает и сделать не может.В названии поста присутствует ещё одно страшное слово — WebHook, которое тоже может вызвать настороженность. Нет, речь не идёт о неких недокументированных полулегальных способах программирования. Словом WebHook разработчики мессенджера называют вполне легальное действие — установку на костяк бота, размещённого на серверах Telegram, функцию обратного вызова для его основного кода, размещённого на каком-нибудь внешнем хостинге.Замечу, что есть и другой способ взаимодействие бота и его кода, в котором код сам опрашивает бота через равные промежутки времени на предмет поступления новых команд (long polling).
Но этот способ хуже по всем параметрам. Во-первых, он даёт задержку, достигающую величины заданного интервала опроса, во-вторых, постоянно работающий код прослушивания даёт нагрузку на сервер хостера, а в-третьих, работающие в фоне скрипты (демоны), как правило, запрещены на бесплатных сайтах, или действие скриптов ограничено по времени.Heroku
Итак, предыдущий мой пост был посвящён развёртыванию бота для мессенджера Telegram с облачной среды разработки IDE Cloud9 на бесплатный облачный хостинг Heroku. К сожалению, бесплатный тарифный план этого хостинга подразумевает 18-часовую работу сервера и 6-часовой простой за сутки, что вполне подходит для обучения созданию ботов, их тестирования и даже начального периода его эксплуатации среди друзей. Но, к сожалению, для широкого выхода на люди нужны другие условия, не ограничивающие бота по длительности работы.Поскольку к настоящему времени мой первый бот получил вполне законченный вид, я задумался над тем, как найти для него более подходящее пристанище. Но я не был готов платить деньги за функционирование не приносящего дохода продукта. И я стал искать другие варианты.Непременным условием для работы бота через WebHook является защищённый канал передачи данных между сервером мессенджера и сервером хостера. Защищённый канал реализуется протоколом передачи данных https
. Для установки этого протокола нужно установить на сайт, где будет работать код бота, ключи SSL
. К сожалению, почти все бесплатные хостинги не разрешают установку SSL, и позволяют работать только по http.Я стал искать хостинг, который бы, как и Heroku, предоставлял возможность использования SSL, но не имел бы ограничения по количеству рабочего времени сервера. Но поиски были тщетными. Единственное, что я ещё нашёл бесплатного с SSL — это облачный сервис Google Cloud Platform.Google Cloud Platform
Что я могу сказать про Google Cloud Platform? Это сложнейшая облачная система, внутри которой есть сервис App Engine
для создания и размещения приложений на языках Python, PHP, Go, Ruby, Java и JavaScript (Node.js). Но у неё есть минус — в бесплатном варианте файловая система сервиса закрыта для записи, то есть, сайт не может сохранять у себя файлы, а без этого у меня не получилось заставить бота отдавать пользователю изображения, скаченные с другого, внешнего ресурса.Другим недостатком применения Google Cloud Platform в качестве хостера ботов является её чрезмерная сложность, особенно когда плохо понимаешь английский язык или не находишься глубоко в теме облачной разработки приложений. Тем не менее, если алгоритм работы бота не предусматривает сохранение файлов, то этот хостинг вполне подойдёт для нашей цели, обеспечив боту круглосуточную, быструю и бесперебойную работу.Мне не удалось разобраться в развёртывании приложений из встроенной IDE сервиса. Кнопка автоматического развёртывания в бесплатном варианте не работает, а развёртывание из командной строки встроенного терминала у меня почему-то не даёт эффекта, хотя процесс завершается без ошибок, а трафик направлялся на самую свежую версию. То ли я не ту ветку проекта разворачивал, то ли что, в общем, до конца не разобрался. Но у меня прекрасно заработал вариант разворачивания сайта с моего компьютера, о чём я расскажу далее.Итак, для развёртывания приложения я скачал файлы созданного в App Engine проекта к себе на диск (с файлом настроек проекта app.yaml)
и специальную утилиту Google App Engine SDK for PHP. Утилита написана на языке Python, поэтому требует его предварительной установки на компьютер. В процессе инсталляции будет предложено скачать его по ссылке и установить. При установке Python обязательно отметьте для установки компонент «Add python.exe to Path». После установки языка можно продолжить установку утилиты.После завершения установки запускаем Google App Engine Launcher
, добавляем в него скаченный ранее, существующий в App Engine проект, и теперь можем его разворачивать кнопкой Deploy. Редактирование файлов проекта (за исключением файла app.yaml)
утилита не осуществляет, так что всё делаем в любом внешнем редакторе, и внутрь страшного App Engine можем больше не возвращаться.Если после успешного развёртывания браузер не видит изменений, проверьте внутри App Engine в разделе Compute в пункте Versions, весь ли трафик направлен на вашу последнюю версию. Все старые версии лучше удалить (на бесплатном тарифе нельзя создавать больше 10 версий).Погоняв своего бота у Google, я всё же решил продолжить поиски, поскольку не смог обойтись при пересылке файлов без их записи в файловую систему. К сожалению, других бесплатных хостингов с SSL мне не попадалось, но я набрёл на очень интересный вариант решения проблемы — CDN-сервис CloudFlare.Бесплатный хостинг + бесплатный домен 2-го уровня + бесплатная CDN
Неуёмная жажда халявы, поистине, сдвигает горы. Она же привела меня к обнаружению очень интересного бесплатного сервиса — CloudFlare. CloudFlare представляет собой сервис доставки контента с кешированием и защитой по SSL. Оказывается, можно перенаправить весь трафик к своему сайту через специальную сеть, по пути шифруя его по протоколу https, и для этого не нужны SSL-сертификаты на сайте! Таким образом, весь код бота можно разместить на любом бесплатном хостинге, и легко сделать его видимым для серверов Telegram по https!Дальнейшее изучение вопроса показало, что для работы этой системы нужно, чтобы у сайта было доменное имя 2-го уровня вида «имя.рф». Однако все бесплатные хостинги дают имена 3-го уровня типа «имя.хостинг.рф». Но они обычно позволяют линковать к сайтам внешние доменные имена. То есть, можно приобрести отдельно домен 2-го уровня и бесплатно прилинковать его к сайту на бесплатном хостинге.В принципе, домены 2-го уровня стоят относительно недорого. Так, домен в зоне .ru вообще можно купить всего за 99 рублей, и продлевать его за ту же цену каждый год. Но зачем платить, если есть халява, а она есть! Некоторые небольшие страны, желая популяризовать себя в мире, предлагают бесплатную регистрацию доменного имени 2-го уровня в доменной зоне своей страны. Так почему бы не воспользоваться этим? Это можно сделать на сайте freenom.com за несколько минут. Там предлагаются домены в зонах .tk (острова Токелау)
, .ml (Мали)
, .ga (Габона)
, .cf (Центральноафриканская Республика)
и .gq (Экваториальная Гвинея)
.Регистрировать домены бесплатно можно на срок до 12 месяцев. Через год, за 2 недели до истечения срока, вам по почте придёт напоминание о его продлении, которое производится фактически одним кликом мышки.Если вы уже имеете аккаунт на freenom.com с зарегистрированными доменными именами, но при попытке добавления нового домена возникает ошибка «Error code 0x0116a» с надписью «At this moment we are unable to register any domains or other services in this account», что в переводе означает «На данный момент мы не можем зарегистрировать любые домены или другие услуги в этом аккаунте», просто создайте другой аккаунт. Замечено, что при регистрации не все E-mail’ы могут подойти. Так, у меня каким-то образом засветились там все мои адреса на mail и yandex, и второй аккаунт я регистрировал уже на новый gmail.Итак, схема построения бесплатного размещения бота для мессенджера Telegram приблизительно определилась. Осталось её осуществить и протестировать. Итак, последовательность наших действий будет такова:
  1. Ищем бесплатный хостинг, поддерживающий языки программирования, позволяющие писать на диск. Язык JavaScript по этой причине не подойдёт, но, например, PHP сейчас поддерживается практически на любом бесплатном хостинге. Также, наш потенциальный хостер должен предоставлять возможность линковать к нашему сайту внешние доменные имена. Эта услуга тоже есть практически у любого бесплатного хостера. Регистрируемся, заходим в панель управления хостингом, ищем раздел управления доменами, и копируем оттуда имена двух первых DNS-серверов. Они нам пригодятся при перенаправлении будущего доменного имени на наш сайт.
  2. Переходим на сайт freenom.com, регистрируемся там и регистрируем желаемое доменное имя второго уровня на максимальный бесплатный срок (12 месяцев)
    . Затем переходим там в Domains -> My Domains
    , напротив нашего нового домена нажимаем кнопку Manage Domain
    , переходим в Managment Tools -> Nameservers
    , переключаем кнопку выбора в положение Use custom nameservers
    и вбиваем в два верхних поля скопированные нами ранее имена DNS-серверов хостера. Сохраняем изменения. Несмотря на предупреждение, что доменное имя заработает в течение 24 часов, обычно оно начинает работать уже в течение несколько минут.
  3. Возвращаемся к нашему хостеру, и у него в разделе управления доменами прописываем только что зарегистрированное доменное имя. Линкуем его там к папке сайта. Через несколько минут линковка хостера тоже вступает в силу, и теперь заготовку нашего нового сайта становится возможным открывать в браузере по новому доменному имени 2-го уровня. Ура!
  4. Теперь переходим на сайт CloudFlare, регистрируемся, указываем там новое доменное имя нашего сайта, и действуем далее согласно указаниям на сайте. В конце нам выдаётся два новых имени DNS-сервера, которыми надо заменить соответствующие имена на freenom.com, скопированные у нашего хостера. Замечу, что переключение на https обещается в течение 24 часов, но у меня опять же заработало уже через несколько минут.
  5. Переходим на сайт freenom.com, открываем уже знакомую нам страницу с DNS-серверами, и меняем там имена, скопированные у хостера, именами, выданными сервисом CloudFlare. Если поля имён DNS-серверов неактивны и не позволяют себя редактировать, просто переключим туда-обратно опцию выбора Use custom nameservers. Всё сохраняем и выходим. Всё!

Теперь наш новый сайт на бесплатном хостинге можно открывать по защищённому протоколу https! Замечу, что на CloudFlare нужно включить настройку SSL не в Full, а в Flexible
режим. Что означает этот режим? Он означает, что поскольку у нас настоящий сертификат SSL на сайте не установлен, то шифрование будет происходить только в промежутке от сервера Telegram до CloudFlare. Далее, от CloudFlare до нашего сайта канал останется незашифрованным. Но сервер Telegram этого не увидит и будет работать, как положено.Как уже было отмечено, служба CloudFlare является также кеширующим прокси-сервером, ускоряющим загрузку страниц сайта. Но если вы находитесь в России и используете российский хостинг, то я не думаю, что выигрыш в скорости будет заметен — ведь все данные будут идти через серверы, расположенные вне страны, поэтому возможно даже замедление открытия страниц сайта, хотя и не обязательно. Но ведь у нас другая цель, верно? Кстати, кеширование можно отключить, включив на CloudFlare режим разработчика (Development Mode)
. Это полезно, если вы вносите изменения на статических страницах вашего сайта, и хотите при обновлении сразу видеть результат в браузере. Также полезно оставить включенной функцию Always Online, которая будет отдавать запрошенные страницы из кеша даже если наш сайт вдруг временно отключится. Это предотвратит блокировку нашего бесплатного доменного имени, которая может произойти в случае его неиспользования.Теперь несколько слов о блокировках некоторых IP-адресов CloudFlare Роскомнадзором. Периодически эта тема всплывает в российских СМИ (особенно актуальна она была в 2013 году)
, но нас она не затрагивает. Серверы Telegram, как и серверы CloudFlare, расположены не в России, и блокировка последних роскомнадзором нам не страшна — они всё равно будут запрашиваться серверами Telegram извне России. Гораздо хуже, если заблокируют сам Telegram, о возможности чего тоже не раз проскакивало в СМИ. Но я не думаю, что до этого дойдёт, о чём я уже писал ранее.Заключение
Для себя я остановился на последнем варианте. Если такая конструкция будет относительно устойчивой в течение длительного периода времени, то её вполне можно будет широко использовать для полноценного бесплатного размещения ботов для Telegram. 

( 53 комментария — Оставить комментарий )

Очень часто в интернете на форумах люди задают вопрос, о том, как создать и установить бот для телеграм. В данной статье мы представим вашему вниманию все основные этапы этой процедуры.

Содержание

Требования к хостингу

Выбирая хостинг для telegram, вы должны основываться на двух главных критериях – отличная служба поддержки и надежность. Большую проблему вам создаст портал, если он постоянно будет подвисать. Также скорость службы технической поддержки должна быть высокой, иначе вам не удастся быстро решить возникшие проблемы. Мы, например, остановились на Вебача для создания бота. А о том, как все правильно сделать, мы расскажем по порядку в следующих пунктах.

Создание бота

Создание бота для telegram является первым шагом для диалогового telegram в php. Для осуществления процедуры вам потребуется выполнить несколько достаточно простых операций:

  • Найти в телеграме «BotFather» и поместить его в свой контактный лист;
  • Затем требуется посмотреть доступные команды при помощи кнопки «Помощь»;
  • Следом нужно выбрать «new bot» и по инструкции выполнить все требуемые действия.

После удачного создания telegram bot sdk на php вам будет отправлено сообщение с токеном, его необходимо сохранить, поскольку в токене прописан код доступа к боту.

Настройка домена

Настройка домена для telegram bot на php является одной из наиболее важных задач в этой процедуре. Рассмотрим, как выполнить настройку telegram bot для php на примере вебачи.

Обратите внимание! На этом домене в адресе нет комбинации «https», однако это не значит, что нам для размещения не понадобиться сертификат, поскольку без него bot невозможно разместить.

Для этих целей можно применить «cloudflare», который выдает такой сертификат. Нам потребуется перенести туда домен, сделать это можно достаточно быстро и без финансовых затрат. Для этого осуществите следующие действия:

  1. Регистрируемся на портале и во вкладке «addsite» в строке адреса домена для телеграм меняем комбинацию «ns» на нужную.
  2. Домен подключен для бота. Затем нам понадобиться перейти на панель управления своего сайта.
  3. Далее выбираем вкладку «Крипто» и пункт «ССЛ» и производим установку.
  4. Далее осуществляем проверку, все должно работать в обычном режиме.

Важно! Если на экране возникла ошибка: «HTTP Version Not Supported», то необходимо выполнить всю процедуру для приложения телеграм с самого начала для устранения оплошностей. В противном случае вы не сможете запустить бот телеграм для php.

Также после выполнения всех представленных шагов вам потребуется написать код бота. Сделать это можно воспользовавшись «SetWebhook» и библиотекой. Открыв в браузере нужную ссылку, вам системой будет отправлен ответ, что webhook для telegram bot в php установлен и теперь вы сможете получать запросы от интернет-пользователей. А как настроит эти запросы мы расскажем в следующем пункте.

Команды php для обработки сообщений и тестирование бота

Большинство инструкций в интернете для приложения телеграм предлагают для таких целей способы, в которых после каждой команды вам потребуется вбивать текст сообщения, а это не особенно удобно.

Поэтому более рационально сделать так, чтобы bot сам запоминал и писал команды, которые вы записали для telegram в php.

Для этого перед отправкой сообщений вам потребуется разместить их в хранилище, а перед приемом проверять, в наличии ли данные хранилища:

  • Первым делом опишите точку доступа к контролеру.
  • Выберите нужный метод из предложенных вариантов.

Если шаги осуществить правильно, то работать с приложением будет намного проще, интерактивней и удобней.

В данной статье мы изложили основные этапы установки приложения для телеграм в php. Вам остается их внимательно изучить и произвести действия согласно инструкции.

Привет, Miped! Не давно я начал заниматься одним моим не коммерческим проектом — бот в Телеграмм. Я не знаю, если на этом форуме кодеры, поэтому объясню. Все телеграм боты работают на API Telegram, если прочитаете его документацию, то увидите, что для корректных запросов, необходимо, что бы скрипт делал запрос из https соединения. А что бы получить это самое https соединение нужен sll сертификат (если покупать, выходит около 2к в год, как я понял). Так вот здесь я расскажу как вам получить это самое https соединение бесплатно (на один месяц — думаю для разработки в самый раз). Необходимо: Телефон (Россия, или страны СНГ) Електронная почта 1. Заходим на сайт https://beget.com/ru/free-hosting (не реклама) 2. Регистрируем себе бесплатный хост на один месяц. Сама система Beget выделит вам бессрочный домен вида (ваш_ник.beget.ru) 3. Далее следуем этой инструкции https://beget.ru/news/2016/letsencrypt (не реклама) Все подключение и оформление Sll сертификатв идет автоматически. Если при проверке Https соединения не выходит, так называемого зеленого зомка смело пишите в поддержку хостинга (у меня решили проблему за час) (Не думайте, что я нахваливаю, но поддержка у них чамая адекватная которую я встречал за все время пока хостил сайты) Далее закидываем ваш скрипт через FTP, и устанавливаем на WebHook Telegram Вот и все. Есть и другие способы получения https соединения, например на хабре писали, что можно достать через хостинг Heroku. Я использовал и его, но данная платформа выдает права только на запуск скрипт, и не дает прав на запись и удаление файлов, что было важным аспектом моего проекта.

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации