Как сделать бота для выдачи трек-кода по номеру аукциона
Если вы работаете с тендерами и часто получаете от заказчиков запросы на предоставление трек-номера отправления, автоматизация этого процесса сэкономит массу времени. Вместо ручного поиска в базе данных можно настроить Telegram-бота, который по номеру аукциона мгновенно выдаёт трек-код и краткую информацию о посылке. Разберём, как реализовать такое решение.
Принцип работы бота для выдачи трек-номера
Бот взаимодействует с SQL-базой, где хранятся пары «номер аукциона - трек-код». Пользователь вводит номер аукциона, бот ищет соответствующую запись и возвращает трек-номер. При необходимости можно добавить парсинг статуса с сайта службы доставки (например, Почты России или СДЭК).
Стек технологий для создания бота
- Язык программирования: Python (библиотека python-telegram-bot или aiogram).
- База данных: SQLite (для небольших объёмов) или PostgreSQL (для масштабирования).
- Дополнительно: библиотеки requests, BeautifulSoup (для парсинга статуса).
Структура базы данных
В SQL-таблице достаточно трёх полей: id, auction_number (уникальный номер аукциона), track_code (трек-номер). Пример SQL-запроса для создания таблицы:
CREATE TABLE tracks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
auction_number TEXT NOT NULL UNIQUE,
track_code TEXT NOT NULL
);Алгоритм работы бота
Шаг 1: Приём номера аукциона
Бот ожидает от пользователя текстовое сообщение. Для удобства можно добавить клавиатуру с командой /start и подсказкой формата ввода.
Шаг 2: Поиск в базе данных
Выполняется SQL-запрос: SELECT track_code FROM tracks WHERE auction_number = ?. Если запись найдена - возвращаем трек-код, иначе сообщаем, что номер не найден.
Шаг 3: Вывод информации
Бот отправляет пользователю сообщение: «Трек-код для аукциона [номер]: [код]». Если реализован парсинг, следом можно показать статус доставки (например, «В пути», «Вручено»).
Пример кода на Python (aiogram + SQLite)
import sqlite3
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
bot = Bot(token='YOUR_TOKEN')
dp = Dispatcher(bot)
def get_track(auction):
conn = sqlite3.connect('tracks.db')
cursor = conn.cursor()
cursor.execute('SELECT track_code FROM tracks WHERE auction_number = ?', (auction,))
result = cursor.fetchone()
conn.close()
return result[0] if result else None
@dp.message_handler()
async def handle_message(message: types.Message):
auction = message.text.strip()
track = get_track(auction)
if track:
await message.answer(f'Трек-код для аукциона {auction}: {track}')
else:
await message.answer('Аукцион не найден. Проверьте номер.')
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)Добавление информации о статусе отправления
Чтобы показывать статус, используйте API службы доставки. Например, для Почты России - запрос к их трекинговому API. Если API нет, можно парсить страницу статуса, но это менее надёжно. Статус обновляется автоматически при каждом запросе пользователя.
Безопасность и масштабирование
- Не храните пароли и токены в коде - используйте переменные окружения.
- Для больших объёмов данных поднимите PostgreSQL и настройте индексы на поле auction_number.
- Добавьте логирование запросов для отладки.
Таким образом, вы получаете простого и эффективного Telegram-бота, который автоматически выдаёт трек-код заказчикам по номеру аукциона. Это решение легко доработать под свои нужды: добавить поддержку нескольких служб доставки, кнопки для повторного запроса или вывод истории.