Как настроить ежедневную сводку о работе Яндекс.Директа в Телеграм?

от автора

Статья предназначена для маркетологов и собственников бизнеса, которые ведут рекламные кампании в Яндекс Директе (или любой другой рекламной системе) и хотят ежедневно держать руку «на пульсе» того как работает их реклама. Мы рассмотрим, как можно автоматизировать сбор данных из рекламной системы, обрабатывать их и регулярно отправлять уведомления о результатах в Telegram с помощью Python.

Основная цель оперативно анализировать данные по рекламе за текущий период, с первого взгляда на сообщение понимать как идут дела в рекламе не заходя в рекламные кабинеты. Оценивая эту задачу мы пришли к выводу, что цифры со статистикой «за вчера», оторванные от контекста месяца / полугодия не имеют ни какого смысла. Для аналитики рекламы с привязкой к контексту данных мы применили подход оценки средних значений за последние 7, 30 и 90 дней.

Таким образом мы можем оперативно сделать вывод о том, как работает реклама сейчас и как она работала в среднем за последнее время. Если показатели за последние 7 дней показывают рост относительно 30, 90 дней — значит дела идут в нужном направлении, если спад, значит нужно начинать разбираться в чем дело.

Содержание

  1. Выбор способа хранения и получения исходных данных

  2. Регистрация бота для работы с Телеграм

  3. Подключение к хранилищу данных

  4. Формирование отчетов и отправка данных в Telegram

  5. Автоматизация отправки уведомлений

Шаг 1: Выбор способа хранения и получения исходных данных

Перед тем, как что-то рассылать в уведомлениях нам необходимо подготовить данные. Здесь есть два основных подхода: использование готового хранилища данных или прямое подключение к API рекламной системы.

Идеальный (на мой вкус) вариант — с хранилищем

Этот вариант считается более стабильным и предпочтительным. Вы заранее настраиваете ежедневную загрузку данных из рекламных систем в единое хранилище используя к примеру Python (пример не идеален но логика верная) или язык R.

Например, данные из таких платформ, как Яндекс Директ, ВК Реклама, TG Ads, могут автоматически загружаться и актуализироваться в базе данных. Это позволяет вам работать с уже обработанными данными и исключить риски, связанные с потерей соединения или неполным получением информации.

Преимущества:

  1. Стабильность: Данные уже загружены в базу, что исключает риски, связанные с непредсказуемостью работы API. Это особенно важно, если вам нужно регулярно получать большие объемы данных.

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

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

Недостатки:

  • Требуется инфраструктура: Необходимость организации и поддержки хранилища данных, что может быть затратным по времени и ресурсам.

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

  • Сложность обновления данных: Если данные обновляются часто, могут возникнуть задержки в получении самой актуальной информации.

Прямое подключение к API

Этот подход менее надежен, так как он напрямую зависит от стабильности соединения с API рекламной системы, но запросы к ней так же можно посылать используя любой язык программирования в том числе Python или R.

Если запросы на получение данных слишком объемны, возможно, что соединение будет прерываться, и данные могут приходить неполными или вообще не прийти. Каждый раз при запросе данных происходит подключение к API, получение необходимой информации за выбранный период и ее обработка перед отправкой в Telegram.

Преимущества:

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

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

Недостатки:

  • Нестабильность: Прямое подключение к API рекламных систем может приводить к обрывам соединения, особенно при больших объемах данных, что чревато потерей данных или задержками.

  • Ограничения API: Многие рекламные системы накладывают ограничения на количество запросов или объем данных, которые можно получить за один раз, что усложняет процесс получения полного набора данных.

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


Шаг 2: Подключение к Telegram

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

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

Для работы с Telegram нам понадобится бот. Его можно легко создать с помощью официального бота @BotFather в Telegram:

  1. Откройте диалог с @BotFather и выполните команду /newbot.

  2. Следуйте инструкциям для создания бота и получения токена, который будет использован в Python для отправки сообщений. Полученный токен обязательно скопируйте, дальше он нам пригодится для работы с отправкой сообщений.

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

