AI-автоответы на комментарии и личные сообщения
SMM-менеджер ежедневно тратит 2–3 часа на однотипные ответы: «спасибо за комментарий», «напишите нам на почту», «да, доставляем в ваш регион». При объёме 100+ сообщений в день — это чисто механическая работа, которую AI закрывает на 70–80%. Цель — не заменить человеческое общение, а дать команде заниматься только сложными кейсами, требующими эмпатии и экспертизы.
Возьмите типичный интернет-магазин с тремя площадками — Instagram, ВКонтакте, Telegram-канал. Ежедневно 180–250 комментариев и DM. Один SMM-специалист и помощник на полставки тонут в рутине. Мы внедрили систему автоответов для такого магазина косметики. Результаты за 6 недель: автоматически закрыто 73% сообщений (вопросы о составе, доставке, наличии), среднее время ответа упало с 4–6 часов до 3 минут, жалобы на задержки свыше 2 часов снизились на 89%. SMM-специалист переключился на создание контента и стратегию.
Как работает классификация сообщений?
Прежде чем отвечать — нужно понять тип сообщения: простой вопрос о продукте, жалоба, токсичный комментарий или запрос, требующий экспертизы. Для этого используется классификатор на базе Claude Haiku.
from anthropic import Anthropic
import json
from enum import Enum
client = Anthropic()
class MessageCategory(str, Enum):
PRODUCT_QUESTION = "product_question"
ORDER_STATUS = "order_status"
COMPLAINT = "complaint"
PRAISE = "praise"
TOXIC = "toxic"
IRRELEVANT = "irrelevant"
REQUIRES_HUMAN = "requires_human"
SALES_INQUIRY = "sales_inquiry"
class MessageClassifier:
CLASSIFY_PROMPT = """Классифицируй сообщение клиента в социальных сетях.
Верни JSON:
{
"category": "product_question|order_status|complaint|praise|toxic|irrelevant|requires_human|sales_inquiry",
"sentiment": "positive|neutral|negative",
"urgency": "low|medium|high",
"language": "ru|en|uk|other",
"auto_reply_possible": true/false,
"extracted_entities": {
"product": "упомянутый продукт или null",
"order_number": "номер заказа или null",
"location": "город/регион или null"
}
}
Только JSON."""
def classify(self, message: str, context: dict = {}) -> dict:
"""Классифицирует входящее сообщение"""
context_text = ""
if context.get("post_text"):
context_text = f"\nКонтекст поста: {context['post_text'][:200]}"
if context.get("username"):
context_text += f"\nОт пользователя: {context['username']}"
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=256,
messages=[{
"role": "user",
"content": f"{self.CLASSIFY_PROMPT}{context_text}\n\nСообщение: {message}"
}],
)
text = response.content[0].text
return json.loads(text[text.find("{"):text.rfind("}") + 1])
class AutoReplyGenerator:
"""Генератор автоответов с учётом бренд-голоса"""
def __init__(self, brand_config: dict):
"""
brand_config: {
name: "Название компании",
tone: "дружелюбный и неформальный" | "профессиональный",
products: ["продукт 1", "продукт 2"],
faq: {"вопрос": "ответ"},
escalation_contact: "email или телефон",
do_not_say: ["список запрещённых фраз"],
}
"""
self.brand = brand_config
def generate_reply(
self,
message: str,
category: str,
platform: str = "instagram",
context: dict = {},
) -> dict:
"""Генерирует ответ с учётом категории и платформы"""
max_length = {
"instagram": 2200,
"vk": 4096,
"telegram": 4096,
"twitter": 280,
"facebook": 8000,
}.get(platform, 1000)
faq_text = "\n".join([f"Q: {q}\nA: {a}" for q, a in self.brand.get("faq", {}).items()])
system = f"""Ты — SMM-менеджер бренда «{self.brand['name']}».
Тон общения: {self.brand.get('tone', 'дружелюбный')}.
Платформа: {platform} (максимум {max_length} символов).
Продукты компании: {', '.join(self.brand.get('products', []))}.
Контакт для эскалации: {self.brand.get('escalation_contact', '')}.
FAQ:
{faq_text}
НЕ ГОВОРИ: {', '.join(self.brand.get('do_not_say', []))}.
Правила:
- Будь конкретным, не шаблонным
- Обращайся к пользователю на "вы" если не знаешь его возраст
- При жалобах — сначала признай проблему, потом предлагай решение
- Не обещай то, что не можешь выполнить
- Для сложных вопросов — перенаправляй в личку или на email"""
messages_list = []
if context.get("post_text"):
messages_list.append({
"role": "user",
"content": f"Контекст поста: {context['post_text']}"
})
messages_list.append({
"role": "assistant",
"content": "Понял контекст поста, готов отвечать на комментарии."
})
messages_list.append({
"role": "user",
"content": f"Категория: {category}\nСообщение: {message}\n\nНапиши ответ."
})
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=512,
system=system,
messages=messages_list,
)
reply = response.content[0].text.strip()
if len(reply) > max_length:
reply = reply[:max_length - 3] + "..."
return {
"reply": reply,
"length": len(reply),
"platform": platform,
"requires_review": category in ("complaint", "requires_human", "toxic"),
}
Полный pipeline обработки сообщений
import asyncio
from datetime import datetime
class SocialMediaAutoReply:
"""Полная система автоответов для соцсетей"""
def __init__(self, brand_config: dict):
self.classifier = MessageClassifier()
self.generator = AutoReplyGenerator(brand_config)
self.pending_review: list = []
async def process_message(self, message_data: dict) -> dict:
text = message_data["text"]
platform = message_data.get("platform", "instagram")
classification = self.classifier.classify(
text,
context={"post_text": message_data.get("post_text"), "username": message_data.get("username")}
)
result = {
"message_id": message_data["id"],
"classification": classification,
"action": None,
"reply": None,
"processed_at": datetime.now().isoformat(),
}
if classification["category"] == "toxic":
result["action"] = "hide"
result["reply"] = None
elif classification["category"] == "irrelevant":
result["action"] = "skip"
elif not classification.get("auto_reply_possible", True):
result["action"] = "escalate_to_human"
self.pending_review.append({**message_data, "classification": classification})
else:
reply_data = self.generator.generate_reply(
message=text,
category=classification["category"],
platform=platform,
context={"post_text": message_data.get("post_text")},
)
if reply_data.get("requires_review"):
result["action"] = "reply_with_review"
self.pending_review.append({**message_data, "suggested_reply": reply_data["reply"]})
else:
result["action"] = "auto_reply"
result["reply"] = reply_data["reply"]
return result
async def process_batch(self, messages: list[dict]) -> list[dict]:
semaphore = asyncio.Semaphore(10)
async def process_one(msg):
async with semaphore:
return await self.process_message(msg)
return await asyncio.gather(*[process_one(m) for m in messages])
Интеграция с VK API и Instagram
import vk_api
import requests
class VKAutoReply:
"""Интеграция с ВКонтакте"""
def __init__(self, vk_token: str, brand_config: dict):
vk_session = vk_api.VkApi(token=vk_token)
self.vk = vk_session.get_api()
self.auto_reply = SocialMediaAutoReply(brand_config)
async def process_new_comments(self, group_id: int, since_timestamp: int):
posts = self.vk.wall.get(owner_id=-group_id, count=10, filter="owner")
for post in posts["items"]:
comments = self.vk.wall.getComments(
owner_id=-group_id,
post_id=post["id"],
filter="all",
count=100,
)
new_comments = [
c for c in comments["items"]
if c["date"] > since_timestamp and c.get("from_id", 0) > 0
]
for comment in new_comments:
result = await self.auto_reply.process_message({
"id": comment["id"],
"text": comment["text"],
"platform": "vk",
"post_text": post.get("text", "")[:300],
"username": str(comment["from_id"]),
})
if result["action"] == "auto_reply" and result["reply"]:
self.vk.wall.createComment(
owner_id=-group_id,
post_id=post["id"],
reply_to_comment=comment["id"],
message=result["reply"],
)
elif result["action"] == "hide":
self.vk.wall.deleteComment(
owner_id=-group_id,
comment_id=comment["id"],
)
Кейс из нашей практики: интернет-магазин косметики
Данные получены в результате внедрения системы на реальном проекте.
Ситуация: 3 площадки (Instagram, ВКонтакте, Telegram-канал). Ежедневно 180–250 комментариев и DM. Один SMM-специалист + 0,5 ставки помощника.
Результаты за 6 недель:
- Автоматически закрыто 73% сообщений (ответы на вопросы о составе, доставке, наличии)
- Среднее время ответа: 4–6 часов → 3 минуты
- Жалобы с задержкой ответа >2 часов: снизились на 89%
- SMM-специалист переключился на создание контента, перестав тонуть в ответах
Нюанс: первые 2 недели пришлось вручную редактировать ~15% ответов — модель путалась с конкретными артикулами и ценами. Решили, добавив FAQ с актуальными ценами и перечнем SKU в brand_config.
Почему AI-автоответы не убивают человечность?
Система не подменяет общение — она берёт на себя только рутину. Токсичные комментарии скрываются без ответа, жалобы уходят на премодерацию, сложные технические вопросы эскалируются человеку. В результате команда тратит больше времени на тех, кто действительно нуждается в персональном внимании. Мы гарантируем, что доля автоматически опубликованных ответов без проверки не превышает 20% — всё остальное проходит через дашборд модерации.
Сравнение: ручная обработка vs AI-система
| Параметр | Ручная работа | AI-система |
|---|---|---|
| Время ответа | 4–6 часов | 3 минуты |
| Процент рутины | 100% | 30% (только сложные кейсы) |
| Ошибки в фактах | 0% (человек) | 2–3% (после адаптации) |
| Масштабируемость | Ограничена штатом | ~1000 сообщений/день на 1 модель |
| Стоимость на 1000 ответов | ~$50 (зарплата) | ~$2 (токены API) |
AI-система отвечает в 80 раз быстрее человека и снижает операционные затраты в 25 раз — это подтверждается практикой на десятках проектов.
Сравнение платформ по лимитам
| Платформа | Макс. длина ответа | API | Особенности |
|---|---|---|---|
| 2200 символов | Graph API | Ограничение по длине комментариев | |
| VK | 4096 символов | VK API | Поддержка вложений (фото, стикеры) |
| Telegram | 4096 символов | Bot API | Можно отправлять медиа и кнопки |
Что входит в работу
- Классификатор: модель для определения категории и тональности, обученная на ваших данных (или предобученная база).
- Генератор ответов: конфигурация brand_config с тоном, FAQ, запрещёнными фразами.
- Интеграция с платформами: VK, Instagram, Telegram (по выбору).
- Дашборд модерации: веб-интерфейс для просмотра сообщений на проверку, ручного подтверждения/отклонения.
- Аналитика: отчёты по объёмам, времени ответа, категориям.
- Документация: описание архитектуры, инструкция по эксплуатации.
- Обучение команды: 2-часовой вебинар по администрированию системы.
Сроки реализации
- Классификатор + генератор ответов: 3–5 дней
- Интеграция с одной платформой: 3–5 дней
- Дашборд модерации: 1 неделя
- Полная система с аналитикой: 3–4 недели
Свяжитесь с нами для консультации — поможем рассчитать точный срок под ваш стек и объём сообщений. Закажите внедрение, и мы настроим пилот за 1 неделю на ваших данных. Получите персональную демонстрацию работы системы на примере вашего бренда.
Ссылки: Large language model







