- Saved searches
- Use saved searches to filter your results more quickly
- License
- LF3551/yandex-serverless-aiogram-bot
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Serverless телеграм бот с использованием Яндекс облака
- ВНИМАНИЕ.
- Прыжок до небес: запускаем телеграм бота на Python в serverless облаке
- Создадим бота
- Настройка Yandex.Cloud
- Cloud Functions
- API-Gateway
- Устанавливаем webhook
- Тестируем
- Сделали «эхо-бота». Что дальше?
- Тарифы Yandex.Cloud
- Полезные ссылки
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Simple Telegram bot example on aiogram framework using Yandex Cloud with Webhook (full detailed guide)
License
LF3551/yandex-serverless-aiogram-bot
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Simple Telegram bot example on aiogram framework using Yandex Cloud with Webhook
- First create a bot with telegram «BotFather» and copy TOKEN to your notes
- Go to Yandex Cloud Console
- Create Yandex Service account in Yandex Cloud with roles editor and serverless.functions.invoker
- Create Yandex Cloud Function in Yandex Cloud:
- choose programming language, in our case it will be Python
- copy and paste the code from index.py to file index.py in Yandex Cloud Function Editor
- create file requirements.txt in Yandex Cloud Function Editor
- copy and paste data from requirements.txt to file requirements.txt in Yandex Cloud Function Editor
- select below Yandex Service account you created earlier
- add variable TOKEN and put your token data there
- click Create function
- You are back to your Yandex Cloud Function view:
- check the box Public function ✅
- copy the link PUBLIC_FUNCTION_URL to your public function in notes
- You need to create Webhook:
- put your TOKEN and PUBLIC_FUNCTION_URL in template below 👇
- template: https://api.telegram.org/botTOKEN/setWebhook?url=PUBLIC_FUNCTION_URL
- put this link to your browser and press enter
- you will get this message:
- Send /start message to your bot. Everything should work 🙂
About
Simple Telegram bot example on aiogram framework using Yandex Cloud with Webhook (full detailed guide)
Serverless телеграм бот с использованием Яндекс облака
Всем привет! Меня зовут Павлов Виктор, я являюсь практикантом-преподавателем информатики в одном из колледжей России. Так вот, для студентов мы стараемся внедрить в учебный процесс новейшие технологии и «Serverless» боты являются одним из таких направлений.
Эта статья навеяна популярностью ресурса среди студентов-программистов, но я постараюсь рассказать всё максимально просто для совсем начинающих программистов. В итоге создадим простого Эхо-бота, как заготовку для различных модификаций.
P.S. Также статья навеяна отсутствием туториала на языке Python, на Nodejs есть хороший туториал.
Шаг 1: Регистрация и вход в платформу Яндекс облако
Вы можете активировать пробный период на небольшое время. Его скорее всего хватит на несколько проектов, но Serverless боты для обучения выйдут вам определенно дешевле VPS. На месяц использования хватит закинутой «сотки» на счет после истечения пробного периода.
Шаг 2: Вход в Functions. Здесь нужно в левой панели «Консоли управления» выбрать «Cloud Functions»
Шаг 3: Жмем кнопку . После чего задаем осмысленное имя функции и описание.
Например telegram-study-bot, weather-get-api и т.д.
В описании же можно указать технологии. Например language=python3.7, lib=telebot
Шаг 4: Выбираем вкладку «Редактор»
После чего у нас откроется окно управления кодом нашей функции. Здесь мы можем выбрать:
1) «Среду выполнения», в нашем случае это python3.7
я выбираю preview версию, так как в только ней можно устанавливать различные зависимости (На состояние 02.10.2020 года)
2) «Способы» отвечают за то, как будет передан код в функцию. В данной статье мы будет использовать прямой «Редактор код» в качестве наипростейшего примера.
3) «Точка входа» отвечает на то, какая функция будет принимать запрос и будет является стартом действия нашей функции, укажем её чуть позже.
4) Далее идут «Параметры», предлагаю их оставить как есть.
В самом последнем пункте можно выставить переменные окружения, например для различных токенов и другой информации, которую не следует показывать другим людям.
Шаг 5: Убеждаемся, что у нас выставлены нужные «Среда выполнения» и «Способ»
Затем кликаем на «Создать файл», назовем его main.py.
Шаг 6: У вас откроется редактор кода, где мы можем создать функцию-обработчик запроса. Назовем её handler и вставим данный код:
import json def handler(event, context): body = json.loads(event['body']) return < 'statusCode': 200, 'headers': < 'Content-Type': 'application/json' >, 'body': json.dumps(< 'method': 'sendMessage', 'chat_id': body['message']['chat']['id'], 'text': body['message']['text'] >), 'isBase64Encoded': False >
Первой строкой мы импортируем модуль «json», он нам нужен чтобы перевести body запроса из json-строки в python dict.
Функция handler у нас принимает два аргумента, первое это данные запроса, второе данные функции. Про них можно прочитать тут.
Далее в переменную body мы заносим Python словарь преобразовывая его функцией json.loads из body запроса.
Далее, по документации webhook telegram мы возвращаем нужного формата ответ, упаковывая в body, с помощью json.dumps, словарь с нужными нам данными.
ВНИМАНИЕ.
В «Точке входа» нужно указать данную функцию как начало работы скрипта. Пишем main.handler. Должно быть так:
После чего кликаем «Создать версию» и ждем, пока нас перекинет на вкладку «Обзор».
Шаг 7: Тут нас интересует «Ссылка для вызова» и переключатель «Публичная функция». Жмем переключатель и запоминаем где лежит ссылка для вызова.
Шаг 8: Создаем телеграм бота и копируем его токен. Вам нужно создать запрос типа:
https://api.telegram.org/bot/setWebHook?url=
Где bot_token — ваш токен бота из телеграма, а webhook_url это «Ссылка для вызова» из функций (шаг 7). Данный запрос следует собранным вставить в строку браузера.
https://api.telegram.org/bot1234567:AAAAAAAAAAAAAAA/setWebHook?url=https://functions.yandexcloud.net/asdjaskjdasdjasd
Шаг 9: Отправим боту «привет» и посмотрим, что в итоге получили.
Спасибо за внимание! Если вы дочитали данную статью, то я буду рад различным предложением по улучшению/дополнению/замечаниям данной статьи.
Прыжок до небес: запускаем телеграм бота на Python в serverless облаке
Одним из современных архитектурных подходов в области облачных вычислений является так называемый Serverless. Этот способ запуска приложений в облаке освобождает разработчиков от нужды администрировать сервер и заботиться о чем-то, кроме кода.
Очевидно, что для такой задачи, как телеграм бот, этот подход очень удобен.
В этой статье описаны все шаги для запуска бота в Yandex.Cloud Functions. Опоры на код я не делаю. Наша основная задача сейчас — настроить запуск в облаке.
Создадим бота
Чтобы создать телеграмм бота, нужно воспользоваться @BotFather. Для этого используйте команду /new_bot . Скопируйте токен (он будет там, где оранжевая полоса)
Настройка Yandex.Cloud
Для работы с Яндекс.Облаком перейдите на сайт https://cloud.yandex.ru/ и войдите в свой аккаунт. Если вы все сделали правильно, вы увидите рабочий дашборд.
Cloud Functions
- Перейдите в раздел Cloud Functions
- Создайте новую функцию c названием, например, python-tg-bot .
- Укажите язык python и выберите самую последнюю версию (python3.8 на момент написания этой статьи).
- В настройках функции загрузите код бота. Скачать архив можно по ссылке. Параметры укажите как на картинке. В переменные окружения добавьте поле BOT_TOKEN и вставьте токен, полученный в самом начале. После обязательно нажмите Создать версию, чтобы запустить функцию.
- Запомним идентификатор функции (первая строка)
API-Gateway
Чтобы мы смогли получить доступ к нашей функции, нужно настроить API-Gateway.
- Перейдите в раздел API-Gateway
- Создайте новый шлюз и настройте его. Скопируйте конфигурацию и замените YOUR_FUNCTION_ID на идентификатор функции, полученный ранее.
openapi: 3.0.0 info: title: for-python-tg-bot version: 1.0.0 paths: /: post: x-yc-apigateway-integration: type: cloud-functions function_id: YOUR_FUNCTION_ID operationId: tg-webhook-function
- Запомним ссылку, по которой можно вызвать нашу функцию
Устанавливаем webhook
Теперь нужно сообщить телеграму, куда отправлять информацию о новых сообщениях.
import telebot bot = telebot.TeleBot("YOUR_TOKEN") bot.remove_webhook() bot.set_webhook("YOUR_URL")
Тестируем
Сделали «эхо-бота». Что дальше?
Как говорилось в начале, такой способ запустить бота очень легок для разработчика, но что же делать, если нам нужна база данных или сложные api-запросы к другим ресурсам. Все это можно реализовать в Yandex.Cloud. Например, с помощью сервисов Yandex Database (тоже serverless) или Object Storage. Отдельные сервисы можно запустить, как отдельные функции. В следующей статье, я расскажу о том, как подключить базу данных Yandex Database к боту.
Именно возможность создавать все по кусочкам и уверенность в том, что однажды настроенный модуль будет работать всегда, отличает serverless подход от простого «давайте свалим все в одну виртуальную машину».
Тарифы Yandex.Cloud
До октября 2021 года на сервисы экосистемы бессерверных вычислений будут действовать специальные тарифы. В рамках этих тарифов определенный объем услуг не будет тарифицироваться. Объем рассчитан так, чтобы у вас была возможность разработать и запустить небольшой сервис, сайт или приложение.
- Yandex API Gateway Каждый месяц не тарифицируются первые 100 000 запросов к API-шлюзам.
- Yandex Cloud Functions Каждый месяц не тарифицируются:
- первые 1 000 000 вызовов функций;
- первые 10 ГБ×час выполнения функций.
- первые 1 000 000 операций (в единицах RU);
- первый 1 ГБ/месяц хранения данных.
Полезные ссылки