Покупець заходить на сторінку замовлення та бачить лише «В обробці» — день за днем. У підсумку — потік дзвінків у підтримку: «Де моє замовлення?». Ми вирішуємо цю проблему: впроваджуємо систему трекінгу, яка автоматично оновлює статуси, надсилає сповіщення та дає прозору картину доставки. Наш досвід показує: трекінг знижує навантаження на підтримку на 60% та підвищує довіру до магазину. Один із клієнтів скоротив кількість звернень із 200 до 80 на день після впровадження. Інший — збільшив NPS на 20 пунктів. Часто магазини обмежуються простими статусами, вручну оновлюючи їх в адмінці. Це призводить до затримок і помилок. Наше рішення повністю автоматизує цей процес, інтегруючись з вашою системою та API перевізників. Замовте розробку під ключ — ми реалізуємо все за 4–6 днів.
Як працює статусна машина?
Замовлення проходить через кілька строгих станів: від очікування оплати до завершення. Кожен перехід контролюється state machine на основі Spatie Model States. Це гарантує, що жоден недопустимий перехід не відбудеться.
class Order extends Model { use HasStates; protected function registerStates(): void { $this->addState('status', OrderStatus::class) ->allowTransition(Pending::class, Confirmed::class) ->allowTransition(Confirmed::class, [Processing::class, Cancelled::class]) ->allowTransition(Processing::class, [Shipped::class, Cancelled::class]) ->allowTransition(Shipped::class, [Delivered::class, Failed::class]) ->allowTransition(Delivered::class, Completed::class); } } При кожному переході система записує запис у order_status_history, оновлює таймстамп та надсилає сповіщення покупцеві. Нижче — типові статуси та їх опис:
| Статус | Опис |
|---|---|
| Pending | Очікування оплати / підтвердження |
| Confirmed | Замовлення підтверджено |
| Processing | Комплектується на складі |
| Shipped | Передано в доставку, присвоєно трек-номер |
| Delivered | Доставлено покупцеві |
| Completed | Закрито (можливе повернення) |
| Cancelled / Failed | Скасовано або помилка доставки |
Чому історія статусів — основа трекінгу?
Всі зміни зберігаються в таблиці:
CREATE TABLE order_status_history ( id BIGSERIAL PRIMARY KEY, order_id BIGINT REFERENCES orders(id) ON DELETE CASCADE, status VARCHAR(30) NOT NULL, comment TEXT, changed_by BIGINT REFERENCES users(id), created_at TIMESTAMP DEFAULT NOW() ); З цієї таблиці будується часова шкала на публічній сторінці — покупець бачить, коли і який статус було присвоєно. Без історії неможливо відстежити затримки або помилки.
Чому важливо інтегрувати трекінг перевізників?
Після відправлення замовленню присвоюється трекінг-номер. Система кожні 2 години запитує оновлення у перевізника через API. Приклад для СДЕК:
$cdek = new \CdekSDK2\Client($clientId, $clientSecret); $info = $cdek->orders()->get($order->cdek_uuid); $cdekStatus = $info->getStatuses()[0]->getName(); Наше рішення інтегрується з 6+ перевізниками: СДЕК, Укрпошта, Boxberry, DPD, Dostavista, Яндекс Go. Порівняння підходів:
| Перевізник | Тип інтеграції | Частота оновлення | Складність |
|---|---|---|---|
| СДЕК | REST API | 2 години | Середня |
| Укрпошта | SOAP | 2 години | Висока |
| Boxberry | JSON API | 1 година | Низька |
| Dostavista | Webhook | Real-time | Середня |
При зміні статусу у перевізника система автоматично оновлює статус замовлення та надсилає сповіщення. Це зручніше, ніж ручна перевірка — економить час ваших менеджерів.
Публічна сторінка трекінгу
Сторінка доступна без логіну за посиланням з токеном — для гостьових замовлень і з листів. Приклад React-компонента:
const OrderTrackingPage = ({ order }: { order: OrderTrackingData }) => ( <div className="max-w-2xl mx-auto py-8 space-y-6"> <OrderSummaryCard order={order} /> <div> <h2 className="font-semibold mb-3">Історія статусів</h2> <StatusTimeline steps={order.status_history} currentStatus={order.status} /> </div> {order.tracking_number && ( <div> <h2 className="font-semibold mb-3">Доставка</h2> <ShippingTracker carrier={order.carrier} trackingNumber={order.tracking_number} events={order.carrier_events} /> <a href={order.carrier_tracking_url} target="_blank" className="text-blue-600 text-sm mt-2 inline-block"> Відстежити на сайті {order.carrier} → </a> </div> )} </div> ); Візуально timeline — це прогрес-бар із кроками: «Прийнято», «Підтверджено», «В обробці», «Відправлено», «Доставлено». Поточний статус підсвічується.
Сповіщення: email та SMS
При кожній зміні статусу покупець отримує лист з актуальним станом і посиланням на трекінг. Для ключових подій (відправлення, доставка) додатково надсилаємо SMS. Ми використовуємо канали Laravel Notification — легко розширювати. Шаблони кастомізуємо під ваш бренд.
Що входить в роботу
- Розробка статусної машини з історією переходів
- Інтеграція з 2–3 перевізниками (список узгоджується)
- Публічна сторінка трекінгу з адаптивним дизайном та токеном доступу
- Система сповіщень (email + SMS/месенджери за бажанням)
- Документація з API та схеми статусів
- Навчання вашої команди роботі з системою
- Гарантія на код 6 місяців, підтримка після запуску.
Процес роботи
- Аналітика — вивчаємо вашу поточну логіку замовлень, список перевізників, вимоги до сповіщень.
- Проектування — описуємо статусну машину, схему БД, інтеграції.
- Реалізація — пишемо код на Laravel (бекенд) + React (фронтенд).
- Тестування — перевіряємо всі переходи статусів, відправку сповіщень, роботу з реальними трек-номерами.
- Деплой — розгортаємо на вашому сервері, налаштовуємо крон-завдання.
Строки та вартість
Базова реалізація займає 4–6 робочих днів. Вартість розраховується індивідуально — залежить від кількості перевізників, складності бізнес-логіки та необхідності кастомізації дизайну. Зв'яжіться з нами — ми оцінимо ваш проєкт за 1 день. Наша команда має досвід розробки інтернет-магазинів та понад 50 успішних впроваджень трекінгу.
Які результати ви отримаєте?
Окрім зниження навантаження на підтримку ви отримуєте зростання лояльності: покупці бачать статус у реальному часі та рідше пишуть із запитаннями. Додатково ми допомагаємо налаштувати інтеграцію з CRM та аналітикою. Отримайте консультацію прямо зараз — ми розповімо, як покращити ваш сервіс.







