Хабрахабр

Телега для датасайентиста

How to deploy Python Telegram bot using Webhooks on Google Cloud Platform

Вместо предисловия

image

Сейчас даже школьники пишут, — сказала она.
— А почему бы и нет, — подумал я тогда ( — Ну, ну, — сказал бы я сейчас). — Напиши телеграм-бота.

Лена, моя бывшая коллега, и во всех отношениях не блондинка, только что закончившая магистратуру, рассуждала так. Мы сидели в Бине и за чашкой кофе обсуждали возможности тестирования идей с моделями искусственного интеллекта на близком и не очень круге друзей. Согласитесь, что устоять против такой логики “спортсменки, комсомолки и просто красавицы” в то прекрасное воскресное утро было невозможно. Создав бота, можно сэкономить силы и время на интерфейсе, сосредоточившись на ядре с машинным обучением. Телеграм-бот, значит телеграм-бот. Решено.

Это меня настолько воодушевило, что дальше названий я не пошел и занялся созданием ядра. Первым делом я залез в гугл и нашел большое число ссылок “как сделать бот за 30 минут”. Написание ядра заняло некоторое, вполне разумное, время (все же опыт кока-колой не пропить). В самом первом приближении мне предстояло написать систему обработки поисковых запросов с использованием NLP (natural language processing). Но не тут-то было. И через несколько дней я был готов к тому, чтобы за пару часов обернуть первую тестовую версию ядра в пару другую команд send-receive, запустив все это в Телеграме на благо моим друзьям.

Потратив пару дней на поиски в интернете и общение с коллегами по цеху, я понял, что очевидное не очевидно, и еще одна “инструкция” точно не повредит. Неожиданно возник целый клубок проблем. Так и появилась эта статья.

Вместо вступления. Библиотеки

Сам Телеграм ссылается на три из них: python-telegram-bot, pyTelegramBotAPI, AIOGram. Существует несколько библиотек на Python’е для телеграм-ботов. Конечно, существует еще API самого Телеграма. Ссылки на эти библиотеки и примеры на других языках можно посмотреть на сайте Телеграма здесь. И пока остановился на втором. В ходе своих экспериментов я попробовал два варианта API Телеграма и pyTelegramBotAPI.

Все очень похожи, что неудивительно. В целом впечатления от библиотек следующие. Видно, что над pyTelegramBotAPI работа продолжается, появляется новый функционал. Python-telegram-bot, мне показалось, имеет лучшую документацию из всех, хотя работа над ней прекратилась (надеюсь, ошибаюсь). В последней не понравилось, что вместо документации по webhook’ам шла отсылка на сайт Телеграма. AIOGram кажется моложе и зеленее. И окончательный выбор еще предстоит сделать. Но все течет, все меняется.

Больше к вопросу с библиотеками в этой статье мы возвращаться не будем.

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

  1. Телеграм-бот с использованием polling;
  2. Телеграм-бот с использованием webhook.

Вокруг этого и сосредоточим наше внимание. Самые неоднозначные темы с телеграм-ботами это ssl-сертификаты, webhook’и, диплоинг. Создание ssl-сертификатов, их регистрация в Телеграме и другие смежные вопросы также будут освещены. Ниже я приведу пошаговую инструкцию, которая позволит наиболее простым и надежным способом за минимальное время разместить ваш телеграм-бот на одном из лучших облачных сервисов в мире, да еще и совершенно бесплатно (по крайней мере, в первый год). При необходимости я буду давать пояснения, почему мы используем тот или иной вариант, те или иные команды.
 

Polling vs Webhook

image

Раз это имеет принципиальное значение, давайте разберемся подробнее. Если бы не противостояние polling vs webhook и некоторые сложности (отчасти надуманные) с webhook’ом, в этой статье не было бы необходимости.

Очевидно, бот это программа, которая работает на вашем компьютере или сервере. Что такое бот и как он общается с Телеграмом? И если с отправкой сообщений примерно все ясно, вариант один — послать (адрес “куда” мы знаем). А общение с Телеграмом происходит методами отправки и получения сообщений. То вариантов получения ботом сообщений от Телеграма два.

Второй — это “почтовый ящик” с ip-адресом (webhook — можно перевести как веб-ловушка), на который приходят сообщения от сервера Телеграма. Первый — это опрос (буквальный перевод слова polling) сервера Телеграма на наличие сообщений для бота.

