Как сделать Telegram-бота для проверки аптайма своего сервиса на Python (ч.2 алертинг)
Всем привет, в предыдущей статье я начал описывать мой опыт разработки Python телеграм-бота для проверки работоспособности и мониторинга моего сервиса, расположенного на удаленом сервере. Если в двух словах, то когда делаешь какой-нибудь пет-проект, да и в некоторых рабочих задачах, бывает хочется иметь всю текущую информацию по состоянию системы под рукой (особенно мне нравится возможность видеть все и управлять через телеграм бота), при этом не хочется тратить на разработку много времени.
В предыдущей части мы рассматривали способ получить мгновенные метрики по запросу. В этой части мы будем делать простой алертинг, то есть получение сообщения в боте, когда в системе начались сбои. А в следующей третьей части разберем еще случай сбора аналитики и получения онлайн графиков.
Как и в прошлой части пример будет основан на реальной задаче, но я буду помечать те места в коде, которые вы можете поменять на свою логику, чтобы основную часть примера можно было переиспользовать.
В данном случае мне необходимо получить алерт в виде сообщения в телеграм боте в том случае, если интересующая меня нода потеряла связь с сетью (или по какой-то другой причине), но ее последний засинхронизированный блок отстает от последнего блока сети.
Как и в прошлый раз сначала необходимо настроить виртуальное окружение:
cd ~ virtualenv -p python3.8 up_env # создаем окружение source ~/up_env/bin/activate # активируем окружение
и устанавливить необходимые зависимости:
pip install python-telegram-bot pip install "python-telegram-bot[job-queue]" --pre pip install --upgrade python-telegram-bot==13.6.0 # код написан во времена до версии 20, поэтому здесь версия указывается явно pip install numpy # нужна для функции получения медианного значения pip install web3 # нужна для запросов к нодам (замените на то, что необходимо вам)
Файл с функциями functions.py не претерпевает в данном случае изменений и остается таким же, как в предыдущей части:
# импортируем необходимые библиотеки import numpy as np from web3 import Web3 import multiprocessing # Вспомогательная функция, которая проверяет отдельно одну ноду def get_last_block_once(rpc): try: w3 = Web3(Web3.HTTPProvider(rpc)) block_number = w3.eth.block_number if isinstance(block_number, int): return block_number else: return None except Exception as e: print(f' - ') return None # Основная функция проверки состояния сервиса, которая будет вызываться # из основного потока бота def check_service(): # заранее подготовленный список референсных нод # для любой сети его можно найти на сайте https://chainlist.org/ list_of_public_nodes = [ 'https://polygon.llamarpc.com', 'https://polygon.rpc.blxrbdn.com', 'https://polygon.blockpi.network/v1/rpc/public', 'https://polygon-mainnet.public.blastapi.io', 'https://rpc-mainnet.matic.quiknode.pro', 'https://polygon-bor.publicnode.com', 'https://poly-rpc.gateway.pokt.network', 'https://rpc.ankr.com/polygon', 'https://polygon-rpc.com' ] # параллельная обработка запросов ко всем нодам with multiprocessing.Pool(processes=len(list_of_public_nodes)) as pool: results = pool.map(get_last_block_once, list_of_public_nodes) last_blocks = [b for b in results if b is not None and isinstance(b, int)] # определени максимального и мединного значения текущего блока med_val = int(np.median(last_blocks)) max_val = int(np.max(last_blocks)) # определение количества нод с максимальным и медианным значением med_support = np.sum([1 for x in last_blocks if x == med_val]) max_support = np.sum([1 for x in last_blocks if x == max_val]) return max_val, max_support, med_val, med_support
Теперь рассмотрим основной файл бота alert_bot.py. Так как в разных задачах может потребоваться только алертинг или только запрос мгновенных значений, то я не собираю бота, который может все и сразу, а наоборот разделяю этот функционал на разные маленькие примеры. В данном случае код основного файла бота будет включать в себя только алертинг, но вы можете объединить все, что необходимо в один бот.
Итак, импортируем библиотеки и функции из файла выше и задаем необходимые константы:
import telegram from telegram.ext import Updater from functions import get_last_block_once, check_service # Адрес ноды, состояние которой я отслеживаю (тоже публичная нода в данном случае) OBJECT_OF_CHECKING = 'https://polygon-mainnet.chainstacklabs.com' # Порог для подсвечивания критического отставания THRESHOLD = 5 # ID вашего аккаунта в телеграм. Проще всего узнать через бота @chatIDrobot USER_ID = 123456789
Далее описываем функцию, которая будет вызвана регулярно по таймеру:
def check_for_alert(context): # Вызов основной функции проверки состояния сети max_val, max_support, med_val, med_support = check_service() # Вызов функции проверки состояния проверяемой ноды last_block = get_last_block_once(OBJECT_OF_CHECKING) # Формирование сообщения для отправки в телеграм message = "" # Информация о состоянии нод во внешней сети (медиана, максимум и количество нод) message += f"Public median block number (on ) RPCs\n" message += f"Public maximum block number + (on ) PRCs\n" # данная переменная будет хранить решение, отправлять ли алерт # в случае, если нода отстает или не ответила to_send = False # проверка состояния if last_block is not None: out_text = str(last_block - med_val) if last_block - med_val < 0 else '+' + str(last_block - med_val) # Сравнение с порогом if abs(last_block - med_val) >THRESHOLD: to_send = True message += f"The node block number shift ⚠️ ⚠️" else: message += f"The node block number shift " else: # Обработка исключения, если нода не ответила to_send = True message += f"The node has ⚠️not responded⚠️" # срабатываение алерта и отправка сообщения пользователю if to_send: context.bot.send_message(chat_id=USER_ID, text=message, parse_mode="HTML")
Далее остается только дописать часть, в которой инициализируется бот и к нему подключается регулярная «джоба», проверяющая состояние ноды:
# Токен вашего телеграм бота, полученный через BotFather token = "xxx" # создание экземпляра бота bot = telegram.Bot(token=token) updater = Updater(token=token, use_context=True) dispatcher = updater.dispatcher job_queue = updater.job_queue # Здесь переменной interval (в секундах) задается периодичность # запуска проверки состояния - в данном случае каждые 10 минут job_queue.run_repeating(check_for_alert, interval=10.0 * 60.0, first=0.0) # запуск бота updater.start_polling()
Далее код можно запустить на любом VPS сервере через:
source ~/up_env/bin/activate python uptime_bot.py
Предварительно настроив systemd unit-файл.
В итоге работа бота будет выглядеть следующим образом — если алерт сработал, я получаю сообщение с информацией о проблеме:

