← Все работы ПАРСЕР ТОВАРОВ ←01 / 07→EN

Прайс
из переписки

Магазин техники покупает товар у семнадцати поставщиков. Каждый присылает свои цены в WhatsApp — обычными сообщениями, вразнобой, весь день. Программа читает эти сообщения, собирает из них один общий прайс, сравнивает его с ценами конкурентов и сама публикует клиентам.

ПрайсСегодняПоставщикиНа проверкеНаценкиКонкуренты admin
Поиск: iPhone 17 Категория: Все ☑ Только актуальные Позиций 2 930Курс $ 81,4 ₽
Пост.НазваниеРегионSIMПамятьЦветКол-воЦена $С наценкойСтатус
S-03iPhone 17 Pro MaxJapaneSIM256GBCosmic Orange241 2851 32511:34
S-03iPhone 17 ProUSAeSIM256GBDeep Blue91 1051 14511:34
S-07iPhone 17 AirUAEeSIM512GBSky Blue411 1901 24011:02
S-01iPhone 16 ProChinaDual128GBBlack Titanium684588510:48
S-04MacBook Pro 14 M4EU—16GB/512GBSpace Black31 6901 76009:57
S-07iPad Pro 13 M4HKLTE1TBSilver51 5401 600вчера
S-02Galaxy S26 UltraUAEDual512GBTitanium Gray181 0601 11011:12
S-05AirPods Pro 2UAE——White6016818210:31
S-06iPhone 17India1 SIM256GBLavender24915страннаяпроверить
Связь с WhatsApp: есть· Последний прайс разобран в 11:34· Ждут проверки: 7· Срез конкурентов: сегодня

Так выглядит рабочий экран · цифры для примера, имена поставщиков скрыты

Кому

Оптовый магазин техники: 17 поставщиков пишут цены в WhatsApp

Что сделано

Программа читает переписку, собирает общий прайс, считает наценку по весу и маршруту и публикует в каналы

Результат

Утро менеджера свободно, 1 300+ позиций обновляются сами, цены конкурентов сравниваются каждый день

Ролик · 36 секунд, без звука · одна строка поставщика от WhatsApp до канала

Каждое утро начиналось с переписывания цен

Раньше менеджер каждое утро открывал семнадцать чатов, находил среди обычной переписки свежие цены и переписывал их в таблицу. Потом из таблицы — в посты для клиентов. И так каждый день, включая выходные.

Цена ошибки простая. Пропустил сообщение — клиент не купил вовремя. Ошибся в цифре — компания упустила прибыль. А просить два десятка поставщиков писать «правильно и по форме» бесполезно: каждый пишет как привык.

Как пишут поставщики
S-03🇯🇵 17 Pro Max 256 Cosmic Orange — 1285$ (24шт)
17 Pro 256 Deep Blue USA — 1105 (9)
S-07iPhone 17 Air 512 sky blue uae esim 1190 есть 41
S-02галакси с26 ультра 512 титан грей
1060 дубай, 18 шт
→
Что получает магазин
S-03iPhone 17 Pro MaxJapan · eSIM · 256GB · Cosmic Orange24 · 1 285 $
S-03iPhone 17 ProUSA · eSIM · 256GB · Deep Blue9 · 1 105 $
S-07iPhone 17 AirUAE · eSIM · 512GB · Sky Blue41 · 1 190 $
S-02Galaxy S26 UltraUAE · Dual · 512GB · Titanium Gray18 · 1 060 $

Сообщения для примера · так выглядят три разных поставщика в одно утро

В чём сложность

Собрать цены в одну таблицу звучит просто — пока не увидишь, как на самом деле выглядят эти сообщения.

01

Даже один поставщик пишет по-разному

Сегодня — аккуратный список, завтра — сплошной текст с флагами стран, послезавтра — три сообщения подряд и правка одной строкой вдогонку. Формат разный у всех, и у каждого он меняется изо дня в день. Программа разбирает всё это сама и приводит к одному виду.

02

Ошибаться нельзя

По этим цифрам покупают и продают. Всё подозрительное — цена вдвое ниже рынка, товар без модели, странная скидка — не попадает к клиентам, а откладывается в отдельный список на проверку человеком.