Пусть почта (почтовое отделение) — это сервер Телеграма, а вы — это ваш бот. Самая простая аналогия с реальной почтой. И если хотите получать сообщения без задержек, то придется не ходить, а буквально бегать без передышек взад и вперед. Тогда, в первом случае (polling) вам приходится ходить на почту за корреспонденцией. Во втором случае вы сообщаете почтовому отделению свой домашний адрес и ждете корреспонденцию спокойно дома, попивая чай или покуривая бамбук. Как понимаем, жить на почте в ожидании сообщений запрещено!

Но, говоря между нами, если бегать за сообщениями мы посылаем железку с кодом, то нам должно быть все равно. Конечно, для человека первый вариант кажется самым суровым. Время от времени, почта (сервер Телеграма) то закрывается на обед, то переезжает. И так бы и было, если бы не одна проблема. И у вас в первом варианте (polling) происходит трагедия, которая в реальном мире ботов заканчивается их зависанием и сбоем.

Потому что ни вы, ни ваш бот, никуда не ходите, а просто ждете. Во втором же случае “почтового ящика” с адресом (webhook’ом) такого не происходит. И вам все равно, куда переехало почтовое отделение, потому что почту вам приносит почтальон.

ссылку выше) первый вариант кажется проще. Таким образом, по объему кода (см. Для его реализации нужно завести адрес, подтвердить его достоверность и поднять веб-сервер, на который и будут приходить сообщения от Телеграма. А второй логичнее, но тяжелее.

Например, если почта закрыта, постоять и подождать. Конечно, для первого варианта есть возможность внести в код обработку исключений. Но интернет утверждает, что все равно боты с polling’ом только для поиграться.

И сделал вариант с polling’ом, предполагая, что как-нибудь позже перепишу на webhook’и. Я сначала не поверил, что проблема настолько серьезна. На моем домашнем компе с macOS бот работал без проблем и час и два (конечно, с VPN) и не падал. Но это не сработало. Я пытался решить эту проблему разными путями и настройками, но получал лишь разный код ошибок. Но стоило мне перенести его на облачный сервер на Linux’е он не мог проработать и 20 минут. Потеряв день, пришлось взяться за webhook’и, не откладывая на потом. Селяви, это Телеграм. В конце концов, я же хотел запустить бот на сервере сейчас, а не через год.
 

Переписываем код на webhook

Не так страшен webhook как его малюют.

Сравните коды из примеров библиотеки pyTelegramBotAPI. Если у вас уже есть код бота с polling’ом, то переписать его на webhook не составит почти никакого труда. Строки 13-25 из первого примера совпадают со строками 56-67 второго примера. Вы обнаружите пересечение кода. В данном случае пример слишком простой, но главную суть он отражает. Это логический блок, отвечающий за обработку команд, сообщений и ответов.

# Handle '/start' and '/help'
@bot.message_handler(commands=['help', 'start'])
def send_welcome(message): bot.reply_to(message, """\
Hi there, I am EchoBot.
I am here to echo your kind words back to you. Just say anything nice and I'll say the exact same thing to you!\ """) # Handle all other messages with content_type 'text' (content_types defaults to ['text'])
@bot.message_handler(func=lambda message: True)
def echo_message(message): bot.reply_to(message, message.text)

копируем строки 1-55 и 70-87). Таким образом, логический блок бота нужно оставить без изменений, а остальное поменять, используя банальный copy-past кода вне логического блока из второго примера (т.е. Помимо aiohttp существуют и другие аналогичные библиотеки, примеры с которыми можно посмотреть здесь. Если вы присмотритесь к коду, который копируете, то без труда выясните, что с помощью библиотеки aiohttp ваш бот устанавливает http-сервер и начинает прослушку выделенного для этого порта, а питоновский модуль ssl отвечает за шифрование и сертификаты.

Бот с webhook’ом у нас есть. Итак. За каждым из этих значений скрывается определенная процедура с тайным смыслом.
  Осталось выложить его на сервер и запустить, попутно получив данные для заполнения пустых значений в коде API_TOKEN, WEBHOOK_HOST, WEBHOOK_PORT, WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV.

Регистрируем бот в Телеграме

Чтобы его получить заходим в Телеграм-мессенджер и подключаемся к боту @BotFather. Начнем с токена бота. В ответ BotFather предлагает нам ввести name и username нашего бота и присылает вожделенный токен вида “712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova” (конечно, у вас будет другой). Вводим команду “/newbot”. В коде присваиваем его переменной API_TOKEN.
  Сохраняем токен, никому не показываем.

Где размещать? Google Cloud Platform vs Heroku

В интернете вы встретите много примеров, где телеграм-боты размещаются на Heroku. Несколько слов о муках выбора облачного сервиса. Вы заливаете код на GitHub, а оттуда на Heroku. Heroku — это PaaS платформа (платформа как сервис). Не надо устанавливать сервер, Python и библиотеки, все уже сделано за вас. И ваш бот начинает сразу же работать. Это решение мне также рекомендовал один из моих знакомых. По крайней мере так в идеале. Но я от него отказался.

Но, если вы посмотрите внимательнее, то окажется, что этот план весьма ограничен и не позволит вам развернуть бесплатно бот, который бы работал сутки напролет. Как я понял, основным посылом для рекомендаций Heroku во многих руководствах “бот за 30 минут” является наличие на Heroku бесплатного тарифного плана.

За эту сумму за год много чего можно попробовать. В отличие от Heroku Google Cloud Platform (GCP) предлагает целый год бесплатной работы на всех сервисах в пределах 300 долларов. И, конечно, GCP тоже PaaS, полный список сервисов здесь. На мой взгляд это шикарный подарок, особенно для тех, кто занимается датасайенсом. Я выбрал более консервативный путь для большего контроля в будущем, а именно серверное решение Compute Engine на GCP.
  Есть и безсерверные решения, как и на Heroku.

Google Cloud Platform

Project, instance, static ip, port

Создаем проект и сервер

Если все сделаем правильно, то у нас появится аккаунт с суммой в 300 долларов и даже первый созданный проект. Заходим на GCP, выбираем “Get started for free” и следуем инструкциям. И затем идем на вкладку “Compute Engine/VM Instance” в боковом открывающемся меню. Выбираем этот проект или создаем другой в верхнем меню, что не сложно.

image

Вы можете выбрать конфигурацию micro и тогда это будет стоить всего 4 доллара в месяц. Нажимаем “CREATE INSTANCE” и выбираем конфигурацию сервера, например, как показано на скрине ниже. Можно и шикануть, средства будут списываться из подарка от Google в 300 долларов.

image

В итоге получаем.

image

Делаем ip-адрес статичным

224. В колонке “External IP” мы видим адрес, который вбиваем в переменную WEBHOOK_HOST в нашем боте (в данном примере это 35. 90). 231. Если вы собираетесь достаточно долго пользоваться ботом (даже, если будете менять сервер в пределах GCP), то рекомендую сделать этот ip-адрес статичным, чтобы сохранить его при переходе с одного instance на другой. На этот адрес позже мы получим ssl-сертификат. Делается это в разделе “VPC/External IP addresses”.

image

Меняем поле “Type” с “Ephemeral” на “Static”, задав имя статичному адресу, чтобы потом не запутаться, если позже у вас будет десяток ip-адресов.

image

image

image

Открываем порт

В настоящее время (июль 2019 года) Телеграм поддерживает следующие порты: 443, 80, 88, 8443. Для корректной работы webhook’а нам потребуется открыть порт, на который будет стучаться Телеграм. Мы откроем порт 8443. Подробнее вы можете посмотреть полное руководство от Телеграма по webhook’ам здесь. Осталось настроить правило брэндмаура в GCP для нашего инстанса webhook-bot. В нашем боте это значение уже присвоено переменной WEBHOOK_PORT. Идем на вкладку “VPC/Firewall rules” и нажимаем на “CREATE FIREWALL RULE”. Как это сделать?

image

И создаем правило, как это показано на скрине ниже.

image

Подключаемся к серверу, устанавливаем библиотеки

Мы завели аккаунт на GCP, создали проект, в рамках проекта создали сервер (инстанс) на базе Ubuntu 19. На этом основная настройка сервера на Google Cloud Platform завершена. 04, зарезервировали ip-адрес, открыли порт 8443.

Надеюсь, мы можем обойтись без подробного описания части с установкой Python и библиотек. Осталось немного. Поэтому кратко.

Заходим в GCP на вкладку “Compute Engine/VM Instance” и в поле “Connect” нажимаем на “SSH”.

image

Это обычная среда Ubuntu. На вашем локальном компьютере должен открыться терминал с доступом к инстансу на GCP. Дополнительно устанавливаем библиотеки, необходимые для работы нашего бота:
pip install pyTelegramBotAPI
pip install aiohttp Устанавливаем conda или virtualenv, создаем виртуальную среду и устанавливаем Python 3 с основными библиотеками.

После установки не закрывайте терминал, он нам понадобится.
 

Получение самоподписанного сертификата SSL для IP

Как сказал Михаил Лермонтов на этот счет: Надо сказать, что в интернете вокруг темы ssl сертификатов для Телеграма сплошной хоррор.

“Смешались в кучу кони, люди,
И залпы тысячи орудий
Слились в протяжный вой…”

А еще, их нельзя регистрировать на ip. Если почитать, что пишут в интернете, то получится, что если бот на webhook’ах не работает, то во всем виноваты неправильно полученные сертификаты. И даже, если он примет сертификат, то это не значит, что ваш бот будет работать, и Телеграм даже ошибку не пришлет. И вообще самоподписанные сертификаты Телеграм не принимает.

К чему я это пишу? Вот такие страшилки. Мой бот первоначально отказывался работать на webhook’ах. К тому, что эти страшилки обошлись мне в еще одни потерянные сутки, даже пришлось пропустить просмотр “Хоббита”. Но из-за страшилок выше я искал проблему не там, сосредоточившись на решении проблем с ssl-сертификатами, которых не было. Это произошло из-за моих ошибок при его размещении на сервере (тогда я этого не знал). Я нарегистрировался сертификатов на годы вперед как на доменные имена, так и на ip, как самоподписанные, так и платные, как в виде двух файлов, так и в виде четырех. Зато я приобрел бесценный опыт. Надеюсь, мне это когда-нибудь пригодится. Я узнал, какие бывают сертификаты и как делать из них цепочки.

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

бесплатно) и обойдясь всего одной строчкой без всяких сайтов. Прямо сейчас мы с вами получим ssl-сертификат самым удобным для нас путем, а именно на ip (а не на доменное имя), самоподписанные (т.е.

Зайдите в этот каталог и из него вызовите следующую команду. В терминале (который мы еще не закрыли) подготовьте отдельный каталог, в который мы сохраним файл сертификата и приватный ключ.

$ openssl req -newkey rsa:2048 -sha256 -nodes -keyout url_private.key -x509 -days 3560 -out url_cert.pem

Заполните их по примеру ниже. В ответ вы получите запросы на заполнение ряда простых полей. Но, конечно, укажите верно код своей страны, область, город, название компаний (если они есть), подставьте свой ip и свой email.

image

Один файл url_cert.pem и есть ваш сертификат, а второй приватный ключ url_private.key. В итоге вы получите два файла в каталоге, из которого запустили эту команду. Не забудьте вписать пути доступа к этим файлам вместе с наименованиями. В коде бота для них выделены переменные WEBHOOK_SSL_CERT и WEBHOOK_SSL_PRIV соответственно. Скачайте копии и сохраните их у себя на будущее.

Не закрывайте терминал.
 

Регистрация webhook в Телеграме

Регистрация webhook с самоподписанным сертификатом

Без всяких преамбул просто вбивайте в свой терминал следующую команду. Пожалуй, это самая волнительная часть “А что скажет Телеграм?”. Вставьте полученный от BotFather токен между “/bot” и “/setWebhook”) вместо YOUR-TOKEN. IP-адрес замените своим, порт 8443 не трогайте. Команду запускайте из каталога, где хранятся сертификаты.

