Разбор

ИИ отвечает на отзывы в Авито и 2GIS: схема без шаблонов и стоп-слов

67% клиентов читают ответы на негативные отзывы до первого визита. Большинство бизнесов молчит неделями. Показываю рабочую схему: Python + Claude API + Авито и 2GIS API — агент отвечает в течение часа, каждый ответ уникален.

• 6 мин чтения

Клиент позвонил в автосервис и сказал, что посмотрел их отзывы на 2GIS прямо перед визитом. Один из них — негативный, трёхмесячной давности. Ответа нет до сих пор. Он всё равно приехал, но позвонил сначала, чтобы убедиться что «там не бардак». Это не единичная история — это норма.

67%
клиентов читают ответы бизнеса на негативные отзывы перед первым визитом или покупкой
BrightLocal Local Consumer Review Survey, 2024

Большинство малого бизнеса отвечает на отзывы раз в месяц, если вообще отвечает. Некоторые делегируют это задачу «когда будет время». Времени не бывает. Отзывы копятся, рейтинг ползёт вниз, а потенциальные клиенты уходят к конкуренту с 4.7 вместо 4.2.

Покажу конкретную схему: Python + Claude API + Авито API и 2GIS API. Агент забирает новые отзывы каждые 30 минут, анализирует тональность, генерирует уникальный ответ и публикует его. Без шаблонов. Без стоп-слов. Без ожидания.

Почему шаблонные ответы хуже, чем молчание

Я видел бизнесы с хорошим временем реакции — 2–4 часа на каждый отзыв. Выглядело как работа. Только все ответы были написаны по одному шаблону: «Спасибо за обратную связь! Мы всегда стараемся…». Клиенты замечают. На Флампе и 2GIS есть целые обсуждения про конкретные сети именно из-за этого.

Harvard Business Review в 2018 году проанализировал 4 153 отеля и обнаружил: компании, которые регулярно отвечают на отзывы, получают на 12% больше новых отзывов и рейтинг в среднем выше на 0.12 звезды. Но только если ответы выглядят как живые реакции, а не копипаст.

Задача агента — не просто ответить быстро. Задача — ответить так, чтобы следующий читающий этот отзыв понял: здесь живые люди, которые слышат конкретные претензии.

Четыре типа отзывов и как с ними работать

Классификатор перед генерацией ответа — обязательный шаг. Один и тот же промпт для позитивного и токсичного отзыва даст одинаково плохой результат.

ТипСигналыСтратегия ответаТон
positiveОценка 4–5, позитивная лексика, конкретная похвалаБлагодарность + зеркало конкретики (повторить что именно понравилось) + приглашение вернутьсяТёплый, неформальный
neutralОценка 3, смешанные эмоции, «нормально но»Принять позитивное, адресовать «но» — конкретное обещание или объяснениеДеловой, конструктивный
negativeОценка 1–2, конкретная претензия, описание ситуацииПризнание ошибки + конкретный шаг к решению + личный контакт для урегулированияСерьёзный, без оправданий
toxicОскорбления, угрозы, нет конкретики, признаки PR-атакиФлаг → передать живому человеку. Автоответ не публиковатьНе отвечать автоматически

Граница между negative и toxic тонкая. Claude справляется с этим хорошо, но несколько раз в промпте нужно явно указать признаки токсичности: угрозы репутации, призывы к бойкоту, несколько одинаковых отзывов от разных аккаунтов за один день.

Как работает схема

Поток данных: от нового отзыва до опубликованного ответа
Polling API
каждые 30 мин
Новый отзыв?
Классификация
Claude API
Toxic?
Флаг + алерт
Telegram
Нет
Генерация ответа
Claude API
Публикация
Авито / 2GIS API

Авито API отдаёт отзывы через endpoint /core/v1/ratings/list с параметром limit и курсором для пагинации. Новые отзывы определяются по полю created_at — сравниваем с временем последней проверки. 2GIS для отзывов использует свой API, но в большинстве ниш проще работать через Яндекс Бизнес API, который покрывает отзывы с Карт и нескольких агрегаторов.

Код: классификация и генерация ответа

Это рабочий фрагмент. Переменные вроде AVITO_TOKEN и ANTHROPIC_API_KEY из environment.

PYTHON
import anthropic
import requests
import json
from datetime import datetime, timezone

client = anthropic.Anthropic()

CLASSIFY_PROMPT = """Ты анализируешь отзыв о бизнесе. 
Верни JSON с одним полем "type" одного из значений:
- positive (оценка 4-5, позитивный тон, доволен)
- neutral (смешанные эмоции, оценка 3, есть замечания)
- negative_constructive (конкретная претензия, оценка 1-3, но описывает ситуацию)
- toxic (оскорбления, угрозы, нет конкретики, возможная PR-атака)

Отзыв: {review_text}
Оценка: {rating}/5

Верни только JSON, без объяснений."""

