Разработка бота для автоматического ответа на вопросы клиентов на маркетплейсах
Продавцы на Ozon, Wildberries, Яндекс.Маркет ежедневно получают десятки типовых вопросов: «есть ли в наличии», «какой размер», «когда доставят». Бот с LLM-обработкой отвечает на стандартные вопросы за секунды и эскалирует нестандартные менеджеру.
Архитектура
Маркетплейс API (polling / webhook)
↓
Question Classifier
↙ ↘
Шаблонный ответ LLM-генерация
(FAQ-база) (OpenAI / Claude)
↓ ↓
Auto-Reply Проверка менеджером
↓
Marketplace API → Отправка ответа
Получение вопросов через API маркетплейса
# Ozon Seller API — получение новых вопросов
import httpx
class OzonQAClient:
def __init__(self, client_id: str, api_key: str):
self.headers = {
'Client-Id': client_id,
'Api-Key': api_key,
}
def get_unanswered_questions(self) -> list:
resp = httpx.post(
'https://api-seller.ozon.ru/v1/qa/list',
headers=self.headers,
json={'status': 'without_answer', 'page_size': 50}
)
return resp.json().get('result', {}).get('questions', [])
def reply(self, question_id: str, answer_text: str) -> bool:
resp = httpx.post(
'https://api-seller.ozon.ru/v1/qa/answer/seller',
headers=self.headers,
json={'question_id': question_id, 'text': answer_text}
)
return resp.status_code == 200
Классификация и генерация ответа
from openai import OpenAI
client = OpenAI()
FAQ_CONTEXT = """
Вы — помощник продавца на маркетплейсе. База знаний:
- Доставка: 3-7 дней по России, СДЭК или Почта России
- Гарантия: 12 месяцев на все товары
- Возврат: в течение 14 дней
- Оплата: картой, СБП, наличными при получении
"""
def generate_answer(question: str, product_info: dict) -> dict:
system_prompt = FAQ_CONTEXT + f"\n\nТовар: {product_info['name']}\n{product_info['description']}"
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': system_prompt},
{'role': 'user', 'content': question},
],
temperature=0.3,
)
answer = response.choices[0].message.content
# Определяем уверенность через отдельный запрос
confidence = classify_confidence(question, answer)
return {
'answer': answer,
'confidence': confidence, # 0.0 — 1.0
'auto_send': confidence >= 0.85
}
Эскалация на менеджера
Вопросы с низкой уверенностью бота идут на проверку:
if not result['auto_send']:
# Отправляем менеджеру в Telegram с кнопками
await telegram.send_message(
chat_id=MANAGER_CHAT,
text=f"❓ Вопрос по товару \"{product['name']}\"\n\n"
f"Вопрос: {question}\n\n"
f"Предлагаемый ответ:\n{result['answer']}",
reply_markup=InlineKeyboardMarkup([[
InlineKeyboardButton("✅ Отправить", callback_data=f"approve:{question_id}"),
InlineKeyboardButton("✏️ Изменить", callback_data=f"edit:{question_id}"),
]])
)
Сроки
Бот с LLM-ответами для одного маркетплейса, Telegram-эскалацией: 5–8 рабочих дней.