03

Думать — дорого

Разбор сообщения нейросетью стоит денег, а прайсы приходят десятками в день и часто отличаются одной цифрой. Поэтому сначала система пробует справиться сама и зовёт нейросеть, только когда сообщение действительно новое.

День системы

Система работает по расписанию рынка. Никто ничего не запускает руками.

с 7:00 Приходят прайсы Поставщики в Дубае начинают рабочий день и присылают цены. Каждое сообщение проверяется, разбирается и попадает в общую таблицу в течение минуты.
утром Срез по конкурентам Приходят прайсы двух конкурентов, разбираются и встают рядом с нашими ценами в одной таблице.
10:40 и 11:30 Утренние файлы Два раза за утро собирается тот самый документ, который раньше делали руками: список групп и дословные прайсы за сегодня. Второй файл — только то, что дослали после первого.
10:30–16:00 Публикация клиентам Посты в каналах обновляются по мере поступления цен — не пересылаются заново, а редактируются на месте. Вне рабочего окна система молчит, чтобы не будить людей уведомлениями.
17:00 Отсечка Всё, что пришло позже, прайсом на сегодня уже не считается: поздняя цена в утреннем прайсе опаснее, чем её отсутствие. Воскресенье система пропускает целиком.

Что вообще
считать
прайсом

В чатах с поставщиками идёт обычная переписка: заказы, вопросы, фото, «доброе утро». Сообщений с ценами среди них немного, и программа должна отличать их от всего остального, прежде чем тратить время и деньги на разбор.

Парсер11:52
Похоже на прайс, но не уверен. Группа S-06, отправитель не в списке:айфон 17 256 lavender 915 индия, 24 шт, свежие
РазобратьПропустить
01 Только свои отправители В каждой группе система знает поимённо, кто из участников присылает цены. Сообщение от кого-то другого не разбирается — но и не пропадает: в утреннем файле видно строкой, что оно было.
02 Заказ — не прайс Отдельно распознаются заказы клиентов и обычная переписка: по ним цены не обновляются. Заказом занимается другой бот — он подставляет к строкам закупочные цены.
03 Повтор не считается Если поставщик прислал ровно тот же текст, что и вчера, система не разбирает его заново — просто отмечает, что цены подтверждены.
04 Сомневается — спрашивает Если сообщение похоже на прайс, но уверенности нет, система присылает его в Telegram с двумя кнопками: «разобрать» или «пропустить». Решение человека запоминается.
Как сообщение становится прайсомПуть сообщения поставщика через проверки отправителя, типа, повтора и уверенности до нейросети и общей таблицы.ДАПРАЙСНОВЫЙУВЕРЕННЕТЗАКАЗ, ЧАТДАНЕ УВЕРЕНРАЗОБРАТЬСообщение в группе17 поставщиков · WhatsAppСвой отправитель?Это прайс?Тот же текст,что вчера?Уверенность есть?Нейросеть разбираеттолько новое · стоит денегОбщая таблицав течение минутыМимо прайсавидно строкой в утреннем файлеЦены подтвержденыбез повторного разбораРешает человеккнопки «разобрать» / «пропустить»начало и конецрешениедействиеключевой шагиногда / возврат

Путь сообщения до общей таблицы

→ схему можно листать вбок

Наценку считает
программа

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

Что остаётся от наценки в 40 $

Наценка на позицию + 40,00 $
Доставкавес 0,45 кг × 20 $ за килограмм − 9,00 $
Потеря на обмене валютыпо коэффициентам того маршрута, которым идёт товар − 1,20 $
Чистая прибыль 29,80 $

Цифры для примера. Вес, стоимость килограмма и маршрут у каждой позиции свои — и все три меняются.

