2025-11-02 19:21:37 +03:00
|
|
|
|
# 🚀 Быстрый старт: Привязка документов
|
|
|
|
|
|
|
|
|
|
|
|
## Эндпоинт
|
|
|
|
|
|
```
|
|
|
|
|
|
POST https://crm.clientright.ru/api/n8n/documents/attach
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 💡 Простейший пример (из n8n)
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
[
|
|
|
|
|
|
{
|
|
|
|
|
|
"contact_id": "{{ $json.contact_id }}",
|
|
|
|
|
|
"project_id": "{{ $json.project_id }}",
|
|
|
|
|
|
"ticket_id": "{{ $json.ticket_id }}",
|
|
|
|
|
|
"filename": "{{ $json.filename }}",
|
|
|
|
|
|
"file_type": "{{ $json.file_type }}",
|
|
|
|
|
|
"file": "{{ $json.file }}"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Важно:**
|
|
|
|
|
|
- ✅ Всегда передавать как **массив** `[...]`
|
|
|
|
|
|
- ✅ Поле `file` может быть без хоста (автоматически добавится `https://s3.twcstorage.ru`)
|
|
|
|
|
|
- ✅ Если `ticket_id` указан → документ привязывается к **заявке**
|
|
|
|
|
|
- ✅ Если `ticket_id` НЕ указан → документ привязывается к **проекту**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🧪 Тестирование
|
|
|
|
|
|
|
|
|
|
|
|
### Быстрый тест (в консоли сервера):
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd /var/www/fastuser/data/www/crm.clientright.ru/erv_platform
|
|
|
|
|
|
./TEST_REAL_DATA.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Проверка логов:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Backend логи
|
|
|
|
|
|
docker-compose logs -f backend | grep "Attaching document"
|
|
|
|
|
|
|
|
|
|
|
|
# CRM логи
|
|
|
|
|
|
tail -f /var/www/fastuser/data/www/crm.clientright.ru/logs/upload_documents.log
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## ✅ Ожидаемый ответ
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"success": true,
|
|
|
|
|
|
"total_processed": 1,
|
|
|
|
|
|
"successful": 1,
|
|
|
|
|
|
"failed": 0,
|
|
|
|
|
|
"results": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"document_id": "15x396941",
|
|
|
|
|
|
"attached_to": "ticket",
|
|
|
|
|
|
"attached_to_id": "396936",
|
|
|
|
|
|
"file_name": "boarding_pass.pdf",
|
|
|
|
|
|
"file_type": "flight_delay_boarding_or_ticket",
|
|
|
|
|
|
"s3_bucket": "...",
|
|
|
|
|
|
"s3_key": "...",
|
|
|
|
|
|
"file_size": 85320
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"errors": null
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 Интеграция в n8n
|
|
|
|
|
|
|
|
|
|
|
|
### HTTP Request Node:
|
|
|
|
|
|
|
|
|
|
|
|
**Method:** `POST`
|
|
|
|
|
|
**URL:** `https://crm.clientright.ru/api/n8n/documents/attach`
|
|
|
|
|
|
**Authentication:** None
|
|
|
|
|
|
**Body Content Type:** JSON
|
|
|
|
|
|
|
|
|
|
|
|
**Body:**
|
|
|
|
|
|
```json
|
|
|
|
|
|
{{ $json.documents }}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Где `$json.documents` - это массив документов из предыдущего node.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 📊 Типы документов (file_type)
|
|
|
|
|
|
|
|
|
|
|
|
| Код | Описание |
|
|
|
|
|
|
|-----|----------|
|
|
|
|
|
|
| `flight_delay_boarding_or_ticket` | Посадочный талон / билет |
|
|
|
|
|
|
| `flight_delay_confirmation` | Подтверждение задержки |
|
|
|
|
|
|
| `flight_cancel_confirmation` | Подтверждение отмены рейса |
|
|
|
|
|
|
| `medical_receipt` | Медицинский чек |
|
|
|
|
|
|
| `medical_report` | Медицинское заключение |
|
|
|
|
|
|
| `luggage_delay_report` | Акт о задержке багажа |
|
|
|
|
|
|
| `passport_scan` | Скан паспорта |
|
|
|
|
|
|
| `policy_scan` | Скан полиса |
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 Готово!
|
|
|
|
|
|
|
|
|
|
|
|
Эндпоинт работает и готов к использованию! 🚀
|
|
|
|
|
|
|
|
|
|
|
|
Подробная документация: `DOCUMENT_ATTACH_API.md`
|
|
|
|
|
|
|
2025-11-19 18:46:48 +03:00
|
|
|
|
|