В следующей статье я опишу, как можно реализовать оставшуюся задачу:
- По запросу получить графики, как все происходило в течение последних X часов. Она будет состоять из двух частей: скрипта для логирования запускаемого по cron’у и бота, собирающего графики из логов по запросу пользователя
Исходный код проекта доступен в репозитории на GitHub. Если этот туториал показался вам полезным, не стесняйтесь поставить звезду на гитхабе, мне будет приятно
Чат-боты в Telegram на Python и Aiogram: пишем первого бота
Большой гайд по работе с Aiogram на примере эхо‑бота — чат‑бота, который повторяет за пользователем его фразы. Весь код — внутри статьи.


Иллюстрация: Polina Vari для Skillbox Media

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.
Компании используют чат-ботов в Telegram для разных задач: рассылают новости о текущих акциях, принимают платежи или даже организуют службы технической поддержки. Обычные пользователи тоже применяют их для своих бытовых нужд — ведут учёт личных финансов или оформляют посты в социальных сетях.
Благодаря этой статье вы научитесь с нуля создавать чат-ботов с помощью Python и библиотеки Aiogram. Мы напишем эхо-бота, который отвечает на сообщения пользователя точно такими же сообщениями. Это первая часть урока по Aiogram — во второй части мы добавим боту кнопки и новые фичи.
Содержание
- Библиотеки для создания бота
- Краткое описание Aiogram
- Создаём эхо-бота
- Шаг 1. Устанавливаем Python
- Шаг 2. Создаём виртуальное окружение
- Шаг 3. Создаём бота
- Шаг 4. Подключаем Aiogram
- Шаг 5. Пишем код для эхо-бота
- Шаг 6. Запускаем бота и проверяем работу
- Что дальше?
Библиотеки для создания бота
Для создания телеграм-ботов на Python существует несколько десятков библиотек. Они различаются популярностью, размером комьюнити и функциональностью. Рассмотрим самые популярные.
Aiogram. Современная библиотека, набирающая популярность: многие чат-боты написаны на ней. В этой и последующих статьях цикла мы будем работать именно с Aiogram. Библиотека реализует асинхронное выполнение кода, что позволяет не останавливать работу бота в ожидании ответа пользователя. Кроме того, у Aiogram есть подробная документация и большое русскоязычное комьюнити.
Python-telegram-bot. Одна из первых библиотек для создания ботов. Отличается от Aiogram синхронным подходом к работе, то есть при ожидании ответа от пользователя выполнение кода останавливается.
TeleBot. Библиотека для создания простых ботов, позволяющая работать с асинхронным и синхронным подходом на выбор. Подходит для небольших проектов. Подробнее можно узнать в документации.
Что нужно знать об Aiogram перед написанием кода
Перед тем как приступить к написанию нашего бота, остановимся подробнее на одной технической особенности Aiogram.
Как уже было сказано ранее, одно из главных достоинств библиотеки — полная асинхронность. Она использует синтаксис async/await, который позволяет программе выполнять несколько задач одновременно и эффективно управлять потоком выполнения.
Вот простой пример функции, использующей механизм async/await:
Другой плюс Aiogram — в большом наборе инструментов и хуков, которые можно использовать для добавления дополнительных функций и настроек бота. Библиотека обеспечивает полный доступ ко всем возможностям Telegram API, включая отправку и получение сообщений, управление клавиатурой, обработку медиафайлов (фотографий, видео, документов) и многое другое.
Вот несколько полезных источников, которые помогут разобраться в библиотеке и следить за её обновлениями:
- официальная документация,
- репозиторий библиотеки на GitHub,
- русскоязычный телеграм-чат, посвящённый Aiogram,
- англоязычный чат, посвящённый Aiogram,
- канал с новостями библиотеки,
- тестовый бот на основе Aiogram.
Создаём эхо-бота
Переходим к созданию телеграм-бота. Потренируемся на простом примере — создадим эхо-бота, который отвечает на сообщения пользователя его же словами.
Для этого нам необходимо:
- установить Python и настроить виртуальное окружение;
- зарегистрировать бота в специальном телеграм-канале @BotFather;
- установить библиотеку Aiogram;
- написать код эхо-бота, связав его по API с Telegram.
Шаг 1
Устанавливаем Python
На macOS или Linux. Python установлен в эти операционные системы изначально. Чтобы проверить его наличие, откройте терминал и введите команду:

