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

Как подключить ИИ-агента к Avito через API

Практическая схема Avito API: ключи, OAuth2, чтение чатов, контекст объявления, ответ, заказы и передача менеджеру.

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

Для подключения ИИ к 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:

python
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. Прочитать чат и объявление

Контур запрашивает свежие чаты, затем сообщения конкретного диалога:

text
GET /messenger/v2/accounts/{account_id}/chats
GET /messenger/v3/accounts/{account_id}/chats/{chat_id}/messages/

Контекст чата содержит объявление, по которому написал клиент. Без него фраза «он ещё есть?» ничего не говорит о товаре. В DOLOROSA автоматически загруженные объявления можно было связать с UUID карточки МойСклада. Когда точной связи не было, система сравнивала название и тип вещи.

После ошибки, где лонгслив сопоставился с брюками того же бренда, тип товара стал обязательным ограничением. Совпавших слов бренда недостаточно.

Шаг 3. Загрузить факты

Агент не должен придумывать данные из текста объявления. В нашем контуре:

  • цену для ответа берём из Avito;
  • остаток проверяем в МойСкладе;
  • состояние, состав и комплект берём из карточки;
  • правила доставки берём из сценариев площадки.

Если связь товара не определена или источники противоречат друг другу, бот не отвечает уверенно и передаёт вопрос менеджеру.

Шаг 4. Дать модели узкие инструменты

Модель получает функции с понятными аргументами:

text
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:

text
POST /messenger/v1/accounts/{account_id}/chats/{chat_id}/messages

Нельзя слепо повторять POST после read-timeout или 502. Avito мог принять сообщение, а ответ сервера не успевал дойти. Перед повтором DOLOROSA перечитывает чат и ищет собственную реплику, появившуюся после начала запроса.

Для фотографий сначала выполняется uploadImages, затем в чат отправляется полученный image_id. Каждая отправка тоже сохраняется в реестре собственных сообщений.

Шаг 6. Отделить заказы от переписки

Системная реплика в чате служит быстрым сигналом. Точный статус заказа загружается через:

text
GET /order-management/1/orders

Переход заказа подтверждает менеджер. В текущей реализации агент сам не вызывает изменение статуса. Это защищает операцию, которая влияет на отгрузку.

Шаг 7. Передать разговор человеку

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

Как проверить интеграцию

Перед автоматическим режимом прогоните:

  1. получение и обновление токена;
  2. чтение тестового чата;
  3. связь объявления с товаром;
  4. пустой остаток;
  5. конфликт цены;
  6. тестовую отправку;
  7. timeout после POST;
  8. ответ менеджера;
  9. перезапуск сервиса;
  10. заказное событие без автоматического перехода.

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

Читайте также: Где получить Client_id и Client_secret Avito и какой доступ нужен, Как связать Avito, МойСклад и Telegram без потери контекста.

Источники

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

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

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

SYS: COOKIE

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