01 Вес и цена килограмма — у каждой позиции свои Наушники весят граммы, ноутбук — килограммы, и доставка каждого стоит по-своему. Система хранит вес позиции и стоимость килограмма по её маршруту и пересчитывает доставку для каждой строки отдельно.
02 Маршрут добавляет свою потерю Деньги до поставщика идут не напрямую, и на каждой конвертации теряется процент. У каждого маршрута свои коэффициенты, позиция привязана к маршруту — и эта потеря вычитается из прибыли автоматически, а не держится у кого-то в голове.
03 Настройки меняются на ходу Наценки правятся в обычной Google-таблице — так удобнее тому, кто с ними работает; система заглядывает туда каждые десять минут и подхватывает правки. Сдвинулся курс — все сохранённые цены пересчитываются. Изменили наценку — каналы обновятся в ближайшее рабочее окно, без ручного пересчёта.
04 Порог, ниже которого цена не опускается Раньше защитой служил минимум наценки в два доллара — и он не защищал: при весе 0,3 кг одна доставка съедает шесть. На прайсе конкурента был день, когда из тридцати девяти посчитанных позиций двадцать уходили в минус, вплоть до минус четырнадцати долларов на одной. Теперь порог считается по чистой прибыли: три доллара — граница, ниже которой система цену не опустит, даже если конкурент дешевле.

Два конкурента,
каждый день

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

ТоварКонкурент 1Конкурент 2Наша ценаРешение
iPhone 17 Pro Max 256GB109 900 ₽110 400 ₽109 800 ₽дешевле на 100 ₽
iPhone 17 Air 512GB101 200 ₽—101 100 ₽дешевле на 100 ₽
AirPods Pro 215 400 ₽15 600 ₽15 900 ₽ниже — в убыток
Galaxy S26 Ultra 512GB92 700 ₽93 100 ₽92 600 ₽дешевле на 100 ₽

Так выглядит сравнение · цены для примера

→ таблицу можно листать вбок
01 Правило простое, но с границей Быть дешевле конкурента на сто рублей — пока на позиции остаётся хотя бы три доллара чистыми. Если не остаётся, система не опускает цену: такой заказ выгоднее отдать конкуренту, чем продать себе в убыток.
02 Новые наценки применяются одной кнопкой Система не меняет цены молча. Она показывает готовый расчёт: сколько строк разобрано, сколько нашлось у нас, где цена опустится и на сколько. Владелец смотрит и нажимает «применить» — или не нажимает.
03 Отдельный ежедневный отчёт Позиции, где мы заметно дешевле рынка, уходят отдельным сообщением в Telegram — как готовый аргумент для продажи.
ПодробностиЕщё три раздела: курсы валют, сверка с учётом, что происходит при обрыве связиРаскрыть ↓Свернуть ↑

Курс
меняется —
цены тоже

Часть поставщиков считает в долларах, часть — в дирхамах, клиенты платят рублями. Пока курс стоит, разницы не видно; стоит ему сдвинуться — и вчерашняя цена превращается в работу в минус.

Поэтому актуальные курсы подтягиваются автоматически, а при их изменении система пересчитывает все уже сохранённые цены, а не только новые. До того как это исправили, часть позиций месяцами жила по курсу того дня, когда её разобрали.

01 Google-таблица Общий прайс выгружается в лист, с которым привыкли работать: его можно открыть с телефона, отправить, распечатать.
02 Телеграм-каналы и группы Пять отдельных потоков: опт, розница, сравнение цен, срез по конкурентам и рассылка выгодных позиций в личку.
03 Два бота для людей Один отвечает на вопрос «сколько стоит» за секунду, второй берёт заказ клиента и подставляет к нему закупку.

Один товар —
один код
в учёте

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

Разобрать это один раз мало: поставщики каждый день присылают новые позиции. Поэтому кроме самой сверки появились правила, по которым она делается, и проверки, которые следят за порядком дальше.

