--- title: Создание лида Calltouch (Backend) --- # Сценарий 4.2: Создание лида **Calltouch** ## Бизнес-цель Маркетинг фиксирует обращения пользователей как **лиды** в системе **Calltouch** для сквозной аналитики и колл-центра. ## Точки входа | Тип | Метод + URL | Класс | | --- | --- | --- | | HTTP | `POST /calltouch/create-lead` | `CalltouchController::createLead` | **Ограничение доступа:** `#[IsGranted('ROLE_ADMIN')]` на уровне класса контроллера — вызов только для административной роли API. ## Реализация HTTP vs клиент 1. Тело (form/json) мапится в `CalltouchCreateRequestDto`, проходит `Validator`. 2. **Фактический вызов** `CalltouchClientService::requestCreate($dto)` в коде **закомментирован**; ответ клиента возвращён не будет. 3. Контроллер отдаёт `200` с полем `request` (сырые данные из `$request->request->all()`). То есть **интеграция подготовлена, но в текущей ветке кода не активна** до раскомментирования строки. ## Как устроен `CalltouchClientService` (целевое поведение) 1. `configureHeaders($dto->regionId)` выбирает пару `siteId` + токен из строки ENV, разобранной в конструкторе (`param` формат `region:siteId:token,...`). 2. Формируется `POST` на путь **`/lead-service/v1/api/request/create`** заголовками `Access-Token`, `SiteId`. 3. Тело: `json_encode(['requests' => $dto->toArray()])`. 4. Возвращается `data` из JSON-ответа Calltouch. ## Mermaid (фактическое поведение в коде) ```mermaid sequenceDiagram participant A as Админ-клиент participant CC as CalltouchController participant V as Validator A->>CC: POST /calltouch/create-lead CC->>V: validate(CalltouchCreateRequestDto) CC-->>A: 200 JSON (поле request) ``` После раскомментирования `CalltouchClientService::requestCreate` к схеме добавятся шаги HTTP `POST` к API Calltouch с заголовками `Access-Token` и `SiteId`. ## Внешние зависимости | Система | Статус | | --- | --- | | Calltouch API | клиент реализован, HTTP в контроллере отключён | | PostgreSQL | не используется в сценарии лида напрямую | ## Обработка ошибок и edge cases - **Нет конфигурации региона** — `configureHeaders` бросает `InvalidArgumentException` (на будущее при включении клиента). - **Опечатка в конструкторе** `CalltouchClientService`: два присваивания `$this->baseUrl` подряд — стоит перепроверить при включении интеграции. ## Ссылки на классы - `apps/backend/src/Controller/CalltouchController.php` - `apps/backend/src/Service/Client/CalltouchClientService.php` - `apps/backend/src/Dto/CalltouchCreateRequestDto.php` - `apps/backend/src/Service/Client/Interfaces/CalltouchClientServiceInterface.php` См. [backend-ddd.md](../backend-ddd.md).