Телеграм-бот стал карманным приложением
Бот у нас был техподдержкой: продавец писал вопрос, мы отвечали. За день он превратился в приложение - с переключением площадок, разделами и лентой заказов. Разбираем, что внутри и на чём споткнулись.
Что получилось
Приложение открывается прямо в телеграме и показывает то же, что настольная версия, только короче. Сверху - площадки, под ними разделы.
Вкладка «Все площадки» складывает OZON, Wildberries и Яндекс Маркет в одну картину: оборот, что уйдёт на выплату, что удержит площадка, сколько съела реклама. Ниже - топ товаров за сутки.
Маржи здесь нет, и это осознанно. Себестоимость лежит файлом на компьютере продавца и на сервер не уходит. Показать маржу значило бы попросить прислать закупочные цены - мы решили, что цифра того не стоит.

Лента заказов
Новый раздел: что заказали за последние сутки, отдельно со склада маркетплейса и отдельно со своего.
Разделение везде своё. У OZON это просто два разных метода - FBO и FBS. У Wildberries есть готовое поле warehouseType: «Склад WB» или «Склад продавца».
А вот warehouseName там у всех строк одинаковый - «Склад WB РФ» - и ни о чём не говорит; на нём мы сначала и обожглись. У Яндекс Маркета признака в заказе нет вовсе, тип размещения знает только кампания.
Заказы - не выкупы. Сумма за сутки не сойдётся со сводкой за период, и так и должно быть: часть заказов ещё в пути, часть отменится. Написали об этом прямо в разделе, чтобы никто не сверял одно с другим.

Поддержка переехала внутрь
Раньше обращение можно было отправить, но узнать его судьбу - нет. Теперь у каждого есть номер и статус.
Писать можно и не заводя кабинет: у человека, который ещё не подключился, вопросов как раз больше всего, а написать было некуда.

На чём споткнулись
Приложение не открывалось. Мы повесили кнопку запуска на клавиатуру бота - и получили «Подпись телеграма не подошла». Оказалось, телеграм подписывает запуск только из сообщения, из меню и по прямой ссылке; запуск кнопкой клавиатуры не подписывается вовсе. Кнопка переехала в сообщение.
Подпись не сходилась и после этого. Из строки, по которой считается хеш, мы выбрасывали поле signature вместе с hash. Телеграм его туда включает. Собственный тест этого не поймал, потому что подписывал ту же урезанную строку: проверка была зелёной ровно потому, что повторяла ошибку.
Реклама показывала ноль. Рекламный кабинет OZON считает статистику задачами и отдаёт с задержкой в минуты. Приложению это не мешает - оно ждёт в фоне.
А разовый расчёт на сервере успевал завершиться раньше, и ДРР выходил нулевым. Теперь фон пускается первым, а результат забирается последним; если не успел - раздел честно говорит «кабинет ещё считает», а не выдаёт ноль за отсутствие рекламы.
Остатки занижались вдвое. Считали по списку карточек, а он обрезан шестьюстами строками. Точные счётчики лежали рядом, в сводке проверок.
Цифры
| Разделов в приложении | 7 |
| Площадок | 3 |
| Прогон расчёта | 3-5 минут, ~650 МБ |
| Обновление снимка | каждые 30 минут |
Ключи маркетплейсов на сервере хранятся зашифрованными, и отдаёт их продавец сам - по явному согласию, с возможностью отозвать в один клик. Без этого бот работает только когда открыто настольное приложение.


