Для подключения ИИ к Avito нужен доступ к API аккаунта, Client_id и Client_secret, серверный OAuth2-токен и отдельная логика работы с чатами. Агент читает сообщение вместе с контекстом объявления, получает факты из учётной системы, формирует ответ и отправляет его через Messenger API. События заказа проверяются отдельным Order Management API. В проекте DOLOROSA мы добавили Telegram-хаб и правило молчания после ответа менеджера.
Что получить до разработки
На публичной странице Avito для бизнеса ключи указаны в разделе Для профессионалов → API. Доступность конкретных методов и scopes нужно проверять в кабинете нужного аккаунта на дату подключения. Нельзя обещать, что любой тариф автоматически откроет весь API.
Нужны:
Client_idиClient_secret;- ID подключённого профиля;
- подтверждённые права чтения и отправки сообщений;
- решение, откуда брать цену, наличие и описание товара;
- тестовый чат и безопасный режим без отправки клиенту.
Секреты хранятся в переменных окружения или хранилище секретов. Они не передаются модели и не попадают в журнал.
Шаг 1. Получить OAuth2-токен
В рабочем коде DOLOROSA использован client_credentials:
import os
import requests
response = requests.post(
"https://api.avito.ru/token/",
data={
"grant_type": "client_credentials",
"client_id": os.environ["AVITO_CLIENT_ID"],
"client_secret": os.environ["AVITO_CLIENT_SECRET"],
},
headers={"Content-Type": "application/x-www-form-urlencoded"},
timeout=(5, 25),
)
response.raise_for_status()
token = response.json()["access_token"]Сервис кэширует токен и обновляет его до истечения срока. Значение токена в логи не выводится.
Шаг 2. Прочитать чат и объявление
Контур запрашивает свежие чаты, затем сообщения конкретного диалога:
GET /messenger/v2/accounts/{account_id}/chats
GET /messenger/v3/accounts/{account_id}/chats/{chat_id}/messages/Контекст чата содержит объявление, по которому написал клиент. Без него фраза «он ещё есть?» ничего не говорит о товаре. В DOLOROSA автоматически загруженные объявления можно было связать с UUID карточки МойСклада. Когда точной связи не было, система сравнивала название и тип вещи.
После ошибки, где лонгслив сопоставился с брюками того же бренда, тип товара стал обязательным ограничением. Совпавших слов бренда недостаточно.
Шаг 3. Загрузить факты
Агент не должен придумывать данные из текста объявления. В нашем контуре:
- цену для ответа берём из Avito;
- остаток проверяем в МойСкладе;
- состояние, состав и комплект берём из карточки;
- правила доставки берём из сценариев площадки.
Если связь товара не определена или источники противоречат друг другу, бот не отвечает уверенно и передаёт вопрос менеджеру.
Шаг 4. Дать модели узкие инструменты
Модель получает функции с понятными аргументами:
get_listing_context(chat_id)
check_stock(product_id)
get_product_facts(product_id)
send_text(chat_id, checked_text)
handoff(chat_id, reason)Перед отправкой код проверяет факты о цене, наличии, состоянии и сроках. В DOLOROSA неподтверждённые фразы удалялись. Если после удаления ответ терял смысл, система создавала эскалацию.
Шаг 5. Отправить сообщение без дубля
Текст отправляется в группу Messenger API:
POST /messenger/v1/accounts/{account_id}/chats/{chat_id}/messagesНельзя слепо повторять POST после read-timeout или 502. Avito мог принять сообщение, а ответ сервера не успевал дойти. Перед повтором DOLOROSA перечитывает чат и ищет собственную реплику, появившуюся после начала запроса.
Для фотографий сначала выполняется uploadImages, затем в чат отправляется полученный image_id. Каждая отправка тоже сохраняется в реестре собственных сообщений.
Шаг 6. Отделить заказы от переписки
Системная реплика в чате служит быстрым сигналом. Точный статус заказа загружается через:
GET /order-management/1/ordersПереход заказа подтверждает менеджер. В текущей реализации агент сам не вызывает изменение статуса. Это защищает операцию, которая влияет на отгрузку.
Шаг 7. Передать разговор человеку
В Avito все исходящие сообщения выглядят как сообщения одного аккаунта. Поэтому DOLOROSA хранит ID собственных отправок. Неизвестная исходящая реплика считается ответом сотрудника, после чего агент замолкает.
Как проверить интеграцию
Перед автоматическим режимом прогоните:
- получение и обновление токена;
- чтение тестового чата;
- связь объявления с товаром;
- пустой остаток;
- конфликт цены;
- тестовую отправку;
- timeout после POST;
- ответ менеджера;
- перезапуск сервиса;
- заказное событие без автоматического перехода.
Geron Labs может разобрать один реальный диалог и показать схему API, источников и ручных остановок до подключения рабочего аккаунта.
Читайте также: Где получить Client_id и Client_secret Avito и какой доступ нужен, Как связать Avito, МойСклад и Telegram без потери контекста.
Источники
- Avito для бизнеса, Messenger и ключи API: avito.akamaized.net/business/tools/messenger (проверено 28.09.2026).
- Разбор связки Avito, МойСклада и Telegram: на сайте, история проекта на vc.ru.