Как ChatGPT помог мне решить проблему с уведомлениями от TG-бота Яндекс Директа

В статье расскажу, как при помощи ChatGPT удалось дополнить уведомления от Яндекс Директа нужной мне информацией (названиями клиентов). Спойлер: пришлось создать свой Telegram-бот и интегрировать его с Google Sheets для объединения данных.

Как ChatGPT помог мне решить проблему с уведомлениями от TG-бота Яндекс Директа

Суть проблемы. У меня подключен официальный Telegram-бот с уведомлениями от Яндекс Директа, который помогает следить за актуальным остатком средств на балансах клиентов. Это очень удобно, но есть проблема — мы работаем через сервис eLama, который генерирует все логины по определенной схеме ("e-" / "elama-" + числовой идентификатор). В результате уведомления приходят в следующем виде:

Разобраться, какой логин к какому клиенту относится, можно только имея очень хорошую память.
Разобраться, какой логин к какому клиенту относится, можно только имея очень хорошую память.

В службе поддержки мне ответили, что технической возможности передавать название клиента в Telegram нет. Поэтому я решила создать костыль в виде бота, которому можно было бы пересылать уведомления от официального бота, а он бы связывал название клиента и его логин в Директе посредством интеграции с Google Sheets. За помощью я обратилась к ChatGPT.

Кстати, небольшой лайфхак для аналогичной проблемы с уведомлениями по email. Там у меня настроены правила обработки писем, и если в заголовке / теле письма содержится логин аккаунта, то автоматически проставляется метка с названием клиента.

Сразу покажу, что в итоге получилось, а ниже будет пошаговая инструкция по реализации такого решения.

Я пересылаю боту уведомление от официального бота Яндекс Директа, а он мне в ответ присылает то же сообщение, но с добавлением названия клиента.
Я пересылаю боту уведомление от официального бота Яндекс Директа, а он мне в ответ присылает то же сообщение, но с добавлением названия клиента.

Инструменты:

  • Google Sheets API — для хранения и управления данными аккаунтов и клиентов.
  • Python — для обработки данных и взаимодействия с API.
  • TeleBot — для отправки сообщений в Telegram.
  • PythonAnywhere — для автоматизации выполнения скрипта.

Пошаговая инструкция:

Шаг 1: Подготовка таблицы в Google Sheets

Создайте таблицу в Google Sheets, в которой будут указаны все аккаунты и связанные с ними клиенты.

Как ChatGPT помог мне решить проблему с уведомлениями от TG-бота Яндекс Директа

Шаг 2. Настройка доступа к Google Sheets

Для работы с Google Sheets необходимо создать учетные данные (credentials) для доступа к таблице:

  • Перейдите на https://console.cloud.google.com/.
  • Войдите в свою учетную запись Google.
  • Создайте новый проект в Google Cloud.
  • Перейдите в раздел "API & Services" → "Credentials" и выберите "Create Credentials" → "Service Account".
  • Когда аккаунт создан, добавьте ему роль "Editor" (Редактор) или "Owner" (Владелец).
  • Нажмите "Create Key" и выберите формат JSON. Сохраните этот файл на своём компьютере. Этот JSON-файл будет использоваться в коде для доступа к таблице.
  • Перейдите в настройки доступа к таблице и предоставьте доступ на редактирование сгенерированному сервисному аккаунту (электронная почта будет в JSON-файле, который вы скачали ранее).

Шаг 3: Создание Телеграм бота

  • Откройте Телеграм и найдите бот "BotFather".
  • Введите команду /newbot и следуйте инструкциям для создания нового бота.
  • После создания вы получите API-ключ, который понадобится в коде.

Шаг 4: Написание и запуск скрипта для обработки сообщений

Пишем скрипт, который будет:

  • Принимать уведомления от бота.
  • Искать в таблице Google Sheets соответствие аккаунта и клиента.
  • Формировать новое сообщение с добавлением названия клиента.
  • Отправлять обновленное сообщение в Телеграм.

Создайте файл на компьютере с расширением .py, например, bot.py. Откройте этот файл в текстовом редакторе и вставьте следующий код:

