system/monitor/PERSONAL_BOT.md

Персональный бот-монитор

Дата: 2026-01-11
Статус: Планирование


КОНЦЕПЦИЯ

Превратить систему мониторинга в персонального Telegram бота.

Текущая схема:

system/monitor/run.py
   проверки
Telegram уведомления (library/connectors/api/telegram/)

Новая схема:

Telegram бот (@my_monitor_bot)
   только для твоего номера
Команды + мониторинг + диалог
   отдельная сессия Claude
Интерактивный помощник

ТРЕБОВАНИЯ

  1. Приватность - работает ТОЛЬКО для твоего номера телефона
  2. Сообщения - может отправлять уведомления от монитора
  3. Отдельная сессия - свой контекст Claude (не мешается с основным)
  4. Команды - управление системой через бота

ФУНКЦИИ БОТА

1. Мониторинг (текущие)

/status - Текущий статус всех систем
/alerts - Активные алерты
/last_check - Результаты последней проверки

Автоматически:
- Отправляет алерты при проблемах
- Ежедневный отчёт (утром)

2. Управление системой

/run <задача> - Запустить задачу
/tasks - Список задач scheduler
/logs <сервис> - Показать логи
/restart <сервис> - Перезапустить сервис

3. Диалог с Claude

Любой текст → отдельная сессия Claude

"Проверь что с ботами"
"Какие проблемы были сегодня"
"Запусти синхронизацию OZON"

Особенность: Бот помнит контекст разговора, понимает команды на русском.

4. Быстрые действия

/backup - Запустить бэкап
/cleanup - Очистка диска
/update - Обновить репозиторий

АРХИТЕКТУРА

Структура

system/bots/monitor/
├── bot.py              ← Основной файл бота
├── handlers/           ← Обработчики команд
│   ├── monitoring.py   ← Мониторинг команды
│   ├── system.py       ← Системные команды
│   └── chat.py         ← Диалог с Claude
├── session.py          ← Управление сессией Claude
└── config.yaml         ← Настройки бота

Как работает

# 1. Получение сообщения
@bot.message_handler(func=lambda m: True)
def handle_message(message):
    # Проверка номера телефона
    if message.from_user.phone != ALLOWED_PHONE:
        bot.send_message(message.chat.id, "Access denied")
        return

    # Команда или диалог?
    if message.text.startswith('/'):
        handle_command(message)
    else:
        handle_chat(message)

# 2. Обработка команды
def handle_command(message):
    if message.text == '/status':
        status = monitor.get_status()
        bot.send_message(message.chat.id, format_status(status))

# 3. Обработка диалога
def handle_chat(message):
    # Отдельная сессия Claude
    response = claude_session.ask(
        user_id=message.from_user.id,
        question=message.text,
        context={
            'role': 'system_monitor',
            'capabilities': ['run_tasks', 'check_status', 'read_logs']
        }
    )
    bot.send_message(message.chat.id, response)

СЕССИЯ CLAUDE

Отдельный контекст для бота:

# session.yaml
session_id: monitor_bot_session_{user_id}
model: claude-sonnet-4
system_prompt: |
  Ты персональный помощник по мониторингу системы.

  Ты можешь:
  - Проверять статус сервисов
  - Запускать задачи
  - Читать логи
  - Объяснять проблемы

  Доступные системы:
  - Telegram боты
  - OZON синхронизация
  - Мониторинг
  - Планировщик задач

  Отвечай коротко и по делу.

Механизм:
1. Каждый пользователь = отдельная сессия
2. Сессия живёт 24 часа
3. Контекст сохраняется между сообщениями
4. НЕ мешается с основными сессиями Claude Code


БЕЗОПАСНОСТЬ

1. Проверка номера

ALLOWED_PHONE = os.getenv("OWNER_PHONE")  # +79991234567

def is_allowed(user):
    # Telegram предоставляет номер только если пользователь разрешил
    return user.phone_number == ALLOWED_PHONE

2. Telegram ID

ALLOWED_USER_ID = os.getenv("OWNER_TELEGRAM_ID")  # 123456789

def is_allowed(user):
    return user.id == ALLOWED_USER_ID

Рекомендация: Использовать Telegram ID (проще и надёжнее).

3. Whitelist команд

ALLOWED_COMMANDS = {
    '/status': 'safe',
    '/alerts': 'safe',
    '/run': 'dangerous',  # Только с подтверждением
    '/restart': 'dangerous',
}

ИНТЕГРАЦИЯ С МОНИТОРОМ

Текущий монитор

system/monitor/run.py
   проверки (checks/)
   алерты (alerts/)
   Telegram уведомления

С ботом

# monitor/run.py
from system.bots.monitor import send_alert

def run_checks():
    results = check_all()

    if results.has_errors():
        # Старый способ (сохранить)
        save_alert(results)

        # Новый способ (через бота)
        send_alert(
            severity='critical',
            title='Проблема с сервисом',
            message=results.format()
        )

ПЛАН РАЗРАБОТКИ

Этап 1: Базовый бот (1-2 часа)

Этап 2: Интеграция с монитором (1 час)

Этап 3: Сессия Claude (1-2 часа)

Этап 4: Системные команды (1 час)


ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ

# .env
MONITOR_BOT_TOKEN=123456:ABC-DEF...    # От @BotFather
OWNER_TELEGRAM_ID=123456789            # Твой Telegram ID
CLAUDE_API_KEY=sk-ant-...              # Для сессии

ИСПОЛЬЗОВАНИЕ

Создание бота

# 1. Открыть @BotFather в Telegram
# 2. /newbot
# 3. Название: My Monitor Bot
# 4. Username: my_monitor_bot
# 5. Скопировать токен

Запуск

# Однократно
python system/bots/monitor/bot.py

# Как сервис (systemd)
sudo systemctl start monitor-bot
sudo systemctl enable monitor-bot

Получение своего Telegram ID

# Написать @userinfobot в Telegram
# Он ответит твоим ID

СЛЕДУЮЩИЕ ШАГИ

  1. Создать структуру (5 мин)
  2. Базовый бот (1 час)
  3. Интеграция с монитором (30 мин)
  4. Тестирование (30 мин)

Итого: ~2-3 часа до рабочего прототипа


Версия: 1.0