Files
sber-med-wordpress/README.md
T

107 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Med Diagnostics — WordPress-плагин
Репозиторий: https://git.itguild.info/apuc/sber-med-wordpress
Интеграция сервиса «Диагностика по видео» (API-бэкенд med.my-dpr.ru) в WordPress.
Плагин выводит вёрстку сервиса (загрузка видео, сканирование с камеры, результат) прямо на странице сайта — без iframe.
## Установка
### Вариант 1: через админку (zip)
```bash
# из корня репозитория (папка репозитория = папка плагина)
zip -r med-diagnostics.zip . -x README.md
```
1. В админке WordPress: **Плагины → Добавить новый → Загрузить плагин** → выберите `med-diagnostics.zip` → **Установить** → **Активировать**.
### Вариант 2: копированием файлов
1. Скопируйте содержимое репозитория в `wp-content/plugins/med-diagnostics/` вашего WordPress.
2. В админке: **Плагины → Установленные** → активируйте **Med Diagnostics**.
### Использование
Вставьте шорткод в нужную страницу/запись:
```
[med_diagnostics]
```
Дополнительно можно задать заголовок:
```
[med_diagnostics title="Проверь своё здоровье"]
```
## Настройки
**Настройки → Med Diagnostics**:
| Поле | Описание |
|---|---|
| **Режим подключения** | `Через сервер (внутренний IP)` — браузер шлёт видео на этот WordPress, PHP проксирует запрос на внутренний IP бэкенда (по умолчанию, рекомендуется когда WordPress и API на одном сервере). `Напрямую из браузера (CORS)` — браузер обращается к публичному URL API. |
| **Внутренний URL бэкенда** | Адрес API, доступный с этого сервера (по умолчанию `http://127.0.0.1:18018`). Используется в режиме «Через сервер». |
| **Публичный URL API-бэкенда** | Публичный адрес Flask-приложения (по умолчанию `https://med.my-dpr.ru`). Используется в режиме «Напрямую» и для ссылки «Поделиться». |
Можно также переопределить кодом:
```php
add_filter('med_diag_api_url', fn() => 'https://другой-домен.ru');
add_filter('med_diag_internal_url', fn() => 'http://10.0.0.5:18018');
add_filter('med_diag_mode', fn() => 'direct');
```
## Как это работает
- **Режим «Через сервер» (по умолчанию)**: JS отправляет видео на REST-эндпоинт этого же WordPress (`/wp-json/med-diag/v1/analyze`), PHP пересылает его на внутренний IP бэкенда (`http://127.0.0.1:18018/analyze`). Скачивания PDF/DOCX/видео идут через `/wp-json/med-diag/v1/download/<id>/<type>`. CORS не нужен — все запросы same-origin.
- **Режим «Напрямую»**: JS отправляет видео на публичный URL API (`POST /analyze`) — тогда нужен CORS на стороне Flask.
- Результат (сводка, показатели, рекомендации, кнопки PDF/DOCX/видео/поделиться) рендерится на странице WordPress.
- Сканирование с камеры работает на мобильных (canvas 720×720 + MediaRecorder).
## Требования к серверу WordPress (режим «Через сервер»)
Видео сначала загружается в PHP, поэтому в `php.ini` должны быть подняты лимиты:
```ini
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
```
Проверить текущие значения: `php -i | grep -E "upload_max_filesize|post_max_size|max_execution_time"`.
## Требования к бэкенду (Flask)
В `app.py` серверного репозитория уже добавлена поддержка CORS (нужна только в режиме «Напрямую»):
- `Access-Control-Allow-Origin` — по умолчанию `*`, можно ограничить через env `CORS_ORIGINS` (список через запятую, например `https://site1.ru,https://site2.ru`).
- Preflight `OPTIONS /analyze` возвращает `204`.
## Локальное тестирование
1. Поднимите API-бэкенд локально (см. README серверного репозитория) или используйте прод `https://med.my-dpr.ru`.
2. Установите плагин в локальный WordPress (например, на `http://wp.loc` через Apache vhost).
3. Создайте страницу с шорткодом `[med_diagnostics]` и откройте её.
4. Проверьте в консоли браузера, что `MED_DIAG.apiUrl` указывает на нужный бэкенд, и что запрос `POST /analyze` проходит (CORS).
## Ограничения
- Шорткод используйте **один раз на странице** (id элементов фиксированы).
- Для работы сканирования с камеры нужен HTTPS на сайте WordPress (getUserMedia требует secure context).
- В режиме «Через сервер» видео загружается в PHP — следите за лимитами `upload_max_filesize`/`post_max_size`/`max_execution_time` (см. выше).
- Ссылка «Поделиться» всегда ведёт на публичный URL API (`/r/<share_id>`).
## Структура
Корень репозитория = папка плагина:
```
med-diagnostics/
├── med-diagnostics.php — главный файл плагина (шорткод, настройки, ассеты)
├── README.md — этот файл (в zip не попадает)
└── assets/
├── css/med-diag.css — стили сервиса (префикс med-)
└── js/med-diag.js — логика (fetch на API, сканирование, рендер результата)
```