Не всегда удобно открывать браузер или приложение информации из яндекс метрики. Для удобства я реализовал получение основных метрик в телеграм-боте.
C статье вы найдете
Ссылку на код проекта.
Как развернуть проект на удаленном сервере и подключить к телеграм-боту.
Исходный код бота для работы с Яндекс Метрикой на GitHub.
Стоит отметить, что Метрика позволяет использовать их бота для получения регулярных отчетов. Цель — именно в возможности настроить решение под себя и получать отчеты за произвольное время.
Мы напишем бота в Telegram, который будет отправлять статистику с Яндекс Метрики, включая UTM метки.


Наш бот автоматически отправляет статистику из Яндекс Метрики, позволяя быстро получать нужные данные без необходимости заходить в сервис. Это упрощает доступ к ключевой информации в удобном формате.
В завершении статьи мы развернем проект в облаке Amvera, используя git push, буквально за четыре команды в IDE.
Шаг 0. Написание бота
Вы можете скачать уже готовый код и его использовать. Для тех, кому интересно ознакомиться подробнее и что-то изменить в функциональности решения, в подкате описание кода проекта.
Написание бота с использованием библиотеки aiogram 3
Перед тем как приступить к написанию бота, мы установим необходимые библиотеки для работы бота.
Переходим в командную строку (cmd) и прописываем команду ниже.
pip install aiogram requests
Приступим к написанию кода.
Создаём и открываем файл main.py.
Импортируем библиотеки.
import logging
import asyncio
import os
import string
import requests
from datetime import datetime
from aiogram import Bot, Dispatcher, Router, types
from aiogram.types import CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.filters import CommandStart
from aiogram.fsm.state import StatesGroup, State
from aiogram.fsm.context import FSMContextЭкземпляр бота выглядит следующим образом:
logging.basicConfig(level=logging.INFO)
BOT_TOKEN = os.environ["TOKEN"]
bot = Bot(token=BOT_TOKEN) # токен, который будет в качестве переменной на хостинге
dp = Dispatcher() # переменная диспетчера
router = Router() # переменная роутера
YANDEX_METRIKA_TOKEN = os.environ["TOKEN_YANDEX"]
COUNTER_ID = os.environ["COUNTER_ID"]
choicestat = None
start_date = datetime.today().replace(day=1).strftime("%Y-%m-%d")
end_date = datetime.today().strftime("%Y-%m-%d")
async def main():
dp.include_router(router) # инициализация роутера
await dp.start_polling(bot) # запуск бота
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO) # инициализация логгера
try:
asyncio.run(main()) # запускаем функцию main в асинхронном режиме
except KeyboardInterrupt:
print('Бот выключен')Мы написали основу бота, теперь напишем необходимые команды для его работы:
Напишем переменные и класс FSM для управления состояниями бота при работе с пользователем:
class Form(StatesGroup):
date1 = State()
date2 = State()
date1utm = State()
date2utm = State()
choicestart = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text=" 