RESPONSE_PROMPTS = {
  "positive": """Ты представитель {business_name}.
Напиши живой, тёплый ответ на позитивный отзыв.
Правила:
- Упомяни конкретно что похвалил клиент (не переформулируй, зеркаль его слова)
- Не используй: "Спасибо за обратную связь", "Мы всегда рады", "Будем рады видеть вас снова"
- Длина: 2-3 предложения
- Тон: как будто отвечает живой человек, а не PR-отдел

Отзыв: {review_text}""",

  "neutral": """Ты представитель {business_name}.
Напиши конструктивный ответ на нейтральный отзыв.
Правила:
- Прими позитивное, адресуй конкретное замечание
- Не оправдывайся, не обещай абстрактно "стать лучше"
- Если замечание конкретное — дай конкретный ответ или шаг
- Длина: 2-4 предложения

Отзыв: {review_text}""",

  "negative_constructive": """Ты представитель {business_name}.
Напиши честный ответ на негативный отзыв с конкретной претензией.
Правила:
- Признай проблему прямо, без "К сожалению, такое бывает"
- Дай конкретный шаг: как урегулировать или что изменилось
- Предложи связаться напрямую (телефон или Telegram — {contact})
- Не оправдывайся и не отрицай факты
- Длина: 3-4 предложения

Отзыв: {review_text}
Оценка: {rating}/5"""
}

def classify_review(review_text: str, rating: int) -> str:
  message = client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=100,
      messages=[{
          "role": "user",
          "content": CLASSIFY_PROMPT.format(
              review_text=review_text,
              rating=rating
          )
      }]
  )
  result = json.loads(message.content[0].text)
  return result["type"]

def generate_response(
  review_type: str,
  review_text: str,
  rating: int,
  business_name: str,
  contact: str
) -> str | None:
  if review_type == "toxic":
      return None  # флагируем, не отвечаем автоматически
  
  prompt_template = RESPONSE_PROMPTS[review_type]
  prompt = prompt_template.format(
      business_name=business_name,
      review_text=review_text,
      rating=rating,
      contact=contact
  )
  
  message = client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=300,
      messages=[{"role": "user", "content": prompt}]
  )
  return message.content[0].text.strip()

def process_review(review: dict, config: dict) -> dict:
  review_type = classify_review(review["text"], review["rating"])
  
  if review_type == "toxic":
      # Отправить алерт в Telegram
      send_telegram_alert(review, config["telegram_token"])
      return {"status": "flagged", "type": "toxic"}
  
  response_text = generate_response(
      review_type=review_type,
      review_text=review["text"],
      rating=review["rating"],
      business_name=config["business_name"],
      contact=config["contact"]
  )
  
  # Публикуем через Авито API
  publish_response(review["id"], response_text, config["avito_token"])
  
  return {"status": "published", "type": review_type}

Два вызова Claude на один отзыв — классификация и генерация. Можно объединить в один промпт, но раздельные вызовы дают чище результат: на первом шаге модель не «загрязнена» контекстом про тон ответа и работает точнее как классификатор.

Промпты для разных ситуаций

Три примера реальных ответов, которые агент генерирует по этим промптам.

Позитивный отзыв (клиент хвалит мастера Дмитрия и быструю диагностику):

«Дмитрий — молодец, за такую скорость диагностики отдельное спасибо. Приятно когда не тянут время. Ждём снова при следующем ТО.»

Нейтральный (сервис хороший, но пришлось ждать полтора часа лишних):

«За ожидание — честно, извините. По пятницам запись плотнее, чем обычно — сейчас тестируем систему уведомлений, чтобы предупреждать заранее. Если поедете снова — скажите при записи, что были, поставим с запасом.»

Негативный с конкретикой (сказали одну цену, взяли другую):

«Ситуация с ценой — серьёзное. Диагностика показала дополнительный расход на прокладку, мастер должен был позвонить до работ, не после. Напишите нам в Telegram @autoservice_example или позвоните +7 999 000-00-00 — разберём конкретно вашу ситуацию и решим.»

Заметьте — никаких «уважаемый клиент», никаких «ваше мнение важно для нас». Просто прямо по существу.

Кейс: автосервис в Москве

Автосервис на три поста, район Бирюлёво. В феврале 2026 года подключили агента на Авито и 2GIS. До этого — менеджер отвечал на отзывы «когда есть время», то есть примерно раз в 10 дней.

Динамика рейтинга — Авито и 2GIS, февраль – апрель 2026
До агента
4.1 ★
Через месяц
4.3 ★
Через 2 мес.
4.5 ★
Через 3 мес.
4.6 ★
Данные: кейс автосервиса, Москва (Бирюлёво), февраль–апрель 2026. Среднее по Авито + 2GIS.

Три конкретных момента из этого кейса, которые удивили:

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

