Создайте A-запись для поддомена:
Тип: A Имя: mentor Значение: 45.152.87.93 TTL: 300
mentor.ii.dist.by → 45.152.87.93Проверка:
dig mentor.ii.dist.by +short # → 45.152.87.93
Конфиг уже создан, нужно скопировать на сервер:
scp /home/n8n/.openclaw/workspace/traefik/mentor.yml \
root@45.152.87.93:/etc/traefik/dynamic/mentor.yml
Перезапустить Traefik:
ssh root@45.152.87.93 "docker restart traefik"
https://mentor.ii.dist.by будет доступенБаза данных MySQL работает внутри Docker-контейнера moodle-db.
Проброшен порт 3307 на хост:
docker exec moodle-db mysql -u root -p'moodle_root_2026' -e "
CREATE DATABASE IF NOT EXISTS ai_sales_mentor
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'mentor_user'@'%'
IDENTIFIED BY 'MentorPass2026!';
GRANT ALL ON ai_sales_mentor.* TO 'mentor_user'@'%';
FLUSH PRIVILEGES;
"
mentor_user@45.152.87.93:3307Таблицы (5):
Flask-приложение запущено на 45.152.87.93:5481.
Ручной запуск:
cd /home/n8n/.openclaw/workspace/landings/ai-sales-mentor DB_PORT=3307 python3 admin_panel.py # → http://0.0.0.0:5481
Создание systemd-сервиса (рекомендуется):
ssh root@45.152.87.93 "cat > /etc/systemd/system/ai-sales-mentor.service" << 'EOF' [Unit] Description=AI Sales Mentor Admin Panel After=network.target [Service] Type=simple User=www-data WorkingDirectory=/home/n8n/.openclaw/workspace/landings/ai-sales-mentor ExecStart=/usr/bin/python3 admin_panel.py Restart=always RestartSec=10 Environment=DB_HOST=127.0.0.1 Environment=DB_PORT=3307 Environment=DB_USER=mentor_user Environment=DB_PASS=MentorPass2026! Environment=DB_NAME=ai_sales_mentor Environment=PORT=5481 [Install] WantedBy=multi-user.target EOF ssh root@45.152.87.93 "systemctl daemon-reload && systemctl enable ai-sales-mentor && systemctl restart ai-sales-mentor"
Webhook-сервер на порту 5484 принимает сообщения от OpenClaw Gateway и обрабатывает их.
Запуск:
cd /home/n8n/.openclaw/workspace/landings/ai-sales-mentor WEBHOOK_PORT=5484 python3 webhook_server.py
Тест:
curl -X POST http://127.0.0.1:5484 \
-H "Content-Type: application/json" \
-d '{"text":"/start","user_id":"201526071"}'
Вопросы генерируются через openclaw eval, который вызывает LLM.
Как это работает:
# telegram_bot.py → generate_mentor_response():
prompt = """
Системный промпт (Socratic Mentor)...
Контекст (тема, уровень, streak, ошибки)...
Сообщение ученика...
"""
result = subprocess.run(
["openclaw", "eval", "--prompt", prompt],
capture_output=True, text=True, timeout=30
)
Если LLM недоступна — используется fallback с шаблонными вопросами.
zai/glm-5.1 (через OpenClaw Gateway)Генерация реферальной ссылки для приглашения учеников:
# API: генерация ссылки
GET http://mentor.ii.dist.by/api/referral/generate
# Ответ:
{
"token": "a1b2c3d4e5f6",
"registration_url": "http://mentor.ii.dist.by/register?ref=a1b2c3d4e5f6",
"telegram_url": "https://t.me/AIPomogaikaBot?start=ref_a1b2c3d4e5f6"
}
Статистика по реферальному коду:
GET http://mentor.ii.dist.by/api/referral/{token}/stats
https://mentor.ii.dist.by/register?ref=ВАШ_КОДКурсовая структура хранится в JSON:
/home/n8n/.openclaw/workspace/landings/ai-sales-mentor/course_structure.json
Чтобы добавить тему:
// Внутри нужного модуля → topics[]
{
"id": "M2T4",
"title": "Название темы",
"description": "Описание",
"difficulty": 3,
"prerequisites": ["M2T1"],
"competencies": ["skill_name"],
"kpis": {
"questions_answered": 5,
"min_correct_percent": 70
}
}
// В edges[] добавить связи
["M2T3", "M2T4"],
["M2T4", "M3T1"]
После изменения — перезапустить админ-панель.