$ curl -F "url=https://35.224.231.90:8443" -F "certificate=@url_cert.pem" https://api.telegram.org/botYOUR-TOKEN/setWebhook

Если все верно, вы получите в терминале лаконичное сообщение от Телеграма, что webhook установлен.

Регистрация webhook с “правильным” сертификатом

Если у вас не самоподписанный сертификат, то установить webhook можно следующей командой прямо из броузера.

https://api.telegram.org/botYOUR-TOKEN/setWebhook?url=https://YOUR.DOMAIN:8443/YOUR-TOKEN/

Кроме того, важно, чтобы YOUR. Обратите внимание, что ваш токен указывается два раза. Например. DOMAIN был указан в таком виде, как это в сертификате. Вместо YOUR. Я зарегистрировал домен mydreem.com, регистратор оформил мне ssl-сертификат на домен www.mydreem.com. DOMAIN указывать нужно последний www.mydreem.com.

Как проверить, установлен ли webhook?

Вы можете проверить установлен ли webhook из броузера следующей командой:

https://api.telegram.org/botYOUR-TOKEN/getWebhookInfo

В ответ вы должны получить что-то типа этого в случае, если webhook установлен и бот запущен: Это работает для всех случаев.

}

Или типа этого, когда webhook установлен, но бот не работает (не запущен):

