Files
aiform_dev/DOCUMENT_ATTACH_API.md

252 lines
8.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# 📎 API для привязки документов к проекту/заявке
## ✅ Готово к использованию!
---
## 🎯 Эндпоинт
```
POST https://crm.clientright.ru/api/n8n/documents/attach
```
---
## 📋 Параметры запроса
### Обязательные:
| Параметр | Тип | Описание | Пример |
|----------|-----|----------|--------|
| `contact_id` | string | ID контакта в vTiger | `"320096"` |
| `project_id` | string | ID проекта (полиса) в vTiger | `"396874"` |
| `file_url` | string | Полный URL файла в S3 | `"https://s3.twcstorage.ru/..."` |
| `file_name` | string | Имя файла | `"boarding_pass.pdf"` |
### Опциональные:
| Параметр | Тип | Описание | Пример |
|----------|-----|----------|--------|
| `ticket_id` | string | ID заявки в HelpDesk<br/>**Если указан → привязка к заявке**<br/>**Если не указан → привязка к проекту** | `"396935"` |
| `file_type` | string | Описание типа документа | `"flight_delay_boarding_or_ticket"` |
---
## 🔧 Логика работы
```
┌─────────────────────────────────────────────┐
│ POST /api/n8n/documents/attach │
└─────────────────┬───────────────────────────┘
┌────────────────┐
│ ticket_id есть?│
└────────┬───────┘
┌─────────┴─────────┐
│ │
ДА НЕТ
│ │
▼ ▼
┌───────────────┐ ┌──────────────┐
│ Привязка к │ │ Привязка к │
│ HelpDesk │ │ Project │
│ (заявке) │ │ (проекту) │
└───────────────┘ └──────────────┘
```
---
## 📤 Примеры запросов
### 1⃣ Привязка к проекту (без заявки)
Используется когда файл относится к полису в целом, но еще нет конкретной заявки.
```bash
curl -X POST "https://crm.clientright.ru/api/n8n/documents/attach" \
-H "Content-Type: application/json" \
-d '{
"contact_id": "320096",
"project_id": "396874",
"file_url": "https://s3.twcstorage.ru/f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c/clientright/test/policy_scan.pdf",
"file_name": "policy_E1000-302538529.pdf",
"file_type": "Скан полиса ERV"
}'
```
**Ответ:**
```json
{
"success": true,
"result": {
"document_id": "15x396940",
"document_numeric_id": "396940",
"attached_to": "project", // ✅ Привязан к проекту
"attached_to_id": "396874",
"file_name": "policy_E1000-302538529.pdf",
"file_type": "Скан полиса ERV",
"s3_bucket": "f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c",
"s3_key": "clientright/test/policy_scan.pdf",
"file_size": 125840,
"message": "Документ создан с правильными S3 метаданными и привязан к проекту"
}
}
```
---
### 2⃣ Привязка к заявке (HelpDesk)
Используется когда файл относится к конкретной заявке (страховому случаю).
```bash
curl -X POST "https://crm.clientright.ru/api/n8n/documents/attach" \
-H "Content-Type: application/json" \
-d '{
"contact_id": "320096",
"project_id": "396874",
"ticket_id": "396935", // ✅ Указан ticket_id
"file_url": "https://s3.twcstorage.ru/f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c/clientright/test/boarding_pass.pdf",
"file_name": "boarding_pass_20251102.pdf",
"file_type": "flight_delay_boarding_or_ticket"
}'
```
**Ответ:**
```json
{
"success": true,
"result": {
"document_id": "15x396941",
"document_numeric_id": "396941",
"attached_to": "ticket", // ✅ Привязан к заявке
"attached_to_id": "396935",
"file_name": "boarding_pass_20251102.pdf",
"file_type": "flight_delay_boarding_or_ticket",
"s3_bucket": "f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c",
"s3_key": "clientright/test/boarding_pass.pdf",
"file_size": 85320,
"message": "Документ создан с правильными S3 метаданными и привязан к проекту"
}
}
```
---
## 🗂️ Типы файлов (file_type)
Примеры значений для `file_type`:
| Тип | Описание |
|-----|----------|
| `flight_delay_boarding_or_ticket` | Посадочный талон / билет при задержке рейса |
| `flight_delay_confirmation` | Подтверждение задержки рейса |
| `flight_cancel_confirmation` | Подтверждение отмены рейса |
| `medical_receipt` | Медицинский чек |
| `medical_report` | Медицинское заключение |
| `luggage_delay_report` | Акт о задержке багажа |
| `passport_scan` | Скан паспорта |
| `policy_scan` | Скан страхового полиса |
| `other` | Прочие документы |
---
## 📊 Интеграция с n8n
### В workflow после загрузки файла в S3:
```javascript
// HTTP Request Node: POST /api/n8n/documents/attach
{
"contact_id": "{{ $json.contact_id }}",
"project_id": "{{ $json.project_id }}",
"ticket_id": "{{ $json.ticket_id }}", // Опционально
"file_url": "{{ $json.s3_url }}",
"file_name": "{{ $json.original_filename }}",
"file_type": "{{ $json.document_type }}"
}
```
### Ответ сохранить в Redis:
```javascript
// Добавить в session:
{
...session_data,
documents: [
...session_data.documents,
{
document_id: $json.result.document_id,
file_name: $json.result.file_name,
file_type: $json.result.file_type,
attached_to: $json.result.attached_to,
uploaded_at: new Date().toISOString()
}
]
}
```
---
## 🔍 Логи
### Backend (FastAPI):
```bash
cd /var/www/fastuser/data/www/crm.clientright.ru/erv_platform
docker-compose logs -f backend | grep "Attaching document"
```
**Пример вывода:**
```
📎 Attaching document: boarding_pass.pdf (type: flight_delay_boarding_or_ticket)
Contact: 320096, Project: 396874, Ticket: 396935
📤 Sending to CRM: {...}
✅ Document attached successfully. Response: {...}
```
### CRM (PHP):
```bash
tail -f /var/www/fastuser/data/www/crm.clientright.ru/logs/upload_documents.log
```
**Пример вывода:**
```
[2025-11-02 16:30:15] 🚀 Начинаем создание документов...
[2025-11-02 16:30:15] 📄 Обрабатываем файл #0: boarding_pass.pdf
[2025-11-02 16:30:16] ✅ Документ создан: 15x396941 (numeric: 396941)
[2025-11-02 16:30:16] 📎 Привязываем к HelpDesk ticket_id: 396935
[2025-11-02 16:30:17] ✅ Документ привязан к HelpDesk #396935
```
---
## ⚠️ Обработка ошибок
### 400 Bad Request - Отсутствуют обязательные поля
```json
{
"detail": "Обязательные поля: contact_id, project_id, file_url, file_name"
}
```
### 500 Internal Server Error - Ошибка CRM
```json
{
"detail": "CRM error: Не найден Project ID 999999"
}
```
### 504 Gateway Timeout - Таймаут CRM
```json
{
"detail": "Таймаут загрузки в CRM"
}
```
---
## ✅ Готово к использованию!
Эндпоинт протестирован и готов к интеграции в n8n workflow! 🚀