Статья #15
Создание чат-бота для поддержки пользователей 1С
Проблема техподдержки
- Повторяющиеся вопросы от пользователей
- Нагрузка на службу поддержки
- Отсутствие поддержки 24/7
- Медленное время ответа
- Необходимость знать специфику конфигурации
AI-чат-бот для 1С
1. Архитектура решения
User → Telegram/Slack/Web → AI Bot → Knowledge Base
↓
1C Database (через MCP)
↓
Documentation
2. Создание бота с Claude
# Telegram бот с AI для поддержки 1С
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler
from anthropic import Anthropic
class OneCSupport Bot:
def __init__(self, telegram_token, claude_api_key):
self.claude = Anthropic(api_key=claude_api_key)
self.app = Application.builder().token(telegram_token).build()
# База знаний
self.knowledge_base = self.load_knowledge_base()
# Handlers
self.app.add_handler(CommandHandler("start", self.start))
self.app.add_handler(MessageHandler(filters.TEXT, self.handle_message))
async def handle_message(self, update: Update, context):
user_question = update.message.text
user_id = update.effective_user.id
# Контекст пользователя
user_context = await self.get_user_context(user_id)
# AI обработка вопроса
response = await self.claude.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
system=f"""Ты - помощник техподдержки системы 1С.
База знаний:
{self.knowledge_base}
Контекст пользователя:
{user_context}
Отвечай:
- Кратко и по делу
- С конкретными инструкциями
- Со скриншотами (если есть в базе)
- Предлагай связаться с оператором для сложных вопросов""",
messages=[{
"role": "user",
"content": user_question
}]
)
# Отправка ответа
await update.message.reply_text(response.content[0].text)
# Логирование для аналитики
await self.log_interaction(user_id, user_question, response)
def load_knowledge_base(self):
"""Загружает базу знаний из документации"""
# Читает markdown файлы с документацией
# Индексирует частые вопросы
# Загружает инструкции
pass
async def get_user_context(self, user_id):
"""Получает контекст: роль, права, последние обращения"""
# Может обращаться к базе 1С через MCP
pass
3. Интеграция с базой знаний
// MCP-сервер для доступа к базе знаний
class KnowledgeBaseMCP {
constructor() {
this.confluence = new ConfluenceClient();
this.onec_docs = new OneCDocsParser();
}
async search(query) {
// Поиск в Confluence
const confluence_results = await this.confluence.search(query);
// Поиск в документации 1С
const docs_results = await this.onec_docs.search(query);
// Поиск в прошлых обращениях
const tickets_results = await this.searchTickets(query);
// AI ранжирует результаты
const ranked = await this.rankResults([
...confluence_results,
...docs_results,
...tickets_results
]);
return ranked;
}
}
4. Специализированные сценарии
Помощь с отчетами:
async def handle_report_question(self, question):
"""Помогает пользователю с отчетами"""
# AI классифицирует вопрос
classification = await self.classify_question(question)
if classification == 'how_to_run':
return await self.send_report_instructions()
elif classification == 'empty_result':
# Диагностика через MCP
diagnostics = await self.mcp.diagnose_empty_report(
report_name=question.report_name,
user_id=question.user_id
)
return f"""Возможные причины:
{diagnostics.suggestions}
Попробуйте:
1. {diagnostics.fix_steps[0]}
2. {diagnostics.fix_steps[1]}"""
elif classification == 'wrong_data':
return await self.escalate_to_human()
Автоматическое решение простых проблем:
async def auto_fix_issue(self, issue_description):
"""Пытается автоматически решить проблему"""
# Классификация проблемы
issue_type = await self.classify_issue(issue_description)
if issue_type == 'cache_issue':
# Очистка кэша через API
await self.onec_api.clear_user_cache(user_id)
return "Кэш очищен. Попробуйте обновить страницу."
elif issue_type == 'access_denied':
# Проверка прав
permissions = await self.onec_api.check_permissions(user_id)
return f"""Проверьте права доступа:
Текущие роли: {permissions.roles}
Нужные права: {permissions.required}"""
else:
return await self.create_ticket_and_notify()
5. Аналитика и улучшение
class BotAnalytics:
async def analyze_interactions(self):
"""Анализирует взаимодействия для улучшения бота"""
# Собираем статистику
stats = await self.get_interaction_stats()
# AI анализ
analysis = await claude.analyze({
'unresolved_questions': stats.unresolved,
'common_questions': stats.most_frequent,
'escalations': stats.escalated_to_human
})
# Генерируем рекомендации
print("Recommendations:")
print("1. Add to FAQ:", analysis.new_faq_topics)
print("2. Improve responses for:", analysis.weak_topics)
print("3. New automation opportunities:", analysis.automation)
6. Многоканальность
class MultiChannelBot:
def __init__(self):
self.telegram = TelegramBot()
self.slack = SlackBot()
self.web_widget = WebChatWidget()
# Единый AI movement
self.ai = AIAssistant()
async def handle_message(self, message, channel):
"""Обрабатывает сообщение из любого канала"""
response = await self.ai.process(message)
# Адаптация ответа под канал
if channel == 'telegram':
await self.telegram.send(response.text)
elif channel == 'slack':
await self.slack.send(response.as_slack_blocks())
elif channel == 'web':
await self.web_widget.send(response.as_html())
Web-виджет на сайте
<!-- Виджет чата на сайте -->
<script>
window.OneCSupportChat = {
init: function() {
// Подключение к AI боту
const ws = new WebSocket('wss://support.company.com/chat');
ws.onmessage = (event) => {
const response = JSON.parse(event.data);
this.displayMessage(response.text, 'bot');
};
document.getElementById('send').onclick = () => {
const message = document.getElementById('input').value;
ws.send(JSON.stringify({ message }));
this.displayMessage(message, 'user');
};
}
};
</script>
Обучение бота на данных компании
"Обучи AI-бота на наших данных:
Источники:
1. История обращений в техподдержку (Jira)
2. Документация конфигурации
3. Внутренняя wiki
4. Часто задаваемые вопросы
Создай:
1. Векторную базу знаний
2. Fine-tuned модель для специфики компании
3. Систему обновления знаний
4. Метрики качества ответов"
Результаты
- Сокращение нагрузки на поддержку: 60%
- Время ответа: с часов до секунд
- Доступность: 24/7
- Удовлетворенность пользователей: +45%
- ROI: окупаемость за 3 месяца