Files
crm.clientright.ru/CREATE_WEB_PROJECT_DOCS.md
Fedor cd90b0d58a feat: Добавлен инструмент генерации документов для AI Ассистента
- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI
- Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код)
- Установлен PHPWord для красивого форматирования документов
- Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале)
- Замена пробелов на подчеркивания в именах папок
- Создана документация для AI и разработчиков
- Добавлены API для работы с шаблонами Nextcloud
2025-11-12 19:46:06 +03:00

6.8 KiB
Raw Permalink Blame History

CreateWebProject - Документация

Дата создания: 01.11.2025
Автор: Фёдор
Статус: Работает и протестировано


📋 Назначение

Операция vTiger webservice для создания проекта из web-формы ERV.

Логика работы:

  • Если проект с таким номером полиса существует → возвращает ID БЕЗ обновления
  • Если проект не существует → создаёт новый

По аналогии с CreateWebContact.


🔧 Параметры

Обязательные:

  1. policy_number (String) - Номер полиса ERV (cf_1885)

    • Пример: E1000-123456789
  2. contact_id (String) - ID контакта для привязки

    • Пример: 396625
    • Получается из CreateWebContact на шаге 1

Опциональные:

  1. period_start (String) - Дата начала страхования (cf_1887)

    • Формат: DD-MM-YYYY
    • Пример: 01-01-2025
  2. period_end (String) - Дата окончания страхования (cf_1889)

    • Формат: DD-MM-YYYY
    • Пример: 31-12-2025

📥 Пример запроса

curl -X POST "https://crm.clientright.ru/webservice.php" \
  -d "operation=CreateWebProject" \
  -d "sessionName={token от login}" \
  -d "policy_number=E1000-123456789" \
  -d "contact_id=396625" \
  -d "period_start=01-01-2025" \
  -d "period_end=31-12-2025"

📤 Пример ответа

Новый проект (создан):

{
  "success": true,
  "result": "{\"project_id\":\"396865\",\"is_new\":true}"
}

Существующий проект (найден):

{
  "success": true,
  "result": "{\"project_id\":\"396865\",\"is_new\":false}"
}

Важно: result - это JSON-строка, требует JSON.parse()!


🏗️ Создаваемые поля проекта

При создании нового проекта заполняются:

Поле Значение Примечание
projectname ERV {полис} цифровой адвокат Например: "ERV E1000-123456789 цифровой адвокат"
projectstatus модерация Статус
projecttype ерв урегулирование Тип проекта
linktoaccountscontacts 12x{contact_id} Привязка к контакту
cf_1994 11x67458 Заявитель (контрагент)
cf_1885 {policy_number} Номер полиса
cf_1887 {period_start} Период начала (опционально)
cf_1889 {period_end} Период конца (опционально)
assigned_user_id Текущий API user Ответственный

🔍 Логика поиска

Проект ищется в БД по запросу:

SELECT p.projectid
FROM vtiger_project p
INNER JOIN vtiger_projectcf pcf ON p.projectid = pcf.projectid
LEFT JOIN vtiger_crmentity e ON e.crmid = p.projectid  
WHERE e.deleted = 0 AND pcf.cf_1885 = '{policy_number}'
LIMIT 1

Поиск по: cf_1885 (номер полиса)


📁 Файлы

  • Handler: include/Webservices/CreateWebProject.php
  • Handler Method: vtws_createwebproject
  • Логи: logs/CreateWebProject.log

🗄️ Регистрация в БД

vtiger_ws_operation:

operationid: 51
name: CreateWebProject
handler_path: include/Webservices/CreateWebProject.php
handler_method: vtws_createwebproject
type: POST
prelogin: 0

vtiger_ws_operation_parameters:

1. policy_number (String)
2. contact_id (String)
3. period_start (String)
4. period_end (String)

Тестирование

Тест 1: Создание нового проекта

Полис: E1000-TEST-1761990646
Contact: 396625
Результат: {"project_id":"396865","is_new":true}
Статус: ✅ Создан

Тест 2: Повторный вызов с тем же полисом

Полис: E1000-TEST-1761990646
Contact: 396625
Результат: {"project_id":"396865","is_new":false}
Статус: ✅ Найден существующий (НЕ создан дубликат!)

🔗 Интеграция с n8n

Workflow флоу (планируется):

1. Step1Phone → CreateWebContact
   ↓ contact_id
   
2. Step2Policy → Проверка полиса
   ↓ policy_number, period_start, period_end
   
3. n8n → CreateWebProject
   POST https://crm.clientright.ru/webservice.php
   {
     operation: CreateWebProject,
     sessionName: {token},
     policy_number: "E1000-123456789",
     contact_id: "396625",
     period_start: "01-01-2025",
     period_end: "31-12-2025"
   }
   ↓
   
4. Response → {"project_id": "396865", "is_new": false}
   ↓
   
5. Redis session update:
   claim:{claim_id} += {
     project_id: "396865",
     is_new_project: false
   }

📊 Связь с CreateWebContact

Операция Ищет по Создаёт если Возвращает
CreateWebContact mobile (телефон) Не найден контакт {contact_id, is_new}
CreateWebProject cf_1885 (полис) Не найден проект {project_id, is_new}

Флоу: Телефон → Контакт → Полис → Проект → Тип события → Документы → Тикет


🐛 Troubleshooting

Ошибка: "Unknown operation requested"

Причина: Операция не зарегистрирована в БД.
Решение: Запустить register_CreateWebProject_fixed.php (уже выполнено).

Ошибка: BOM символ в ответе

Причина: Файл CreateWebProject.php сохранён с UTF-8 BOM.
Решение: sed -i '1s/^\xEF\xBB\xBF//' include/Webservices/CreateWebProject.php (уже выполнено).

Проект создаётся дубликатом

Причина: Номер полиса отличается (пробелы, регистр).
Решение: В коде есть trim(), но нет приведения к верхнему регистру. Если нужно - добавить.


📝 История изменений

01.11.2025:

  • Создан файл CreateWebProject.php
  • Зарегистрирован в БД (operationid: 51)
  • Протестирован (создание + поиск)
  • Закоммичен в master (af802149)

Готово к использованию! 🎉