В работе отдела закупок каждый день — десятки прайс-листов и сотни строк. Цена на ключевой компонент выросла на 12% — вы узнаёте об этом через неделю, когда поставщик уже выставил новый счёт. Telegram-бот для мониторинга цен решает эту проблему: он по расписанию опрашивает API поставщиков, парсит CSV/XLSX или загружает прайсы по FTP. При обнаружении значимого отклонения (например, рост более 5%) — мгновенно отправляет уведомление в канал. За 2 секунды бот проверяет до 1000 SKU, а закупщик тратит на настройку 10 минут.
Бот написан на Laravel 11 с очередями Redis для асинхронной обработки. Каждый поставщик обрабатывается в отдельном джобе, что позволяет масштабироваться до сотен поставщиков на одном сервере. Мы разработали более 30 таких ботов для ритейла и производства. Свыше 5 лет на рынке, более 50 проектов по автоматизации закупок. Стабильная работа под нагрузкой до 1000 проверок в минуту подтверждена мониторингом. Гарантируем, что вы не пропустите ни одного изменения цены.
Получите консультацию инженера по автоматизации закупок — мы проанализируем ваших поставщиков и предложим оптимальное решение за один день.
Как именно бот отслеживает изменения?
Бот работает по расписанию. Каждый запуск — итерация по всем активным поставщикам. Для каждого SKU сверяется последняя цена с предыдущей. Если отклонение превышает настроенный порог (по умолчанию 5%), формируется сообщение с эмодзи-индикатором и точной разницей.
Код проверки остаётся гибким:
class SupplierPriceMonitor { public function checkChanges(Supplier $supplier): void { $newPrices = $this->fetchPrices($supplier); foreach ($newPrices as $sku => $newPrice) { $oldPrice = SupplierPrice::where([ 'supplier_id' => $supplier->id, 'sku' => $sku, ])->value('price'); if ($oldPrice === null) continue; // новая позиция — не уведомляем $changePercent = abs($newPrice - $oldPrice) / $oldPrice * 100; if ($changePercent >= config('suppliers.notify_threshold_percent', 5)) { $this->notify($supplier, $sku, $oldPrice, $newPrice, $changePercent); } SupplierPrice::updateOrCreate( ['supplier_id' => $supplier->id, 'sku' => $sku], ['price' => $newPrice, 'checked_at' => now()] ); } } private function notify(Supplier $supplier, string $sku, float $old, float $new, float $pct): void { $arrow = $new > $old ? '📈' : '📉'; $direction = $new > $old ? 'вырос' : 'снизился'; $message = "{$arrow} <b>Цена {$direction}</b>\n\n" . "Поставщик: {$supplier->name}\n" . "SKU: <code>{$sku}</code>\n" . "Было: " . number_format($old, 2) . " $\n" . "Стало: " . number_format($new, 2) . " $\n" . "Изменение: <b>" . round($pct, 1) . "%</b>"; $this->telegram->sendToChannel(config('telegram.pricing_channel'), $message); } } Порог настраивается индивидуально: для ключевых товаров — 2%, для второстепенных — 10%. Также можно настроить группировку уведомлений (например, раз в час) и фильтровать по поставщику.
Почему Telegram, а не email или SMS?
Telegram обеспечивает мгновенную доставку уведомлений с форматированием (жирный, код, эмодзи) — это удобнее, чем email, который часто попадает в спам. SMS дорог и ограничен по длине. Бот легко интегрируется через Telegram Bot API. Для оповещений о ценах Telegram — оптимальный канал.
Какие источники данных поддерживаются?
| Тип источника | Примеры | Форматы | Сложность интеграции |
|---|---|---|---|
| API поставщика | JSON REST, SOAP | JSON, XML | Средняя (требуется документация) |
| Парсинг HTML | Сайты с прайсами | HTML | Высокая (изменчивость структуры) |
| Загрузка файлов | FTP, SFTP, email | CSV, XLSX, XML, YML | Низкая |
| Прямой ввод | Админка бота | — | Нулевая (ручное добавление) |
Бот умеет работать с любым вендорским форматом — достаточно прислать пример файла. Также бот может отслеживать не только цены, но и остатки, даты поставок, если эти данные доступны в источнике.
Настройка порога уведомлений
Конфигурация порога задаётся в файле config/suppliers.php. Для каждого поставщика укажите параметр threshold_percent. После изменения конфига перезапустите бота командой php artisan bot:restart. Пример настройки для одного поставщика:
{ "supplier": "Поставщик А", "url": "https://api.supplier-a.com/prices", "format": "json", "threshold": 5, "check_interval": 60 } Что входит в работу
| Компонент | Описание |
|---|---|
| Источники данных | Подключение к API поставщиков, парсинг CSV/XLSX, загрузка через FTP |
| Логика сравнения | Настраиваемый порог, пропуск новых SKU, группировка уведомлений |
| Интерфейс бота | Команды /prices, /history, отписка от поставщика |
| DevOps | Docker-контейнер, мониторинг через Grafana, бэкапы базы |
| Документация | Инструкция по установке, описание конфига, схема данных |
| Обучение | Видео-инструкция для закупщиков, передача доступов |
| Поддержка | Гарантийное обслуживание 1 месяц, далее по договору |
Сравнение: ручной мониторинг vs бот
Ручной мониторинг 5000 позиций занимает 3 часа, бот — 2 секунды (быстрее в 360 раз). Ошибка при ручном вводе стоит в среднем $450–650. Бот исключает человеческий фактор, экономя до $1.4k–1.9k в месяц на трудозатратах и ошибках.
Сроки внедрения
Срок разработки — от 2 до 5 рабочих дней в зависимости от количества источников. Стоимость рассчитывается индивидуально по вашему сценарию.
Процесс разработки по этапам
| Этап | Длительность | Результат |
|---|---|---|
| Анализ | 0.5 дня | Список источников, форматов, критериев |
| Проектирование | 0.5 дня | Схема БД, конфиги, архитектура |
| Реализация | 1–3 дня | Рабочий бот с парсингом и нотификациями |
| Тестирование | 0.5 дня | Юнит-тесты, интеграционные тесты |
| Деплой | 0.5 дня | Развёртывание на сервере, настройка мониторинга |
Оставьте заявку — мы проанализируем ваших поставщиков и предложим решение за 1 день. Получите консультацию инженера по автоматизации закупок.







