Все статьи
Avito // Geron Labs

Как связать Avito, МойСклад и Telegram без потери контекста

Схема из проекта DOLOROSA: чат Avito, остаток МойСклада и Telegram-хаб менеджеров. Цены расходились у 14 из 16 товаров, что с этим делать.

Автор: Сергей Сидоров, основатель Geron Labs 29.09.2026 Код, API и границы решения

В этой связке Avito отвечает за объявление, переписку и заказ, МойСклад хранит карточку и остаток, а Telegram становится рабочим хабом менеджеров. Сервер связывает chat_id с товаром и темой Telegram, проверяет наличие перед ответом и сохраняет ID собственных сообщений. Менеджер видит весь контекст и может продолжить диалог из Telegram, после его ответа ИИ-агент замолкает. Схема взята из проекта DOLOROSA — магазина винтажа и люксового ресейла, где каждая вещь существует в одном экземпляре, а ошибка в цене или наличии сразу влияет на сделку.

Почему одной интеграции недостаточно

В DOLOROSA сообщения Avito отображались внутри интерфейса интеграции UnitXML, но МойСклад не отдавал этот чат через свой API. Поэтому переписку подключили напрямую через Avito Messenger API, заказы проверяли через Avito Orders API, а МойСклад оставили источником товарных данных и задач. Канал опрашивает новые сообщения каждые пять секунд: вебхук на этом этапе не понадобился, потому что правила ответа всё равно дают менеджеру короткую паузу. Подробнее о выборе — в статье «Webhook или polling для Avito».

Получилась схема:

text
Avito Messenger API
  ↕ сообщения и объявление
integration service
  ↔ МойСклад: карточка, остаток, задачи
  ↔ Telegram: тема диалога, ответы, события заказа

Как связать объявление с товаром

Для части автоматически загруженных объявлений ad_id совпадал с UUID карточки МойСклада. Это давало точную связь. Для остальных использовалось сопоставление названия и типа товара.

Сравнение только по бренду оказалось опасным. «Лонгслив Jean Paul Gaultier» сопоставился с карточкой «Брюки Jean Paul Gaultier»: три слова совпали, но все они относились к бренду. После этого категория вещи стала обязательной проверкой, а одного совпавшего бренда недостаточно.

Если точной связи нет, система просит уточнение или создаёт задачу. Она не выбирает ближайшую карточку молча.

Разделить цену и остаток

На первых живых объявлениях мы сравнили цены Avito и карточек: у 14 из 16 позиций цена в МойСкладе была ниже. Сумка Bottega Veneta стоила на Avito 69 900 ₽, а в карточке — 53 000 ₽; у юбки Embody — 7 383 ₽ против 4 799 ₽. Если просто передать модели карточку, она назовёт найденную сумму и случайно даст скидку, которую магазин не согласовывал. Поэтому источник выбирается по смыслу:

  • клиенту в Avito показывается цена объявления;
  • наличие проверяется в МойСкладе;
  • состояние и характеристики берутся из карточки;
  • конфликт отправляется менеджеру.

Клиент МойСклада использует Bearer token и официальный JSON API. Для задачи менеджеру применяется POST /entity/task. Длинный контекст, который не помещается в описание, добавляется примечанием.

Telegram как бесшовный хаб

Каждый новый диалог получает отдельную тему форума Telegram. В ней показываются товар, фотография, ссылка на объявление, сообщения клиента, ответы агента и статусы заказа. Прямой канал собрали 4 августа, в первом аудите было уже 29 связей «диалог Avito → тема Telegram».

Первая версия требовала команду /send. Менеджеры писали обычный текст и не понимали, почему он не ушёл. Правило изменили:

  • обычный текст отправляется клиенту;
  • сообщение с маркером заметки остаётся внутри команды;
  • успешная отправка подтверждается реакцией;
  • ошибка отображается словами.

Маршрут ответа:

text
Telegram update
  → проверить разрешённую группу
  → получить topic_id
  → найти связанный chat_id
  → отправить через Avito
  → сохранить message_id
  → подтвердить доставку в теме

Как агент не перебивает менеджера

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

После этого включается manager gate. Агент перестаёт отвечать автоматически и продолжает только зеркалировать контекст. Такой же гейт срабатывает после сообщения из Telegram.

Заказы идут отдельным потоком

Системная реплика в чате ускоряет реакцию, но статус подтверждает Orders API. Telegram получает отдельную карточку: товар, статус и действие менеджера. Оплаченный заказ не смешивается с обычным вопросом о наличии.

Сбои, которые стоит предусмотреть

  • цена в двух системах расходится;
  • тип товара определён неверно;
  • Avito принял сообщение, но вернул timeout;
  • manager gate не увидел ответ сотрудника;
  • Telegram webhook конфликтует с polling — у нас старый webhook RetailCRM дал 22 490 одинаковых ошибок, и бот не получил ни одного сообщения, хотя интерфейс выглядел готовым;
  • тестовый режим пишет в рабочую группу;
  • задача МойСклада требует исполнителя;
  • перезапуск поднимает старые сообщения.

Каждый такой случай в DOLOROSA получил кодовую проверку или состояние на диске. Общего правила в промте для такой защиты недостаточно.

Что показал тестовый прогон

Перед включением ответов мы гоняли 62 сценария через боевой путь с отключённой отправкой в Avito. Главная находка: агент повторно проверял наличие, хотя остаток уже был загружен, и в 38 из 67 ходов подставлял в проверку не тот товар — 28 раз название вместо UUID, 10 раз UUID чужой вещи. Предзагруженные результаты начали регистрироваться в модуле проверки, а поиск по каталогу запускается только по явной просьбе покупателя показать другое.

После этих правок:

МетрикаДоПосле
Пройдено сценариев из 622246
Медианное время хода2,59 с1 с

Ещё один класс ошибок — модель дописывает то, чего нет в карточке: «без потёртостей и дефектов» при пустом поле дефектов или «отправим уже завтра», хотя срок показывает площадка. Такие фразы перестали лечить промтом: перед отправкой код ищет подтверждение каждого факта о состоянии, материале и сроке в карточке, неподтверждённое предложение вырезается или уходит менеджеру. Как устроен сам агент на Avito API, разобрано в статье «Как подключить ИИ-агента к Avito через API».

Как проверить связку

Пройдите один тестовый диалог от сообщения до темы Telegram. Ответьте из Avito и убедитесь, что агент замолчал. Ответьте из Telegram и проверьте доставку. Измените остаток, создайте тестовое заказное событие, перезапустите сервис. Ни одно действие не должно повториться.

Geron Labs может собрать такой хаб вокруг одного канала и одной учётной системы, а затем расширить схему после проверки менеджерами.

Источники

Разбор процесса

Нужна такая же схема у вас?

Пришлите один реальный сценарий: заявку, переписку или файл. Покажем, где нужен ИИ, какие API понадобятся и во что обойдётся пилот. Простой агент с несколькими функциями — в среднем от $500.

SYS: COOKIE

Мы используем технические cookies для корректной работы сайта. Политика конфиденциальности