Права добавляются в разделе администрирования канала или чата при переходе к администраторам ресурса.


Шаг 3: Подключение к хранилищу данных

Теперь, когда бот Telegram настроен, нужно подключиться к хранилищу данных, где хранятся результаты рекламных кампаний. Для этого можно использовать такие библиотеки Python, как pymysql или sqlalchemy.

Подключаемые библиотеки

from sqlalchemy import create_engine import pandas as pd from datetime import  datetime import requests

Здесь мы подключаем четыре необходимых пакета:

  • sqlalchemy: Этот пакет используется для создания подключения к базе данных. Он позволяет взаимодействовать с различными СУБД (системами управления базами данных) через единый интерфейс.

  • pandas: Это популярная библиотека для работы с данными в Python. Мы используем pandas для загрузки данных из базы в виде DataFrame — структуры данных, удобной для дальнейшего анализа.

  • datetime:Это модуль из стандартной библиотеки Python предоставляет функциональность для работы с датами и временем.

  • requests: Эта бибилиотека предназначена для выполнения HTTP-запросов. Она используется для взаимодействия с внешними веб-сервисами или API.

Подключение к базе данных

db_url = f"mysql+mysqlconnector://{user}:{password}@{host}:{port}/{dbname}?auth_plugin=mysql_native_password" engine = create_engine(db_url)

Здесь происходит настройка и создание подключения к базе данных:

  • db_url: Формируется строка подключения, которая включает:

    • user: Имя пользователя базы данных.

    • password: Пароль для доступа к базе.

    • host: Адрес сервера базы данных.

    • port: Порт, по которому происходит подключение (обычно 3306 для MySQL).

    • dbname: Название базы данных, с которой будет вестись работа.

    • auth_plugin: Параметр, указывающий, какой плагин используется для аутентификации (в данном случае mysql_native_password).

    Строка подключения передается в SQLAlchemy для создания безопасного подключения к базе данных.

  • engine: Мы используем функцию create_engine из SQLAlchemy, чтобы создать объект подключения к базе данных. Этот объект позволяет выполнять SQL-запросы и управлять соединением.

SQL-запрос данных для последних 7 дней

Здесь мы формируем SQL-запрос для получения данных за последние 7 дней. Запрос выполняет следующие операции:

  • SELECT: Выбираем нужные метрики:

    • CabinetName: поле с данными о наименовании рекламного кабинета

    • TotalCost: Сумма затрат за последние 7 дней. Используем ROUND для округления значения до целого числа.

    • TotalClicks: Общее количество кликов по рекламе.

    • TotalConversions: Общее число конверсий, полученных с рекламных кампаний. Мы суммируем несколько целей (goal_1 — goal_6), используя COALESCE, чтобы учесть случаи, когда значения целей могут быть нулевыми.

    • TotalImpressions: Общее количество показов рекламы (охваты).

    • AverageCPC: Средняя цена за клик (CPC), рассчитываемая как общие затраты, деленные на количество кликов.

    • CPA: Цена за конверсию (CPA), рассчитанная как общие затраты, деленные на количество конверсий.

  • FROM: Указываем таблицу tf_direct, которая содержит данные из Яндекс Директа (у вас эта таблица может называться по другому).

  • WHERE: Фильтр данных по дате. Используется функция DATE_SUB, чтобы выбрать данные за последние 7 дней от текущей даты (CURDATE()).

SQL-запросы для последних 30 и 90 дней

query_last_30_days = query.replace("7 DAY", "30 DAY") query_last_90_days = query.replace("7 DAY", "90 DAY")

Эти строки изменяют исходный SQL-запрос для выборки данных за последние 30 и 90 дней соответственно:

  • query_last_30_days: Создается копия запроса, где фильтр по дате заменяется на «последние 30 дней».

  • query_last_90_days: Создается копия запроса для выборки данных за последние 90 дней.

Это позволяет повторно использовать исходный запрос, заменяя только временные интервалы.

Выполнение SQL-запросов и получение данных

