Двусторонняя синхронизация amoCRM и ABCP: статусы возвратов и этапы воронки. Node.js, TypeScript
Заказчик - интернет-магазин автозапчастей: продажи на платформе ABCP, клиенты и возвраты в amoCRM. Менеджер по возвратам работал в двух окнах: решение принимал в сделке, а статус позиции руками переставлял в ABCP. Обратно данные не ходили вовсе: если статус менял склад или автоматика ABCP, сделка об этом не узнавала.
Сделал сервис на Node.js и TypeScript (Express), который держит обе системы синхронными. Прямой канал: вебхук amoCRM => статус позиции в ABCP через REST API, соответствия в конфиге, без правки кода. Обратный канал: раз в 5 минут опрос истории статусов ABCP, отпечаток последней обработанной записи по каждой позиции, событие уходит в сделку одним запросом - поле плюс этап воронки, дальше срабатывает автоматизация клиента. Защита от эха собственных записей, дедупликация, очередь под лимиты amoCRM, бисекция пачек ABCP, поэтапное включение через DRY-RUN. Деплой на сервер заказчика одним пушем через GitHub Actions с проверкой здоровья.
Итог: менеджер работает в одном окне, статусы в обеих системах совпадают, сделки едут по воронке сами. Около 5 000 сделок, около 800 позиций под наблюдением, недели работы без перезапусков. Работа шла в два этапа, проект продолжается.