# Интеграция с Doma AI API Этот документ описывает интеграцию приложения с Doma AI для автоматической синхронизации заявок. ## Обзор Модуль заявок (`ApplicationsModule`) интегрирован с Doma AI через GraphQL API. Все заявки автоматически загружаются из Doma AI и отображаются в разделе "Заявки". ## Настройка ### 1. Получение доступа к Doma AI **Для продакшена:** 1. Получите доступ к вашему продакшн инстансу Doma AI 2. Убедитесь, что у вас есть учетные данные для API 3. Получите URL API вашего инстанса (обычно: `https://your-domain.doma.ai/admin/api`) **Для тестирования (опционально):** 1. Перейдите на [тестовый стенд Doma AI](https://condo.d.doma.ai/) 2. Зарегистрируйтесь, указав email и пароль 3. Создайте новую организацию в системе ### 2. Настройка переменных окружения Создайте файл `.env.local` в корне проекта и добавьте: ```env # URL API Doma AI (PRODUCTION) # ВАЖНО: Укажите URL вашего продакшн инстанса Doma AI # Пример: https://your-domain.doma.ai/admin/api VITE_DOMA_AI_API_URL=https://your-domain.doma.ai/admin/api # Учетные данные (используйте email ИЛИ телефон) # Для продакшена используйте учетные данные вашей организации VITE_DOMA_AI_EMAIL=your-email@example.com VITE_DOMA_AI_PASSWORD=your-password # ИЛИ используйте телефон: # VITE_DOMA_AI_PHONE=+79991234567 # VITE_DOMA_AI_PASSWORD=your-password ``` **Для продакшена:** - Укажите URL вашего инстанса Doma AI (не тестовый стенд) - Используйте учетные данные вашей организации в Doma AI - Убедитесь, что URL доступен из вашего окружения ### 3. Авторизация При первом открытии раздела "Заявки" приложение автоматически: - Проверяет наличие сохраненного токена - Если токена нет, выполняет авторизацию с использованием учетных данных из переменных окружения - Сохраняет токен в localStorage для последующих запросов ## Архитектура ### Компоненты 1. **`domaGraphQLClient.ts`** - GraphQL клиент для работы с Doma AI API - Управление авторизацией (токены) - Выполнение GraphQL запросов и мутаций - Обработка ошибок 2. **`domaService.ts`** - Сервис для работы с заявками - Инициализация подключения - Получение заявок из Doma AI - Преобразование данных из формата Doma AI в формат приложения - Fallback на бэкенд или мок-данные при ошибках 3. **`ApplicationsModule.tsx`** - UI компонент модуля заявок - Отображение заявок - Инициализация подключения при загрузке ## Работа с API ### Получение заявок ```typescript import { domaService } from './services/domaService'; // Инициализация (выполняется автоматически при первом использовании) await domaService.initialize(); // Получение всех заявок const applications = await domaService.getApplications(); // Получение заявок с фильтрами const applications = await domaService.getApplications({ status: 'new', limit: 50 }); ``` ### Авторизация вручную ```typescript import { domaGraphQLClient } from './services/domaGraphQLClient'; // Через email await domaGraphQLClient.authenticate('email@example.com', 'password'); // Через телефон await domaGraphQLClient.authenticateWithPhone('+79991234567', 'password'); ``` ## Маппинг данных Данные из Doma AI автоматически преобразуются в формат приложения: | Doma AI | Приложение | |---------|------------| | `ticket.id` | `application.id` | | `ticket.number` | `application.number` | | `ticket.status.type` | `application.status` (new/in_progress/done/canceled) | | `ticket.description` | `application.description` | | `ticket.property.address` | `application.address` | | `ticket.property.unitName` | `application.apartment` | | `ticket.client.name` | `application.clientName` | | `ticket.assignee.name` | `application.performer.name` | | `ticket.createdAt` | `application.createdAt` | | `ticket.deadline` | `application.deadlineAt` | ## Обработка ошибок Сервис имеет многоуровневую систему fallback: 1. **Doma AI API** - основной источник данных 2. **Backend API** - если Doma AI недоступен 3. **Мок-данные** - если оба источника недоступны Это обеспечивает работу приложения даже при проблемах с подключением. ## Отладка Для отладки интеграции откройте консоль браузера. Сервис выводит подробные логи: - `[domaService]` - логи сервиса заявок - `[DomaGraphQLClient]` - логи GraphQL клиента ### Типичные проблемы 1. **Ошибка авторизации** - Проверьте правильность email/телефона и пароля - Убедитесь, что учетная запись создана в Doma AI 2. **Заявки не загружаются** - Проверьте URL API в переменных окружения - Убедитесь, что токен сохранен (проверьте localStorage) - Проверьте консоль на наличие ошибок GraphQL 3. **Неправильные данные** - Возможно, схема GraphQL в Doma AI отличается от ожидаемой - Проверьте структуру ответа в Network вкладке DevTools - Может потребоваться обновление запросов в `domaGraphQLClient.ts` ## Документация Doma AI - [Общая документация](https://developers.doma.ai/ru/docs/index) - [API Playground](https://condo.d.doma.ai/admin/api) - [Примеры использования](https://developers.doma.ai/ru/docs/api/examples) ## Расширение функциональности ### Добавление новых запросов Для добавления новых запросов к Doma AI: 1. Добавьте метод в `domaGraphQLClient.ts`: ```typescript async getCustomData(): Promise { const query = ` query GetCustomData { customData { id name } } `; const response = await this.request<{ customData: CustomData }>(query); return response.data?.customData; } ``` 2. Используйте его в `domaService.ts`: ```typescript async getCustomData(): Promise { await this.initialize(); return await domaGraphQLClient.getCustomData(); } ``` ### Обновление статуса заявки Для реализации обновления статуса заявки в Doma AI: 1. Изучите схему GraphQL в API Playground 2. Создайте мутацию в `domaGraphQLClient.ts` 3. Реализуйте метод в `domaService.ts` ## Безопасность ⚠️ **Важно**: Не коммитьте файлы `.env.local` с реальными учетными данными в репозиторий! - Используйте `.env.example` для примера конфигурации - Добавьте `.env.local` в `.gitignore` - Для продакшена используйте переменные окружения сервера