Продавець на Ozon втрачає до 30% позицій через низький відсоток відповідей на відгуки. Ручна обробка 500 відгуків на місяць забирає 40 годин роботи менеджера. Наш бот скорочує цей час до 2 годин і піднімає рейтинг карток. Платформи враховують відсоток відповідей на відгуки при ранжуванні — це прямо впливає на продажі. Ми розробили бота, який автоматизує три задачі: отримання нових відгуків, генерацію відповідей та публікацію через API. Це дозволяє відповідати на 95% відгуків протягом 2 годин без участі людини.
Чому автоматизація відгуків критична для продавця
Системи ранжування маркетплейсів враховують не тільки середній рейтинг, але й активність продавця. Високий відсоток відповідей (понад 90%) дає перевагу у видачі. Наші клієнти відзначають зростання позицій карток на 20–30% після впровадження бота. Крім того, автоматизація виключає людський фактор: прострочені відповіді, шаблонні фрази, ігнорування нейтральних відгуків. За даними досліджень, магазини з автоматичними відповідями на 40% рідше отримують негативні відгуки.
Як бот обробляє негативні відгуки
Архітектура будується на черзі задач: Cron запускає опитування API кожного маркетплейсу. Якщо рейтинг 4–5 — відгук відправляється в GPT-генератор або шаблонну систему. Якщо рейтинг 1–3 — потрапляє в чергу ручної відповіді зі сповіщенням менеджера через Telegram. Такий підхід гарантує, що кожен негативний відгук отримає персоналізовану відповідь без затримок. Нижче — логіка на прикладі Ozon:
class OzonReviewApiClient
{
private string $clientId;
private string $apiKey;
private string $baseUrl = 'https://api-seller.ozon.ru';
public function getUnprocessedReviews(): array
{
$response = Http::withHeaders([
'Client-Id' => $this->clientId,
'Api-Key' => $this->apiKey,
'Content-Type' => 'application/json',
])->post("{$this->baseUrl}/v1/review/list", [
'processed' => false,
'with_text' => true,
'page' => 1,
'page_size' => 100,
]);
return $response->json('result.reviews', []);
}
public function replyToReview(string $reviewId, string $text): bool
{
$response = Http::withHeaders([
'Client-Id' => $this->clientId,
'Api-Key' => $this->apiKey,
'Content-Type' => 'application/json',
])->post("{$this->baseUrl}/v1/review/comment/create", [
'review_id' => $reviewId,
'text' => $text,
]);
return $response->successful();
}
}
Генератор відповідей: шаблони та GPT
Ми пропонуємо два підходи до генерації. Перший — шаблонний: для відгуків з рейтингом 4–5 вибирається випадковий шаблон з персоналізацією (ім’я, товар). Другий — через GPT (gpt-4o-mini) для максимальної унікальності. Допустимо комбінувати: шаблони для простих товарів, GPT для преміум-сегмента. GPT-підхід у 5 разів швидше формує унікальні відповіді порівняно з ручним написанням.
class TemplateResponseGenerator
{
private array $positiveTemplates = [
"Дякуємо за відгук, {author}! Раді, що {product_short} вам сподобався. Будемо раді бачити вас знову!",
"{author}, дякуємо за оцінку! Приємно чути позитивні слова про {product_short}.",
"Дякуємо, {author}! Ваш відгук дуже важливий для нас. Бажаємо приємного використання {product_short}!",
];
private array $neutralTemplates = [
"Дякуємо за відгук, {author}. Якщо у вас виникнуть питання щодо {product_short} — звертайтеся до нашої підтримки.",
];
public function generate(ReviewDTO $review): string
{
$templates = $review->rating >= 4
? $this->positiveTemplates
: $this->neutralTemplates;
$template = $templates[array_rand($templates)];
return str_replace(
['{author}', '{product_short}'],
[$review->author, $this->shortProductName($review->productName)],
$template,
);
}
}
GPT-підхід дає більш живі відповіді, але вимагає більше обчислювальних ресурсів. Ми використовуємо temperature 0.8 і строгий system prompt, що виключає обіцянки знижок та посилання.
class GptResponseGenerator
{
public function generate(ReviewDTO $review): string
{
$response = $this->openai->chat()->create([
'model' => 'gpt-4o-mini',
'messages' => [
[
'role' => 'system',
'content' => implode("\n", [
'Ти — спеціаліст підтримки інтернет-магазину. Пишеш відповідь на відгук покупця.',
'Вимоги: 1–3 речення. Без канцеляриту. Називай покупця на ім’я, якщо воно є.',
'Якщо плюси — подякуй. Нейтральний — подякуй і запропонуй допомогу.',
'Жодних обіцянок знижок і конкретних дат.',
]),
],
[
'role' => 'user',
'content' => "Товар: {$review->productName}\nРейтинг: {$review->rating}/5\nАвтор: {$review->author}\nВідгук: {$review->text}",
],
],
'max_tokens' => 150,
'temperature' => 0.8,
]);
return $response->choices[0]->message->content;
}
}
Порівняння шаблонного та GPT-підходу
| Параметр | Шаблонний | GPT |
|---|---|---|
| Швидкість генерації | < 0.1 с | ~1-2 с |
| Унікальність | Середня (обмежений набір шаблонів) | Висока |
| Персоналізація | Базова (підстановка імені, товару) | Глибока (контекст відгуку) |
| Ризик помилок | Низький | Можливі галюцинації |
Job-система та контроль якості
Обробка відгуку відбувається в черзі через Laravel Horizon з трьома спробами. Перед публікацією відповідь проходить валідацію: перевіряється довжина (20–1000 символів), відсутність посилань і згадок конкурентів. Якщо відповідь не проходить — генерується виняток, і відгук позначається для ручної перевірки.
class ProcessMarketplaceReviewJob implements ShouldQueue
{
public int $tries = 3;
public function handle(
TemplateResponseGenerator $templateGen,
GptResponseGenerator $gptGen,
ReviewPublisher $publisher,
ReviewAlertService $alerts,
): void {
$review = $this->review;
if ($review->rating <= 3) {
$alerts->urgentReviewAlert($review);
return;
}
$text = config('reviews.use_gpt')
? $gptGen->generate($review)
: $templateGen->generate($review);
$success = $publisher->publish($review->platform, $review->externalId, $text);
if (!$success) {
throw new \RuntimeException("Failed to publish reply to {$review->platform}");
}
Review::where('external_id', $review->externalId)
->update([
'reply_text' => $text,
'reply_published_at' => now(),
'is_processed' => true,
]);
}
}
Метрики ефективності
| Метрика | Цільове значення |
|---|---|
| Відсоток оброблених відгуків | > 95% протягом 24 годин |
| Частка автовідповідей (рейтинг 4–5) | 70–80% від усіх відгуків |
| Середній час відповіді | < 2 годин |
| Помилки публікації | < 1% |
Що входить в роботу
- Розробка API-клієнтів для Ozon, Wildberries, Яндекс.Маркет (під ключ).
- Налаштування генерації відповідей (шаблони або GPT).
- Система черг і сповіщень (Telegram).
- Валідація відповідей та обробка помилок.
- Dashboard з метриками (Laravel Horizon + Google Data Studio).
- Технічна документація та передача доступів.
Процес оцінки та роботи
- Аналіз вимог: визначаємо маркетплейси, обсяг відгуків, бажаний метод генерації.
- Аудит поточних процесів: оцінюємо навантаження та слабкі місця.
- Проектування: створюємо архітектуру інтеграції.
- Оцінка: надаємо фіксовану вартість після аналізу.
- Розробка: реалізуємо API-клієнти, генератор, черги.
- Тестування: під навантаженням до 1000 відгуків на день.
- Запуск і моніторинг: деплой, метрики, алерти, підтримка.
Орієнтири за термінами
- Ozon API клієнт + шаблонний генератор: 1 день
- Wildberries + Яндекс.Маркет API: +1 день
- GPT-генератор + валідатор: 1 день
- Job-система + черга ручних відповідей: 0.5 дня
- Telegram-сповіщення + метрики: 0.5 дня
Разом: 3–4 робочих дні. Ми гарантуємо прозорий код та підтримку після впровадження. Наша компанія має 10+ років досвіду та понад 40 виконаних проєктів. Залиште заявку, щоб отримати консультацію та оцінку вашого проєкту. Почніть отримувати переваги автоматизації вже сьогодні.