01 Артикул приводится к единому виду Один и тот же товар в документах пишется по-разному: у артикула бывают региональные хвосты и варианты написания. Сравнение идёт по устойчивой части кода, а не по тому, как его набрали в конкретной строке.
02 Код ставится только при однозначном совпадении Если один артикул в справочниках указывает на разные коды, система не выбирает наугад — оставляет строку человеку. Уже проставленные коды она не трогает никогда и не догадывается по цвету или названию.
03 Дубли ищутся отдельно Проверка регулярно выискивает случаи, когда один код расползся между разными товарами, когда у одного товара оказалось два кода и когда позиция осталась без категории. Основную массу таких коллизий разобрали руками, дальше их ловит сторож — и ничего не правит молча, только показывает.
04 Спорные позиции живут в списке исключений Иногда код формально верный, а запись в самом учёте противоречива: у часов 44 мм проставлен вес версии 46 мм. Такие позиции внесены в список с объяснением, почему их не трогают, — иначе ночная сверка возвращала бы их каждую ночь, и человек разбирал бы одно и то же по кругу.
05 Сверка идёт ночью и умеет «показать, но не делать» Раз в сутки система проходит по свежей выгрузке из учёта и заполняет пустые коды. Есть режим, в котором она только отчитывается, что собирается сделать, — им пользуются после каждой крупной правки справочника.
Один товар — один кодАртикул приводится к устойчивому виду, код ставится только при однозначном совпадении, спорное уходит человеку и в список исключений, ночная сверка и сторож дублей держат порядок.ОДНО0 ИЛИ МНОГОСПОРНОЕПУСТЫЕ КОДЫКОЛЛИЗИИАртикул из прайсановая строка поставщикаУстойчивая часть кодабез региональных хвостовСовпаденийв справочниках?Код проставлентолько при однозначном совпаденииСторож дублейничего не правит молчаОдин товар — один кодв прайсе и в учётеСтроку разбирает человеккод не угадывается по цветуСписок исключенийс объяснением, почему не трогатьНочная сверкараз в сутки · пустые кодыначало и конецрешениедействиеключевой шагиногда / возврат

Как строка прайса получает код учёта

→ схему можно листать вбок

Следит
за собой сама

Программа стоит между поставщиками и клиентами: если она остановилась, магазин не видит цен. Самая опасная поломка — та, которую не заметили. В августе связь с WhatsApp оборвалась, а проверка следила только за сайтом, и он отвечал как ни в чём не бывало. Цены не обновлялись двое суток.

После этого надзор переписали: теперь система следит не за тем, что она запущена, а за тем, что она действительно работает.

Надзор11:42
Связь с WhatsApp потеряна. Прайсы не читаются.
12:12 · Связь всё ещё не восстановлена.
12:31 · Связь восстановлена. Догоняю пропущенное: 14 сообщений за 49 минут.

Уведомления для примера

01 Напоминает, пока не починишь Об обрыве связи приходит не одно уведомление, а повторяющееся — и отдельное сообщение о том, что всё восстановилось.
02 Замечает тишину Отдельная проверка смотрит на результат: если в рабочее время прайсы не приходят, об этом сообщают, даже когда связь формально в порядке.
03 Догоняет пропущенное После любого простоя система сама вычитывает сообщения за весь рабочий день и разбирает то, что пропустила. Прайс не теряется из-за перезагрузки сервера.
04 Хранит копии База копируется по расписанию, сообщения поставщиков сохраняются в исходном виде — к любому дню можно вернуться и пересобрать прайс заново.

Что получилось

Утро менеджера освободилось полностью. Прайс собирается сам, сравнивается с конкурентами сам и попадает к клиентам сам. Человек занимается закупками, а не переписыванием цифр.

01 · WhatsApp17 поставщиков пишут как привыкли
→
02 · Разбор и проверкаОдин вид для всехподозрительное — человеку
→
03 · Общий прайсНаценка по весу и маршрутупорог прибыли по каждой позиции
→
04 · КонкурентыДва прайса каждый деньновые цены — одной кнопкой
→
05 · ПубликацияПять каналов и Google-таблицабез участия человека
17 поставщиков читаются автоматически, без единой просьбы поменять формат
2 конкурента сравниваются ежедневно, а новые цены применяются одной кнопкой
1 326 позиций со своей наценкой, которая обновляется сама
5 каналов обновляются без участия человека

Чем сделано: Node.js, SQLite, Claude, Express, Google Sheets, Telegram.
27 240 строк кода · работает каждый день с апреля 2026 · моя роль: архитектура, разработка, поддержка.

Написать в Telegram → ← Все работы Следующий проект · 02 / 07Умный магазин →
Написать