last_7_days_data = pd.read_sql(query, con=engine) last_30_days_data = pd.read_sql(query_last_30_days, con=engine) last_90_days_data = pd.read_sql(query_last_90_days, con=engine)

Здесь выполняются запросы и загружаются результаты в DataFrame с помощью pandas:

  • pd.read_sql: Функция загружает данные, полученные по SQL-запросу, в объект DataFrame, который удобен для последующей работы и анализа данных.

  • last_7_days_data, last_30_days_data, last_90_days_data: Три разных переменные для данных за последние 7, 30 и 90 дней.

Возврат результатов

return last_7_days_data, last_30_days_data, last_90_days_data

В итоге функция возвращает три объекта DataFrame, содержащих данные за последние 7, 30 и 90 дней. Эти данные можно использовать для анализа метрик эффективности рекламных кампаний — Общий код запроса.


Шаг 4: Формирование отчетов и отправка данных в Telegram

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

Так как у нас была задача формировать средние значения за 7, 30, 90 дней мы напишем функции, которые смогут обращаться к данным собранным на Шаге 3 и формировать из них средние значения по всем ключевым показателям — Функции усреднения.

После того как усредненные данные нами были получены, мы можем из них формировать сообщение для отправки в Телеграм — Функция для формирования сообщения для отправки в ТГ

Отправка данных в Телеграм:

def sent_msg(msg):     TOKEN = f'777********43:AAHOR***********cEj4lbJo'  # Указываем Токен, который получили на Шаге 2 от BotFather     CHATS_ID = [f'-35*****8']   # Указываем ID чата в который планируем отправлять сообщения ботом      for CHAT_ID in CHATS_ID:         url = f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={CHAT_ID}&text={msg}&parse_mode=HTML"       response = requests.get(url)        if response.status_code == 200:           print(f"Message sent successfully to {CHAT_ID}")       else:           print(f"Failed to send message to {CHAT_ID}: {response.text}")

Чтобы получить CHATS_ID можете воспользоваться ботом в Телеграм —@getmyid_bot , добавив его в свою группу / чат и он в ответ пришлет вам ID вашего чата.

Уже на этом этапе, выполнив запрос:

message = build_msg(merged_data) sent_msg(message)

Ваше сообщение со всеми данными по рекламе должны попасть в тот чат, для которого мы выше получали CHATS_ID.


Шаг 5: Автоматизация отправки уведомлений

Последний этап – это автоматизация процесса. Один из способов – настроить задачу на ежедневную отправку отчетов с помощью Task Scheduler на Windows.

Настройка задачи в Task Scheduler

  1. Откройте Task Scheduler (Планировщик задач).

  2. Создайте новую задачу, выбрав «Создать задачу».

  3. Установите триггер на ежедневное выполнение в заданное время.

  4. В разделе «Действия» укажите запуск Python-скрипта:

    • python путь_к_скрипту.py

  5. Сохраните задачу.

Теперь ваш скрипт будет автоматически запускаться каждый день в указанное время и отправлять отчеты в Telegram.

Альтернативные решения

Для пользователей Linux можно использовать cron для настройки автоматического запуска скрипта. Например:

0 9 * * * /usr/bin/python3 /path/to/script.py

Это задание будет запускать скрипт ежедневно в 9:00.

Заключение

Мы рассмотрели, как можно автоматизировать процесс формирования отчетов о рекламных кампаниях и их отправку в Telegram. Теперь, с помощью Python и небольшого скрипта, вы сможете ежедневно получать актуальные данные в динамике и следить за работой ваших рекламных кампаний. Не упускать важные изменения, вовремя реагировать на колебания и оптимизировать свои рекламные стратегии для достижения лучших результатов.

П.С. В статье детально не раскрыта тема того как собираются и загружаются данные в БД, про это планирую рассказать позднее если тема будет актуальна.

Спасибо что дочитали, желаю успешного внедрения =)


ссылка на оригинал статьи https://habr.com/ru/articles/851444/


Комментарии

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

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