Как сделать бота для выдачи трек-кода по номеру аукциона

    Если вы работаете с тендерами и часто получаете от заказчиков запросы на предоставление трек-номера отправления, автоматизация этого процесса сэкономит массу времени. Вместо ручного поиска в базе данных можно настроить 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-бота, который автоматически выдаёт трек-код заказчикам по номеру аукциона. Это решение легко доработать под свои нужды: добавить поддержку нескольких служб доставки, кнопки для повторного запроса или вывод истории.

    Часто задаваемые вопросы