{"ok":true,"result":{"url":"https://35.224.231.90:8443/712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova/","has_custom_certificate":true,"pending_update_count":2,"last_error_date":1564506964,"last_error_message":"Connection refused","max_connections":40}}

Как сбросить webhook?

Тогда токен остается, а сертификат меняется (webhook устанавливается заново). Иногда вам может потребоваться сменить у бота сертификат, например, в случае переезда на другой сервер (домен). В обоих случаях полезна команда, которая “сбрасывает” webhook: Или возникает необходимость запустить бот не на webhook’е, а на polling’е (если webhook установлен, polling работать не будет).

https://api.telegram.org/botYOUR-TOKEN/setWebhook

Если вы мастер игры в командной строке в десять пальцев, то для вас это не составит труда. Теперь все готово для загрузки кода на сервер и запуска бота. Если нет, то следующий раздел поможет несколько облегчить задачу загрузки/выгрузки файлов на ваш сервер и управления ими.
  И через минуту ваш бот заработает.

Cloud Shell or “Drop Dead Beautiful” (“Убийственно красива”)

Предположим, что существуют причины, для простых смертных неведомые. Мне как человеку далекому от системного администрирования тяжело понять, почему в век торжества искусственного интеллекта мы все еще общаемся с серверами командной строкой как в былые годы на ЕС/СМ — ЭВМ. Это средство позволяет, пусть и с костылями, но несколько облегчить труд непосвященных. Тогда такое явление как Cloud Shell в GCP необходимо принять с большой радостью. Хотя может и навредить, если не знать некоторые нюансы.