На Windows требуется установка Python. Сделать это проще всего по нашей инструкции.
Шаг 2
Создаём виртуальное окружение
После установки и проверки Python требуется установить виртуальное окружение с помощью virtualenv. Это специальный инструмент, который позволяет изолировать друг от друга проекты в разработке, независимо устанавливая для них библиотеки и пакеты. Удобно, когда вы работаете над разными приложениями одновременно.
virtualenv устанавливается через терминал:

Открываем его, жмём кнопку «Запустить» и вводим команду /newbot:

Теперь напишем название и юзернейм для нашего бота. Назовём его echo_skillbox_bot (теперь это имя занято, так что вам надо будет придумать своё). В ответ придёт наш токен, который мы будем использовать для подключения к API Telegram.

Этот токен мы сохраняем — он потребуется нам в будущем.
Шаг 4
Подключаем Aiogram
Для установки Aiogram воспользуемся менеджером пакетов PIP. Вводим в терминал:

Находим нашего бота в Telegram по имени @echo_skillbox_bot и запускаем его, нажав на кнопку Начать. В ответ на это или на команду /start нам придёт приветственное сообщение:

Попробуем написать что-то:

Как мы видим — всё работает. Бот возвращает нам наши сообщения.
Что дальше?
Расширять функциональность бота, указывая для разных команд пользователя разные ответы. Например, добавить раздел помощи, который будет появляться по команде /help. Или настроить запуск кода на виртуальном сервере, чтобы бот работал независимо от вашего компьютера.
Во второй части статьи мы добавим к нашему боту кнопки и новые возможности. Так что обязательно заходите и читайте 🙂
Больше интересного про код в нашем телеграм-канале. Подписывайтесь!
Читайте также:
- С# для новичков: развеиваем мифы и пишем простого чат-бота
- «Я удивился, когда написал код, а он заработал»: как живёт начинающий Python-разработчик
- Учимся верстать: что такое CSS
Как создать бота для Телеграмма с нуля на Python?
Чтобы создать бота для Telegram с нуля на Python, вам потребуется использовать библиотеку Python-telegram-bot. Вот простой пример кода, который поможет вам начать:
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters def start(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Привет, я бот!") def echo(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text) def main(): updater = Updater('YOUR_TOKEN', use_context=True) dp = updater.dispatcher dp.add_handler(CommandHandler('start', start)) dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
Вам нужно заменить «YOUR_TOKEN» на токен, полученный от @BotFather. Этот код создает базового бота, который приветствует пользователя и отвечает на все его сообщения. Вы также можете добавить свою собственную логику обработки команд и сообщений для различных сценариев использования.
Детальный ответ
Как создать бота для телеграмма с нуля на Python
Создание бота для Телеграмма на Python может быть увлекательным и наглядным способом углубиться в программирование. В этой статье мы разберем пошаговую инструкцию по созданию бота для Телеграмма с использованием языка программирования Python.
Шаг 1: Регистрация бота
Для начала создания бота необходимо зарегистрироваться в Телеграмме и получить доступ к BotFather, который является «отцом» ботов в Телеграмме. Следуйте инструкциям, чтобы создать нового бота и получить токен доступа.
Шаг 2: Установка необходимых библиотек
Для работы с API Телеграмма на Python нам понадобятся python-telegram-bot библиотека. Установите библиотеку с помощью команды pip:
pip install python-telegram-bot
Шаг 3: Написание кода для бота
Создайте новый файл с расширением .py и начните писать код для бота. Вам понадобится импортировать необходимые модули и создать экземпляр класса `telegram.Bot`, используя ваш токен доступа:
import telegram bot = telegram.Bot(token='YOUR_TOKEN')
Теперь вы можете добавить обработчики для разных команд и сообщений, которые будет получать ваш бот:
from telegram.ext import CommandHandler, MessageHandler, Filters def start(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Привет! Я бот!") def echo(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text) start_handler = CommandHandler('start', start) echo_handler = MessageHandler(Filters.text & (~Filters.command), echo) dispatcher = updater.dispatcher dispatcher.add_handler(start_handler) dispatcher.add_handler(echo_handler)
Выше показан пример кода для обработки команды ‘/start’ и эхо-ответа на все текстовые сообщения. Вы можете добавить свои собственные команды и обработчики в соответствии с вашими потребностями.
Шаг 4: Запуск бота
Создайте функцию для запуска бота и запустите его:
def run_bot(): updater.start_polling() if __name__ == '__main__': run_bot()
Ваш бот теперь готов к запуску и обработке команд и сообщений от пользователей.
Шаг 5: Получение обновлений
- `bot.get_updates()` — получение списка обновлений
- `bot.send_message(chat_id, text)` — отправка сообщения в указанный чат
- `bot.send_photo(chat_id, photo=open(‘photo.jpg’, ‘rb’))` — отправка фото в указанный чат
- и т.д.
Вы можете ознакомиться с документацией Python Telegram Bot для получения подробной информации о доступных методах.
Выводы
В этой статье мы рассмотрели пошаговую инструкцию по созданию бота для Телеграмма с использованием языка программирования Python. Мы изучили шаги, начиная от регистрации бота, установки необходимых библиотек, написания кода обработчиков команд и сообщений, до запуска бота и взаимодействия с пользователями.
Теперь у вас есть все необходимые знания, чтобы создать своего собственного бота для Телеграмма на Python. Помните, что этот процесс может требовать дальнейшего изучения и доработки в зависимости от ваших потребностей.
Удачи в создании вашего первого бота на Python!
Как создать телеграм-бота на Python
Узнайте, как создать своего телеграм-бота на Python с нуля, используя простые шаги в этой понятной статье для новичков.

Алексей Кодов
Автор статьи
23 июня 2023 в 18:47
Создание телеграм-бота на Python — отличный способ погрузиться в мир разработки и научиться работать с API. В этой статье мы рассмотрим, как создать простого телеграм-бота, который будет отвечать на сообщения пользователей.
Шаг 1: Зарегистрировать телеграм-бота
Для начала, вам понадобится создать телеграм-бота и получить его токен. Для этого:
- Откройте приложение Telegram и найдите бота @BotFather.
- Напишите боту /newbot и следуйте инструкциям, чтобы создать своего бота.
- Сохраните полученный токен, он потребуется для работы с API.
Шаг 2: Установить библиотеку python-telegram-bot
Для работы с API телеграма удобно использовать библиотеку python-telegram-bot . Установите ее с помощью следующей команды:
pip install python-telegram-bot
Шаг 3: Написать код для телеграм-бота
Теперь приступим к написанию кода нашего бота. Создайте файл bot.py и напишите следующий код:
import logging from telegram import Update from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext # Введите токен своего бота TOKEN = "your_token_here" # Настройка логирования logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) logger = logging.getLogger(__name__) # Обработка команды /start def start(update: Update, context: CallbackContext) -> None: update.message.reply_text('Привет, я твой телеграм-бот! ') # Обработка текстовых сообщений def echo(update: Update, context: CallbackContext) -> None: update.message.reply_text(f'Вы написали: ') # Главная функция def main() -> None: updater = Updater(TOKEN) dispatcher = updater.dispatcher # Регистрация обработчиков dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) # Запуск бота updater.start_polling() updater.idle() if __name__ == '__main__': main()
Не забудьте заменить «your_token_here» на токен вашего бота.
