diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 4a9bca7..b0744d4 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -13,7 +13,9 @@ "Bash(find C:UsersProfessionalAppDataLocalProgramsPythonPython313Libsite-packagesmaxapi -name command.py -o -name *command*)", "Bash(python -m py_compile bot/texts.py bot/flow_config.py bot/keyboards.py bot/handlers/start.py bot/handlers/create_ticket.py bot/handlers/view_tickets.py bot/handlers/menu.py)", "Bash(pip show:*)", - "Bash(python -c \"import ast, pathlib; errors = [f''{p}: {e}'' for p in pathlib.Path\\(''bot''\\).rglob\\(''*.py''\\) for e in [None] if not \\(lambda: ast.parse\\(p.read_text\\(encoding=''utf-8''\\)\\)\\)\\(\\)]; print\\(''OK''\\)\")" + "Bash(python -c \"import ast, pathlib; errors = [f''{p}: {e}'' for p in pathlib.Path\\(''bot''\\).rglob\\(''*.py''\\) for e in [None] if not \\(lambda: ast.parse\\(p.read_text\\(encoding=''utf-8''\\)\\)\\)\\(\\)]; print\\(''OK''\\)\")", + "Bash(find /c/Users/Professional/Documents/VSCode/support_bot -type d -not -path */.* -not -path */__pycache__* -not -path */data/*)", + "Bash(wc -l /c/Users/Professional/Documents/VSCode/support_bot/**/*.py)" ] } } diff --git a/.env.example b/.env.example index 3a5964c..ed8de77 100644 --- a/.env.example +++ b/.env.example @@ -1,19 +1,50 @@ +# ── Telegram Bot ────────────────────────────────────────────────────────────── MAX_BOT_TOKEN=your_token_here +# ── База данных ──────────────────────────────────────────────────────────────── # При локальном запуске (python main.py): DB_PATH=data/support.db - # При запуске через Docker DB_PATH переопределяется в docker-compose.yml # и указывает на /app/data/support.db (volume ./data/) +# ── Админ-панель ─────────────────────────────────────────────────────────────── ADMIN_USERNAME=admin ADMIN_PASSWORD=changeme ADMIN_HOST=0.0.0.0 ADMIN_PORT=8080 -# Intradesk API +# ── Intradesk API ────────────────────────────────────────────────────────────── INTRADESK_BASE_URL=https://apigw.intradesk.ru + +# Ключ для /settings/odata (клиенты, пользователи) INTRADESK_API_KEY=your_settings_api_key + +# Ключ для /tasklist/odata (чтение заявок) и /taskhistory (история/комментарии) INTRADESK_TASKS_API_KEY=your_tasks_api_key + +# Ключ для /changes/v3/tasks (создание и изменение заявок) +INTRADESK_CHANGES_API_KEY=your_changes_api_key + +# Путь сервиса для новых заявок (Настройки → Сервисы → «Путь сервиса», напр. "84681/84683/") +INTRADESK_DEFAULT_SERVICE= + +# ID типа заявки по умолчанию (Настройки → Заявки → Типы заявок → ID) +INTRADESK_DEFAULT_TASK_TYPE= + +# ID статуса «Выполнена» для кнопки «Закрыть заявку» (Настройки → Справочники → Статусы → ID) +INTRADESK_CLOSE_STATUS_ID= + +# ── Уведомления ──────────────────────────────────────────────────────────────── +# Интервал опроса Intradesk для push-уведомлений, секунды (0 — отключить) +NOTIFICATION_POLL_INTERVAL=120 + +# ── Фильтрация заявок ────────────────────────────────────────────────────────── +# ID группы исполнителей (0 = все группы) INTRADESK_EXECUTOR_GROUP=0 -INTRADESK_EXECUTORS=id1,id2,id3 + +# Список ID исполнителей через запятую (пусто = все исполнители) +INTRADESK_EXECUTORS= + +# ── Прочее ──────────────────────────────────────────────────────────────────── +# Dry-run: не писать в Intradesk, только выводить payload в консоль +DRY_RUN=false diff --git a/Dockerfile b/Dockerfile index 7c938dc..9171e18 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,12 @@ FROM python:3.11-slim -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +# curl нужен для healthcheck +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl \ + && rm -rf /var/lib/apt/lists/* WORKDIR /app @@ -14,4 +19,9 @@ RUN mkdir -p /app/data EXPOSE 8080 +# Проверяем, что admin-панель отвечает (401 = нормально, требует авторизацию) +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD curl -sf -o /dev/null -w "%{http_code}" http://localhost:8080/admin/ \ + | grep -qE "^(200|301|302|401)" || exit 1 + CMD ["python", "main.py"] diff --git a/data/support.db b/data/support.db index a36e488..4c443c0 100644 Binary files a/data/support.db and b/data/support.db differ diff --git a/data/support.db-shm b/data/support.db-shm index 0a88246..caaa789 100644 Binary files a/data/support.db-shm and b/data/support.db-shm differ diff --git a/data/support.db-wal b/data/support.db-wal index e705ef8..3e58f24 100644 Binary files a/data/support.db-wal and b/data/support.db-wal differ diff --git a/docker-compose.yml b/docker-compose.yml index e1bce85..ce701d8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,7 @@ services: support_bot: build: . + container_name: support_bot env_file: .env environment: DB_PATH: /app/data/support.db @@ -10,3 +11,8 @@ services: volumes: - ./data:/app/data restart: unless-stopped + logging: + driver: json-file + options: + max-size: "10m" + max-file: "5"