Автоматизация Авито своими руками — это не одна программа, а несколько связанных частей: доступ к API, приём событий, хранилище диалогов, логика ответа и дежурство человека поверх всего этого. Ниже — честный план: что именно придётся написать, в каком порядке и где вы почти наверняка споткнётесь.
Короткий ответ на главный вопрос: сделать можно, и это не rocket science. Прототип, который отвечает на одно объявление, собирается за пару вечеров. Система, которой можно доверить сотню диалогов в неделю без присмотра, — это уже недели работы, потому что почти весь код там про ошибки, а не про счастливый сценарий.
Из чего состоит система
Разложим на слои, чтобы было видно объём:
- Доступ. Приложение в кабинете Авито, пара ключей, обмен их на токен, обновление токена по расписанию.
- Приём событий. Либо периодический опрос новых сообщений, либо подписка на уведомления по вебхуку. Второе быстрее, но требует публичного адреса с HTTPS.
- Хранилище. Таблица диалогов и таблица обработанных сообщений. Без неё вы не отличите новое сообщение от повторно доставленного.
- Логика ответа. Сценарий на правилах, языковая модель или их смесь. Здесь же — база фактов о вашем товаре, иначе бот начнёт сочинять.
- Эскалация. Правило, по которому диалог передаётся человеку, и канал уведомления — почта, мессенджер, звонок.
- Наблюдение. Логи, счётчик ошибок, оповещение о том, что бот молчит уже час.
Каждый пункт по отдельности несложен. Сложна их совместная работа под нагрузкой и в ночь с субботы на воскресенье, когда вы спите.
План серии
Эта статья — оглавление. Дальше мы разбираем каждый узел отдельно: с чего начать работу с API площадки и как устроено приложение в кабинете; как принимать вебхуки и почему их обязательно доставляют дважды; как жить с токенами, которые истекают в середине диалога; как выглядит скелет бота-ответчика на Python и куда его класть, чтобы он не падал.
Прежде чем писать первую строчку, прочитайте разбор API мессенджера Авито — там про тарифы площадки и про то, что через API можно, а что запрещено. Это условия, которые вы не измените кодом, и от них зависит, имеет ли смысл вся затея.
Шаг 1. Доступ и токены
Порядок такой: создаёте приложение в кабинете Авито, получаете идентификатор и секрет, обмениваете их на токен доступа, дальше все запросы идут с этим токеном в заголовке. Точные адреса и имена полей смотрите в официальной документации Авито — они меняются, и переписывать их по памяти в статью было бы вредительством.
Подводный камень здесь один, зато болезненный: токен истекает. Не «когда-нибудь», а посреди рабочего дня, часто ровно между тем моментом, когда покупатель написал, и тем, когда вы собрались ответить. Наивный код, который получает токен при старте и держит его в переменной, работает ровно до первого истечения, а потом молча перестаёт отвечать. Правильное поведение: хранить срок жизни, обновлять заранее и обязательно уметь повторить запрос один раз, если пришёл отказ по авторизации. Подробности — в отдельной статье про токены.
Шаг 2. Получение сообщений
Опрос проще: раз в N секунд спрашиваете список непрочитанных чатов, разбираете новые сообщения. Минусы — задержка и расход лимитов запросов.
Вебхук быстрее: площадка сама стучится в ваш адрес, когда что-то произошло. Минусы — нужен сервер с публичным HTTPS и валидным сертификатом, и нужно быть готовым к двум вещам. Первая: одно событие доставят дважды. Так устроены все системы доставки уведомлений — при таймауте или ошибке на вашей стороне они повторяют попытку, и это правильно. Значит, у каждого входящего сообщения должен быть идентификатор, который вы записываете в таблицу и проверяете перед обработкой. Вторая: пока вы обрабатываете, придёт следующее событие. Отвечать нужно быстро — принял, положил в очередь, вернул успех, — а думать уже в фоне.
Шаг 3. Очередь и гонки
Покупатель редко пишет одно сообщение. Обычно это «Здравствуйте», через две секунды «Ещё продаёте?», ещё через три — «Торг возможен?». Если каждое обрабатывать независимо и параллельно, бот ответит тремя репликами подряд, причём вразнобой. Выглядит это ровно так, как выглядит: как робот.
Лечится двумя приёмами. Первый — блокировка на уровне диалога: одновременно обрабатывается только один чат, остальные события по нему ждут. Второй — небольшая пауза перед ответом, за которую успевают приехать «дописанные» сообщения, и тогда бот отвечает на всё разом. Пауза заодно убирает эффект мгновенного ответа за миллисекунду, который сразу выдаёт автомат.
Если писать всё это самому не хочется, готовый путь тоже есть: «Папа БУ» закрывает те же слои — доступ, приём сообщений, ответы вашими словами, отсев нецелевых и передачу готовых покупателей вам.
Шаг 4. Ответы и границы
Отвечать шаблонами дёшево и предсказуемо, но покупатель почти всегда спрашивает не то, что вы предусмотрели. Языковая модель гибче, но у неё есть привычка отвечать уверенно на то, чего не знает: придумать наличие, скидку и доставку. Поэтому боту нужна короткая база фактов — что продаём, цена, что с торгом, что с доставкой, — и явное правило: чего нет в фактах, того не обещаем, а зовём человека.
Сюда же — фильтр нецелевых. Часть обращений это спам и предложения услуг, часть — «отдам даром?». Их надо закрывать вежливо и не тратить на них внимание. О том, как это выглядит в готовом виде, — в разборе чат-ботов для Авито и в статье про автоматизацию продаж на Авито в целом.
Шаг 5. Эскалация и дежурство
Бот нужен не чтобы заменить продавца, а чтобы довести покупателя до момента, когда разговор стоит вашего времени. Значит, нужны правила передачи: клиент назвал сумму, спросил про оплату, попросил человека, начал раздражаться. И нужен канал, который вы реально видите: уведомление в мессенджер работает, письмо на почту — обычно нет.
Шаг 6. Хостинг и наблюдение
Минимум: небольшой сервер, автозапуск сервиса, логи с ротацией и отдельная проверка «жив ли бот». Хороший индикатор — время с момента последнего успешно отправленного ответа. Если оно больше часа в рабочее время, что-то сломалось: истёк токен, изменился формат ответа, кончились лимиты.
Про лимиты стоит сказать отдельно. У площадки есть ограничения на частоту запросов, и они не бесконечны. Код должен уметь получить отказ «слишком часто», подождать и повторить, а не падать в цикл повторов, который добьёт остаток лимита.
Когда этот путь не подходит
- У вас один-два диалога в день. Автоматизация окупится примерно никогда, отвечайте руками.
- Некому чинить. Своё решение требует владельца. Если единственный человек, понимающий код, уйдёт в отпуск, бот сломается в его отсутствие.
- Товар сложный и меняется каждый день. Тогда основная работа не в коде, а в поддержании базы фактов, и её всё равно придётся делать руками.
- Вы ждёте автопостинга и парсинга. Через официальный доступ этого не сделать, а неофициальные пути ведут к блокировке аккаунта.
Коротко
Автоматизация Авито своими руками — это доступ и токены, приём сообщений, защита от повторов и гонок, логика ответа с базой фактов, эскалация человеку и дежурство за сервером. Прототип — несколько вечеров. Надёжная версия — недели, и большая часть кода будет про ошибки, а не про диалог. Цифры сроков здесь для примера: они сильно зависят от вашего опыта и от того, сколько диалогов вы готовы потерять на отладке.
Если хочется сначала посмотреть, как это работает, а решение писать или подключать принимать потом, — самый быстрый способ увидеть свои же диалоги в автоматическом режиме здесь.
Если решение под свой бизнес нужно, а разбираться самому некогда — напишите мне в Telegram: @artem_sergeevic. Я делаю такие сервисы на заказ: обсудим задачу и честно разберём, что в ней действительно нужно, а что можно не делать вовсе.