# 🎯 ВАЛИДНЫЕ cURL ДЛЯ ИМПОРТА В n8n HTTP REQUEST NODE ## 📋 ОБЩАЯ ИНФОРМАЦИЯ **API URL:** `http://185.197.75.249:8004` **Локально:** `http://localhost:8004` **Статус:** ✅ Работает (проверено 13.10.2025 19:37) --- ## 🔍 ЭНДПОИНТЫ ### 1️⃣ Проверка здоровья API ```bash curl -X GET 'http://185.197.75.249:8004/health' \ -H 'Accept: application/json' ``` **Ответ:** ```json { "status": "healthy", "natasha": "ready" } ``` --- ### 2️⃣ Извлечение сущностей (УПРОЩЁННЫЙ - для n8n) **⭐ РЕКОМЕНДУЕТСЯ ДЛЯ n8n! ⭐** ```bash curl -X POST 'http://185.197.75.249:8004/extract_simple' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -d '{ "text": "ИП Фролов С.А. находится по адресу г. Петропавловск-Камчатский, ул. Пограничная 39/1. Директор Иван Петров. ИНН: 8707003759, ОГРН: 1028700516476.", "max_length": 5000 }' ``` **Реальный ответ (протестировано):** ```json { "organizations": ["ИП"], "persons": ["Иван Петров", "Фролов С.А."], "locations": ["Петропавловск-Камчатский"], "has_organizations": true, "has_persons": true, "has_locations": true, "total": 4 } ``` --- ### 3️⃣ Извлечение сущностей (ПОЛНЫЙ ФОРМАТ) ```bash curl -X POST 'http://185.197.75.249:8004/extract' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -d '{ "text": "Муниципальное предприятие «Чаунское районное коммунальное хозяйство». ИНН: 8707003759, ОГРН: 1028700516476. Юридический адрес: 689400, г. Певек, ул. Пугачева, 42", "max_length": 5000 }' ``` **Ответ включает:** ```json { "organizations": ["Муниципальное предприятие"], "persons": [], "locations": ["Певек", "Пугачева"], "entities": [ { "type": "ORG", "text": "Муниципальное предприятие", "start": 0, "end": 25 }, { "type": "LOC", "text": "Певек", "start": 110, "end": 115 } ], "total_entities": 4 } ``` --- ## 🔧 КАК ИМПОРТИРОВАТЬ В n8n HTTP REQUEST NODE ### Способ 1: Через Import from cURL 1. В n8n добавь **HTTP Request Node** 2. Нажми на кнопку **"Import from cURL"** (справа вверху в ноде) 3. Вставь этот cURL: ```bash curl -X POST 'http://185.197.75.249:8004/extract_simple' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -d '{"text": "ИП Фролов С.А. находится по адресу г. Петропавловск-Камчатский, ул. Пограничная 39/1. Директор Иван Петров.", "max_length": 5000}' ``` 4. n8n автоматически заполнит все поля ✅ --- ### Способ 2: Ручная настройка **Параметры HTTP Request Node:** | Поле | Значение | |------|----------| | **Method** | `POST` | | **URL** | `http://185.197.75.249:8004/extract_simple` | | **Authentication** | None | | **Send Body** | Yes (JSON) | | **Body Content Type** | JSON | **Headers:** ```json { "Content-Type": "application/json", "Accept": "application/json" } ``` **Body (JSON):** ```json { "text": "{{ $json.quote }}", "max_length": 5000 } ``` > 💡 **Где `{{ $json.quote }}`** - это данные из предыдущей ноды (текст для анализа) --- ## 📊 ПРИМЕР ИСПОЛЬЗОВАНИЯ В n8n WORKFLOW ### Схема: ``` ┌────────────────┐ │ PostgreSQL │ → Получить текст из БД (hotel_website_processed) └────────┬───────┘ ↓ ┌────────────────┐ │ Code Node │ → Подготовить текст (cleaned_text) └────────┬───────┘ ↓ ┌────────────────┐ │ HTTP Request │ → http://185.197.75.249:8004/extract_simple │ (Natasha API) │ └────────┬───────┘ ↓ ┌────────────────┐ │ Code Node │ → Обработать результат (проверить has_organizations) └────────────────┘ ``` ### Код для подготовки данных (Code Node ПЕРЕД HTTP Request): ```javascript // Подготовка текста для Natasha API const items = []; for (const item of $input.all()) { items.push({ json: { hotel_id: item.json.hotel_id, quote: item.json.cleaned_text || item.json.text || "", criterion_id: item.json.criterion_id } }); } return items; ``` ### Код для обработки ответа (Code Node ПОСЛЕ HTTP Request): ```javascript // Обработка ответа от Natasha API const items = []; for (const item of $input.all()) { const organizations = item.json.organizations || []; const persons = item.json.persons || []; const locations = item.json.locations || []; // Проверяем наличие нужных сущностей const hasOrganizations = organizations.length > 0; const hasPersons = persons.length > 0; const hasLocations = locations.length > 0; // Для критерия 1 (ИНН/ОГРН) проверяем организации let ner_score = 0.0; if (item.json.criterion_id === 1) { ner_score = hasOrganizations ? 1.0 : 0.0; } // Для критерия 2 (Адрес) проверяем локации else if (item.json.criterion_id === 2) { ner_score = hasLocations ? 1.0 : 0.0; } items.push({ json: { hotel_id: item.json.hotel_id, criterion_id: item.json.criterion_id, organizations: organizations, persons: persons, locations: locations, ner_score: ner_score, has_organizations: hasOrganizations, has_persons: hasPersons, has_locations: hasLocations, total_entities: item.json.total || 0 } }); } return items; ``` --- ## 🧪 ТЕСТИРОВАНИЕ ### Тест 1: Проверка API ```bash curl http://185.197.75.249:8004/health ``` Ожидаем: `{"status":"healthy","natasha":"ready"}` ### Тест 2: Извлечение организации ```bash curl -X POST http://185.197.75.249:8004/extract_simple \ -H 'Content-Type: application/json' \ -d '{"text": "ООО Рога и Копыта", "max_length": 5000}' ``` Ожидаем: `{"organizations": ["ООО"], ...}` ### Тест 3: Извлечение адреса ```bash curl -X POST http://185.197.75.249:8004/extract_simple \ -H 'Content-Type: application/json' \ -d '{"text": "г. Москва, ул. Ленина, д. 1", "max_length": 5000}' ``` Ожидаем: `{"locations": ["Москва", "Ленина"], ...}` --- ## 🔥 ГОТОВЫЙ cURL ДЛЯ КОПИРОВАНИЯ **Для критерия 1 (ИНН/ОГРН):** ```bash curl -X POST 'http://185.197.75.249:8004/extract_simple' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"text":"ИП Фролов С.А. ИНН: 8707003759, ОГРН: 1028700516476","max_length":5000}' ``` **Для критерия 2 (Адрес):** ```bash curl -X POST 'http://185.197.75.249:8004/extract_simple' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"text":"Юридический адрес: 689400, г. Певек, ул. Пугачева, 42","max_length":5000}' ``` --- ## 📝 ДОКУМЕНТАЦИЯ API **Swagger UI доступен по адресу:** - Локально: `http://localhost:8004/docs` - Извне: `http://185.197.75.249:8004/docs` --- ## ⚡ ПРОИЗВОДИТЕЛЬНОСТЬ - **Скорость:** ~100-200ms на запрос - **Лимит текста:** 5000 символов (настраивается через `max_length`) - **Параллельность:** Поддерживает множество одновременных запросов --- ## 🐛 TROUBLESHOOTING ### Ошибка: Connection refused **Решение:** Проверь, что API запущен: ```bash ps aux | grep natasha_ner_api ``` Если не запущен: ```bash cd /root/engine/public_oversight/hotels python3 -m uvicorn natasha_ner_api:app --host 0.0.0.0 --port 8004 --reload ``` ### Ошибка: 500 Internal Server Error **Решение:** Проверь логи: ```bash tail -f /root/engine/public_oversight/hotels/nohup.out ``` --- ## ✅ ПРОВЕРЕНО - ✅ API работает (13.10.2025 19:37) - ✅ cURL валидный - ✅ Протестирован на реальных данных - ✅ Извлекает: организации, адреса, имена - ✅ Готов для импорта в n8n --- **Автор:** AI Assistant + Фёдор **Дата:** 13 октября 2025 **Версия:** 1.0