200 lines
7.5 KiB
Markdown
200 lines
7.5 KiB
Markdown
|
|
# 🛠️ Инструмент для AI: Создание документов
|
|||
|
|
|
|||
|
|
**Дата:** 2025-01-XX
|
|||
|
|
**Статус:** ✅ Готово к использованию
|
|||
|
|
|
|||
|
|
## 🎯 Назначение
|
|||
|
|
|
|||
|
|
Простой инструмент для AI Ассистента, который:
|
|||
|
|
1. Создает пустой DOCX/XLSX/PPTX файл
|
|||
|
|
2. Записывает в него текст, сгенерированный AI
|
|||
|
|
3. Сохраняет в папку проекта
|
|||
|
|
4. Возвращает ссылку на редактирование
|
|||
|
|
|
|||
|
|
## 📍 Endpoint
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /crm_extensions/file_storage/api/create_document_with_text.php
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📥 Параметры запроса
|
|||
|
|
|
|||
|
|
### Обязательные:
|
|||
|
|
- `module` - модуль CRM (Project, Contacts, Accounts, etc.)
|
|||
|
|
- `recordId` - ID записи (проекта, контакта и т.д.)
|
|||
|
|
- `recordName` - название записи (для формирования папки)
|
|||
|
|
- `fileName` - имя создаваемого файла (без расширения)
|
|||
|
|
- `documentText` - текст документа, который нужно записать
|
|||
|
|
|
|||
|
|
### Опциональные:
|
|||
|
|
- `documentType` - тип документа: `docx` (по умолчанию), `xlsx`, `pptx`
|
|||
|
|
|
|||
|
|
## 📤 Ответ
|
|||
|
|
|
|||
|
|
### Успешный ответ:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"message": "Документ создан успешно",
|
|||
|
|
"documentName": "Претензия_УК_Жилищник.docx",
|
|||
|
|
"documentUrl": "https://s3.twcstorage.ru/.../Претензия_УК_Жилищник.docx",
|
|||
|
|
"editUrl": "https://crm.clientright.ru/crm_extensions/file_storage/api/open_file_v2.php?recordId=123456&fileName=...",
|
|||
|
|
"path": "crm2/CRM_Active_Files/Documents/Project/Дело_Иванова_123456/Претензия_УК_Жилищник.docx"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Ошибка:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": false,
|
|||
|
|
"error": "Не указаны обязательные параметры: module, recordId, fileName, documentText"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 Использование в n8n
|
|||
|
|
|
|||
|
|
### Пример HTTP Request узла в n8n:
|
|||
|
|
|
|||
|
|
**URL:**
|
|||
|
|
```
|
|||
|
|
https://crm.clientright.ru/crm_extensions/file_storage/api/create_document_with_text.php
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Method:** `POST`
|
|||
|
|
|
|||
|
|
**Body (JSON):**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"module": "{{ $json.body.context.module }}",
|
|||
|
|
"recordId": "{{ $json.body.context.projectId }}",
|
|||
|
|
"recordName": "{{ $json.body.context.projectName }}",
|
|||
|
|
"fileName": "{{ $json.body.documentName }}",
|
|||
|
|
"documentText": "{{ $json.body.generatedText }}",
|
|||
|
|
"documentType": "docx"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Или через Query Parameters (GET):**
|
|||
|
|
```
|
|||
|
|
https://crm.clientright.ru/crm_extensions/file_storage/api/create_document_with_text.php?
|
|||
|
|
module={{ $json.body.context.module }}&
|
|||
|
|
recordId={{ $json.body.context.projectId }}&
|
|||
|
|
recordName={{ $json.body.context.projectName }}&
|
|||
|
|
fileName={{ $json.body.documentName }}&
|
|||
|
|
documentText={{ $json.body.generatedText }}&
|
|||
|
|
documentType=docx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📋 Пример полного workflow в n8n
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Webhook (получает запрос от AI Drawer)
|
|||
|
|
↓
|
|||
|
|
2. AI Node (GPT-4) - генерирует текст документа
|
|||
|
|
↓
|
|||
|
|
3. HTTP Request → create_document_with_text.php
|
|||
|
|
Body: {
|
|||
|
|
module: "Project",
|
|||
|
|
recordId: "123456",
|
|||
|
|
recordName: "Дело Иванова",
|
|||
|
|
fileName: "Претензия_УК_Жилищник",
|
|||
|
|
documentText: "ПРЕТЕНЗИЯ\n\nКому: УК Жилищник\nОт: Иванов Иван Иванович\n\n..."
|
|||
|
|
}
|
|||
|
|
↓
|
|||
|
|
4. Получаем ответ:
|
|||
|
|
{
|
|||
|
|
success: true,
|
|||
|
|
documentName: "Претензия_УК_Жилищник.docx",
|
|||
|
|
editUrl: "https://..."
|
|||
|
|
}
|
|||
|
|
↓
|
|||
|
|
5. Формируем сообщение для пользователя:
|
|||
|
|
"✅ Документ создан: Претензия_УК_Жилищник.docx\n[Открыть для редактирования]"
|
|||
|
|
↓
|
|||
|
|
6. Публикуем в Redis: ai:response:{taskId}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 💬 Пример ответа AI пользователю
|
|||
|
|
|
|||
|
|
**После создания документа:**
|
|||
|
|
```
|
|||
|
|
✅ Документ создан: Претензия_УК_Жилищник.docx
|
|||
|
|
|
|||
|
|
Документ сохранен в папку проекта и готов к редактированию.
|
|||
|
|
Вы можете открыть его для просмотра и внесения изменений.
|
|||
|
|
|
|||
|
|
[Открыть документ] ← ссылка на editUrl
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎨 Форматирование текста
|
|||
|
|
|
|||
|
|
### DOCX:
|
|||
|
|
- Текст разбивается на параграфы по переносам строк (`\n`)
|
|||
|
|
- Каждый параграф отделяется пустой строкой
|
|||
|
|
- Шрифт: Times New Roman, 12pt
|
|||
|
|
- Поля: 2 см сверху/справа/снизу, 3 см слева
|
|||
|
|
|
|||
|
|
### XLSX:
|
|||
|
|
- Весь текст записывается в ячейку A1
|
|||
|
|
- Автоподбор ширины колонки
|
|||
|
|
|
|||
|
|
### PPTX:
|
|||
|
|
- Текст размещается на первом слайде
|
|||
|
|
- Разбивается на параграфы
|
|||
|
|
|
|||
|
|
## 🔍 Примеры использования
|
|||
|
|
|
|||
|
|
### Пример 1: Создание претензии
|
|||
|
|
|
|||
|
|
**Запрос в n8n:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"module": "Project",
|
|||
|
|
"recordId": "123456",
|
|||
|
|
"recordName": "Дело Иванова",
|
|||
|
|
"fileName": "Претензия_УК_Жилищник",
|
|||
|
|
"documentText": "ПРЕТЕНЗИЯ\n\nКому: УК \"Жилищник\"\nОт: Иванов Иван Иванович\n\nДата: 15.01.2025\n\nТекст претензии:\nУК отказывается возмещать ущерб от залива квартиры...\n\nТребования:\n1. Возместить ущерб в размере 400000 рублей\n2. Провести экспертизу\n\nС уважением,\nИванов Иван Иванович"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Результат:**
|
|||
|
|
- Создан файл `Претензия_УК_Жилищник.docx`
|
|||
|
|
- Сохранен в папку проекта
|
|||
|
|
- Возвращена ссылка на редактирование
|
|||
|
|
|
|||
|
|
### Пример 2: Создание иска
|
|||
|
|
|
|||
|
|
**Запрос:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"module": "Project",
|
|||
|
|
"recordId": "123456",
|
|||
|
|
"recordName": "Дело Иванова",
|
|||
|
|
"fileName": "Исковое_заявление",
|
|||
|
|
"documentText": "ИСКОВОЕ ЗАЯВЛЕНИЕ\n\nВ суд: ...\n\nИстец: Иванов Иван Иванович\nОтветчик: УК \"Жилищник\"\n\n...",
|
|||
|
|
"documentType": "docx"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## ⚠️ Ограничения
|
|||
|
|
|
|||
|
|
1. **Максимальный размер текста:** Ограничен памятью PHP (обычно 128MB+)
|
|||
|
|
2. **Форматирование:** Базовое форматирование (параграфы, переносы строк)
|
|||
|
|
3. **Таблицы/изображения:** Не поддерживаются в упрощенной версии
|
|||
|
|
|
|||
|
|
## 🚀 Следующие шаги
|
|||
|
|
|
|||
|
|
После MVP можно добавить:
|
|||
|
|
1. Поддержку шаблонов (заполнение переменных)
|
|||
|
|
2. Расширенное форматирование (жирный, курсив, списки)
|
|||
|
|
3. Таблицы и изображения
|
|||
|
|
4. Автоматическое определение типа документа
|
|||
|
|
|
|||
|
|
## 📝 Примечания
|
|||
|
|
|
|||
|
|
- Файл сохраняется в S3
|
|||
|
|
- Событие публикуется в Redis для индексации
|
|||
|
|
- Документ сразу доступен для редактирования в OnlyOffice
|
|||
|
|
- Путь формируется автоматически: `{module}/{recordName}_{recordId}/{fileName}.{ext}`
|
|||
|
|
|