Тимур ТурдыевНаписать

кейс · 2020

Экран отдела продаж: сделки из Мегаплана, звонки из Mango Office

Для отдела продаж Prime Wood сделал экран на офисный монитор: план месяца, оплаты за день, необработанные заявки и звонки по менеджерам. PHP без фреймворка и крон, потому что этого хватало. Работу с API Mango Office потом вынес в Laravel-пакет.

PHPMegaplan APIMango Office APILaravel

Что было ​

Весной 2020, через несколько месяцев после переезда магазина на OpenCart, в Prime Wood появилась задача не про сайт. Сделки отдела продаж жили в Мегаплане, звонки - в облачной АТС Mango Office. Руководитель отдела собирал картину дня руками из двух систем: кто сколько продал, кто сколько звонил, сколько заявок лежит без ответа. Хотелось одну картинку на мониторе в отделе, чтобы её видел и он, и менеджеры.

Что решил ​

Фреймворк не брал. Задача - раз в несколько минут сходить в два API и показать итоги на одном экране. Для этого хватает PHP, крона и нескольких JSON-файлов на диске. База данных тоже не нужна: экран показывает текущий месяц, прошлые данные никто не анализирует. Репозиторий начат 7 апреля 2020.

Как устроено ​

Крон запускает CLI-скрипт. Он постранично, по 40 сделок с паузой между страницами, выкачивает сделки через API Мегаплана: у API есть лимиты, торопиться незачем. От параллельного запуска защищает файл-блокировка: если скрипт ещё работает, следующий тик просто выходит, а если файл висит дольше часа, считается зависшим и снимается. Итоги раскладываются по менеджерам в JSON: сумма за месяц, оплаты за день, сделки на каждого.

Звонки идут отдельным модулем из API статистики Mango Office: запрос отчёта, потом получение результата, CSV в массив, подпись запросов ключом и солью. Оттуда же список сотрудников, чтобы сопоставить звонки с менеджерами.

Сама страница - PHP, Bootstrap, axios и Chart.js. Кнопка «Развернуть» переводит её в полноэкранный режим, дальше она обновляется сама. На экране: выполнение плана за месяц графиком, необработанные заявки, сумма оплат за день, исходящие звонки за день по каждому менеджеру и «КПД» - доля закрытых сделок от всех сделок менеджера.

Летом руководитель попросил поправить КПД: новичок с двумя закрытыми сделками из двух получал 100% и возглавлял рейтинг. Добавил порог: в рейтинг попадают только те, у кого от 20 закрытых сделок. ТЗ от 28 июля, правка 13 августа.

Laravel-пакет ​

В ноябре вынес работу с Mango Office в отдельный Composer-пакет для Laravel: ServiceProvider, конфиг с ключом и солью, класс с тремя методами - список сотрудников, статистика звонков за период, скачивание записи разговора. Внутри учёл особенность API: отчёт нельзя забрать сразу после запроса, нужно подождать несколько секунд, и пакет делает эту паузу сам. Имя зарегистрировано на Packagist, версий с тегами так и не выпустил: пакет делал под себя. Код открыт: Laravel-Mango-Office.

Что вышло ​

Экран висел в отделе продаж, пока я работал в компании. Руководитель перестал собирать картину дня руками, а менеджеры видели свои звонки и долю закрытых сделок рядом с чужими. Работа отдела превратилась в соревнование, которое видно всем, и на этом экране руководитель строил мотивацию менеджеров. Итог посчитали в деньгах: выручка выросла.

Вывод ​

Инструмент под одного руководителя и один монитор не нуждается в фреймворке, очередях и базе. Крон, два API и JSON на диске - решение, которое я могу объяснить за минуту и починить за десять. Переиспользуемую часть стоит выносить не заранее, а когда она действительно понадобилась ещё раз: пакет для Mango я вынес, когда понял, что этот код мне ещё пригодится.

© 2014-2026 Тимур ТурдыевСайт и справочник работают на VPS от AdminVPS