Второе — количество новых отзывов выросло само по себе. Клиенты видят, что бизнес реагирует, и охотнее пишут. За три месяца — 47 новых отзывов против 12 за предыдущие три месяца.

Третье — один раз агент правильно флагировал токсичный отзыв, который оказался частью атаки от конкурента. Три одинаковых аккаунта, зарегистрированных в один день, один и тот же шаблонный текст. Менеджер подал жалобу через личный кабинет 2GIS — отзывы удалили.

Насколько опасен твой рейтинг прямо сейчас

Проверь риски репутации

5 вопросов — честный диагноз за 2 минуты

Вопрос 1 из 5
Ваш текущий рейтинг на Авито или 2GIS?
Вопрос 2 из 5
Как быстро вы обычно отвечаете на негативные отзывы?
Вопрос 3 из 5
Какой процент отзывов остаётся без ответа?
Вопрос 4 из 5
Ваши ответы на отзывы — шаблонные или живые?
Вопрос 5 из 5
Есть ли среди первых 10 отзывов хотя бы один с оценкой 1–2 без ответа?

Что нельзя автоматизировать

Это важнее, чем сам код. Агент не должен отвечать в четырёх ситуациях.

PR-атака. Десять похожих отзывов за два дня, все с оценкой 1, аккаунты зарегистрированы недавно — это координированная атака. Автоответ здесь только добавит контента к атаке. Нужна жалоба на платформу и при необходимости юрист.

Угрозы и правовые претензии. «Подам в суд», «напишу в Роспотребнадзор», «вызову проверку» — такие отзывы требуют живого человека. Автоматический ответ может быть использован против компании.

Скандал с пострадавшим. Кто-то получил травму, есть жертвы, ситуация попала в СМИ — это кризис, а не просто отзыв. Агент не понимает масштаб репутационного ущерба.

Крупный клиент. Если по контексту понятно что пишет корпоративный заказчик или публичная персона — стоит ответить лично.

Хорошая практика — добавить в промпт классификации дополнительный параметр requires_human и обязательно дублировать все флагованные отзывы в Telegram-бот менеджеру.


Готовый код для polling’а Авито API, структура config.json и полные промпты для всех четырёх типов отзывов — по слову РЕПУТАЦИЯ в Telegram.

Источники

Источники

Часто задаваемые вопросы

Можно ли автоматически отвечать на отзывы в Авито и 2GIS без шаблонов?
Да. Claude API анализирует текст каждого отзыва и генерирует уникальный ответ с учётом тональности, конкретных претензий и контекста. Никаких заготовленных фраз — каждый ответ адаптирован под ситуацию. Агент работает через Авито API и 2GIS API, публикует ответ автоматически.
Как классифицировать тип отзыва перед ответом?
Отправляешь текст отзыва в Claude с промптом классификации. Модель возвращает один из четырёх типов: positive, neutral, negative_constructive, toxic. Дальше агент выбирает стратегию ответа: благодарность, признание проблемы + решение, или нейтральный тон без конфронтации.
Сколько стоит автоматизация ответов на отзывы через Claude API?
Claude Sonnet 4.6 стоит $3 за 1 млн входящих токенов и $15 за 1 млн исходящих. Один цикл классификации + генерации ответа занимает примерно 800–1200 токенов. При 100 отзывах в месяц расходы не превысят 15–20 рублей. Основные затраты — разработка агента.
Какие отзывы нельзя обрабатывать автоматически?
PR-атаки с координированными волнами негатива, угрозы судебным иском, скандальные ситуации с публичным резонансом и кризисы с пострадавшими клиентами. Агент должен флагировать такие отзывы и передавать живому человеку без попытки ответить автоматически.
Как измерить результат автоматических ответов на отзывы?
Три метрики: рейтинг на платформе до/после (смотреть через 30, 60, 90 дней), время ответа (должно снизиться с нескольких дней до 1 часа), процент отзывов с ответом (цель — 100%). В реальном кейсе автосервиса в Москве рейтинг вырос с 4.1 до 4.6 за 3 месяца.
Нужен ли доступ к Авито API для автоматических ответов?
Да. Авито предоставляет API для работы с отзывами — нужен токен через OAuth. 2GIS имеет закрытый API для партнёров, но для многих ниш работает через API Яндекс Бизнеса. Полинг новых отзывов делается каждые 15–30 минут, webhook-подписка доступна в PRO-тарифах.
Обсуждение

    Пока без комментариев. Будьте первым.

    Войдите, чтобы отправить комментарий

    Вы сможете комментировать статьи, сохранять материалы

    или войдите по email

    Бесплатная диагностика · 30 минут · без обязательств

    Маркетинг работает, но продажи не растут?

    Отвечу на 3–5 вопросов о вашем бизнесе — и мы вместе разберём, где именно теряются клиенты и что с этим делать.

    Без продаж. Без навязчивых звонков.