У роботі відділу закупівель щодня — десятки прайс-листів і сотні рядків. Ціна на ключовий компонент зросла на 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 разів). Помилка при ручному введенні коштує в середньому 50 000 ₽. Бот виключає людський фактор, заощаджуючи до 150 000 ₽ на місяць на трудозатратах та помилках.
Терміни впровадження
Термін розробки — від 2 до 5 робочих днів залежно від кількості джерел. Вартість розраховується індивідуально за вашим сценарієм.
Процес розробки по етапах
| Етап | Тривалість | Результат |
|---|---|---|
| Аналіз | 0.5 дня | Список джерел, форматів, критеріїв |
| Проєктування | 0.5 дня | Схема БД, конфіги, архітектура |
| Реалізація | 1–3 дні | Робочий бот з парсингом та нотифікаціями |
| Тестування | 0.5 дня | Юніт-тести, інтеграційні тести |
| Деплой | 0.5 дня | Розгортання на сервері, налаштування моніторингу |
Залиште заявку — ми проаналізуємо ваших постачальників і запропонуємо рішення за 1 день. Отримайте консультацію інженера з автоматизації закупівель.