import telebot import gspread from oauth2client.service_account import ServiceAccountCredentials # Настройка доступа к Google Sheets scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] creds = ServiceAccountCredentials.from_json_keyfile_name('path_to_your_credentials.json', scope) client = gspread.authorize(creds) # Открываем таблицу по её названию sheet = client.open('Account_Client_List').sheet1 # Настройка Телеграм бота bot = telebot.TeleBot('YOUR_TELEGRAM_BOT_API_KEY') # Функция для поиска клиента по аккаунту def find_client_by_account(account): records = sheet.get_all_records() print(f"Ищем клиента для аккаунта: {account}") for record in records: print(f"Проверяем запись: {record['Аккаунт']}") if record['Аккаунт'] == account: print(f"Найден клиент: {record['Клиент']}") return record['Клиент'] print("Клиент не найден для аккаунта") return None def extract_account_and_balance_from_message(message_text): # Разделяем сообщение на строки lines = message_text.strip().split('\n') # Список для хранения пар (идентификатор аккаунта, остаток на балансе) accounts_and_balances = [] # Проходим по каждой строке, и если строка начинается с 'e-' или 'elama-', то следующая строка должна быть балансом for i in range(len(lines) - 1): if lines[i].startswith('e-') or lines[i].startswith('elama-'): account = lines[i].strip() balance = lines[i + 1].strip() # Следующая строка - это баланс accounts_and_balances.append((account, balance)) # Возвращаем список аккаунтов с балансами return accounts_and_balances # Обработка сообщений от бота @bot.message_handler(func=lambda message: True) def handle_message(message): accounts_and_balances = extract_account_and_balance_from_message(message.text) if accounts_and_balances: full_message = "Информация по аккаунтам и остаткам:\n\n" for account, balance in accounts_and_balances: client_name = find_client_by_account(account) if client_name: # Формируем сообщение в виде "Клиент (аккаунт)" full_message += f"{client_name} ({account})\nОстаток: {balance}\n\n" else: # Если клиент не найден, формат будет аналогичный full_message += f"Клиент не найден ({account})\nОстаток: {balance}\n\n" # Отправляем собранное сообщение bot.send_message(message.chat.id, full_message) else: bot.send_message(message.chat.id, "Не удалось извлечь данные об аккаунтах и балансах.") # Запуск бота bot.polling()
  • Функция find_client_by_account ищет клиента в таблице Google Sheets по названию аккаунта.
  • Когда бот получает уведомление, он вытаскивает из него название аккаунта, ищет клиента и отправляет обратно обновлённое сообщение с данными о клиенте.

Пояснения к коду:

  • Замените path_to_your_credentials.json на путь к JSON-файлу, который вы скачали из Google Cloud.
  • Замените YOUR_TELEGRAM_BOT_API_KEY на ваш API-ключ, который вы получили от BotFather.

Шаг 5: Запуск бота на PythonAnywhere

Шаг 5.1. Регистрация на PythonAnywhere

Для начала нужно зарегистрироваться на платформе PythonAnywhere — это облачная среда для запуска Python-скриптов. Процесс регистрации очень простой: указываете свою почту и пароль, и спустя пару минут вы уже можете приступить к работе.

Шаг 5.2. Загружаем скрипт бота

  • После регистрации перейдите в раздел Files.
  • Найдите свою домашнюю директорию (обычно /home/имя_пользователя/).
  • Загрузите туда файл вашего бота. В этом же разделе можно загружать любые другие файлы, которые потребуются вашему боту для работы, например, JSON с ключами для API.

Шаг 5.3. Установка зависимостей

  • Перейдите в раздел Consoles и откройте консоль Bash.
  • Установите все необходимые библиотеки для работы вашего бота. Для этого выполните команду:
pip install pyTelegramBotAPI gspread oauth2client

Это самые популярные библиотеки для работы с Google Sheets и Telegram API.

Шаг 5.4. Настройка окружения

  • В разделе Web создайте новое веб-приложение. Выберите Python 3.x.
  • В качестве каталога приложения укажите папку, в которой находится ваш бот.
  • В настройках веб-приложения укажите файл вашего бота как исполняемый скрипт. Это важно для того, чтобы бот мог работать через веб-хуки.

Шаг 5.5. Запуск скрипта вручную

  • В разделе Consoles откройте новую консоль Bash.
  • Выполните следующую команду, чтобы запустить ваш скрипт:
python3 /home/имя_пользователя/bot.py

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

22
Начать дискуссию