Покупатель заходит на страницу заказа и видит только «В обработке» — день за днём. В итоге — поток звонков в поддержку: «Где мой заказ?». Мы решаем эту проблему: внедряем систему трекинга, которая автоматически обновляет статусы, отправляет уведомления и даёт прозрачную картину доставки. Наш опыт показывает: трекинг снижает нагрузку на поддержку на 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 и аналитикой. Получите консультацию прямо сейчас — мы расскажем, как улучшить ваш сервис.