Вы можете легко управлять своими проектами и ресурсами, не устанавливая Google Cloud SDK или другие инструменты в своей системе (последние два предложения взяты с их странички, “легко” зачеркнуто мной). Cloud Shell предоставляет доступ к облачным ресурсам из командной строки прямо из броузера. Но основная для нас фишка не в этом. Как управлять своими проектами из командной строки можно узнать здесь. gif-ку ниже, взято с сайта google). Запустим Cloud Shell (см.

image

Теперь, если нажать на кнопку в виде карандаша, то откроется “редактор текстов версии beta”. Вы зашли в Cloud Shell.

image

0. В меню “Help/About” можно узнать, что это “theia-editor-for-cloudshell-preview 0. Я не буду под конец статьи углубляться в особенности работы с этим редактором. 1”. Это не только редактор для нескольких языков (проверял только с Python), но и файловый менеджер. Выделю только ключевые моменты. Мышкой можно переносить файлы и каталоги в пределах пространства Cloud Shell. Вы можете легко организовать обмен файлами между Cloud Shell и вашим локальным компьютером.

Но даже этого вполне достаточно, чтобы облегчить нам жизнь. Обратите внимание, я нигде выше не написал, что с помощью редактора можно редактировать и управлять файлами на вашем сервере (инстансе). А сейчас я расскажу нечто важное о Cloud Shell. И об этом немного ниже. Это необходимо понимать, чтобы не попасть в просак, как это случилось со мной.

7Гб оперативной памяти. Cloud Shell — это сервер на базе Debian с 5Гб в виде диска и 1. Cloud Shell легко можно принять за ваш инстанс, установить на него conda, создать env и запустить бота. На нем уже предустановлено некоторое ПО (включая Python). Если на webhook, то работать не будет, потому что все порты у Cloud Shell закрыты! И, если бот на polling, то он будет работать. И сколько не открывай порты на инстансе, на Cloud Shell они не появятся.

Тогда я сильно расстроился. Я по своей юношеской неопытности и невнимательности попался в эту ловушку и долго пытался понять, почему же Телеграм не видит моего бота с webhook’ом. Но жена согрела, а сыновья успокоили, и появилась эта статья.

Если вы удалите у себя все инстансы и все проекты, ваш Cloud Shell продолжит существовать еще 120 дней со всем, что вы в него закачали. Кстати, Cloud Shell существует вне пространства и времени (шутка близкая к истине). Не путайте это с резервным копирование ваших серверов.

Предупрежден, значит вооружен. Итак. И теперь мы можем поговорить об удобствах и познакомиться с парой полезных команд.

Например, если вы хотите воспользоваться Cloud Shell как терминалом для доступа к своему серверу (например, webhook-bot), то необходимо в командной строке активировать свой инстанс:

$ gcloud compute ssh webhook-bot --zone us-central1-a

Вернуться в Cloud Shell можно командой “exit”. После этого вы оказываетесь в командной строке своего сервера. Для этого в командной строке Cloud Shell (не инстанса) набираем следующую команду: Предположим вы хотите скопировать какие-то файлы из Cloud Shell на инстанс.

$ gcloud compute scp --recurse ~/telebot/my_favorite_robot.py webhook-bot:~/telebot --zone us-central1-a

В примере ниже мы копируем файл “ex1.py” из каталога “/examples” сервера “webhook-bot” в каталог “/telebot2” Cloud Shell: Если поменять источник с назначением местами, то произойдет копирование с инстанса в Cloud Shell.

$ gcloud compute scp --recurse webhook-bot:~/examples/ex1.py --zone us-central1-a ~/telebot2

Обмениваться можно не только файлами, но и целыми каталогами. Эти и другие команды по обмену файлами можно найти здесь. С локального компа мы копируем файлы нажатием пары кнопок на мышке в Cloud Shell через файловый менеджер редактора “theia-editor-for-cloudshell-preview 0. В итоге мы получаем следующую схему, облегчающую нам жизнь. 1”. 0. Если нам требуется что-то оперативно отредактировать, мы это можем сделать в том же редакторе в Cloud Shell и забросить файлы той же командой на сервер. А затем переправляем это на своей сервер (инстанс) командной строкой. Получается достаточно оперативно.

Возможно, через Cloud Storage. Верю, что существуют более элегантные и удобные во всех отношениях пути обмена и управления файлами для облачного сервера на GCP (без установки дополнительных программ на локальный компьютер). Поэтому буду признателен, если вы поделитесь своими идеями или работающими решениями в комментариях. Скажу откровенно, я потратил на поиски и эксперименты по этому вопросу всего несколько часов.

Мы загрузили файлы на сервер (инстанс). Итак. Все должно заработать. И, если вы еще не запустили бот, то пора это сделать, зайдя в терминал сервера, активировав необходимое виртуальное окружение и набрав команду по типу “python my_webhook_bot.py”. Например, так “nohup python my_webhook_bot.py &”. Чтобы бот продолжил работать при закрытии терминала, его нужно запускать в фоновом режиме. Квест, как вывести процесс из фонового режима и завершить его, я оставляю вам, если, конечно, вы еще не знаете.
 

Заключение

Все, что описано в статье, я прошел сам, и на дату написания, июль-август 2019 года, работало именно так. Надеюсь, эта статья оказалась вам полезной, помогла сэкономить время и избежать ошибок, которые сделал я при написании телеграм-бота с webhook’ами и размещением его на сервере. Я открыт для вопросов, дискуссий и буду благодарен за советы в комментариях к этой статье. Хочу выразить особую благодарность Михаилу Крутикову за совместный серфинг по просторам сервисов GCP и помощь в осознании ряда важных истин. Или пишите смело мне в Телеграм @Eduard_Lanchev.

Друзья убедили меня, что стоит. До последнего момента для меня был открыт вопрос, стоит ли давать ссылку на свой телеграм-бот. Бот в самом начале пути, и над ним предстоит еще много работать. Пообщаться с моим ботом можно по адресу @AelitaSoccerBot. Моя благодарность не будет иметь границ в разумных пределах. Поэтому пишите, если что-то не так, пишите, если хотите поделиться своим опытом или дать совет.

И в завершении хочется пожелать успеха всем ботоводам и моим коллегам датасайентистам!
 

Полезные ссылки

  1. Telegram Bot API
  2. Bot Code Examples
  3. python-telegram-bot
  4. pyTelegramBotAPI
  5. AIOGram
  6. ssl — TLS/SSL wrapper for socket objects
  7. Heroku
  8. Google Cloud Platform
  9. Google Compute Engine
  10. Marvin's Marvellous Guide to All Things Webhook
  11. Conda
  12. Virtualenv
  13. Cloud Shell
  14. The gcloud compute command-line tool
  15. Transferring files using the gcloud command-line tool
  16. Google Cloud Storage
Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть