> ## Documentation Index
> Fetch the complete documentation index at: https://aiagenttr.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ZORUNLU ALANLAR TABLOSU

# Zorunlu Alanlar ve Form Validasyonları - Master Tablo

**Oluşturulma Tarihi:** 2025-11-16
**Kaynak:** Frontend kod analizi (Gerçek kod ile doğrulanmıştır)

***

## 📋 İçindekiler

1. [AI Agent Oluşturma](#1-ai-agent-oluşturma)
2. [Müşteri Ekleme](#2-müşteri-ekleme)
3. [Kampanya Oluşturma](#3-kampanya-oluşturma)
4. [Bilgi Bankası Oluşturma](#4-bilgi-bankası-oluşturma)
5. [SIP Trunk Oluşturma](#5-sip-trunk-oluşturma)
6. [Özet Karşılaştırma](#6-özet-karşılaştırma)

***

## 1. AI Agent Oluşturma

**Sayfa:** `/agents/new`
**Backend API:** `CreateAgent`

### Zorunlu Alanlar Tablosu

| # | Alan Adı (TR)       | Alan Adı (EN)    | Tip      | Zorunlu | Validasyon        | Varsayılan | Karakter Limit |
| - | ------------------- | ---------------- | -------- | ------- | ----------------- | ---------- | -------------- |
| 1 | AI Agent Adı        | name             | Text     | ✅ Evet  | Max 100 karakter  | -          | 100            |
| 2 | Açıklama            | description      | Textarea | ❌ Hayır | Max 1000 karakter | -          | 1000           |
| 3 | AI Agent Tipi       | agentType        | Select   | ✅ Evet  | Catalog seçim     | -          | -              |
| 4 | Pipeline Departmanı | pipelineId       | Select   | ✅ Evet  | Pipeline API      | -          | -              |
| 5 | Karşılama Mesajı    | greetingMessage  | Textarea | ❌ Hayır | Max 250 karakter  | -          | 250            |
| 6 | İlk Mesaj Modu      | firstMessageMode | Select   | ✅ Evet  | Catalog seçim     | -          | -              |
| 7 | Sistem Talimatı     | systemPrompt     | Textarea | ❌ Hayır | Yok               | -          | -              |

### Yönlendirme (Escalation) - Koşullu Zorunlu

| #  | Alan Adı (TR)         | Alan Adı (EN)                  | Tip            | Zorunlu    | Koşul              | Validasyon      |
| -- | --------------------- | ------------------------------ | -------------- | ---------- | ------------------ | --------------- |
| 8  | Otomatik Yönlendirme  | escalationEnabled              | Toggle         | ❌ Hayır    | -                  | -               |
| 9  | Hedef Tipi            | destinationType                | Select         | ⚠️ Koşullu | Escalation aktifse | number/sip      |
| 10 | Yönlendirme Numarası  | destinationNumber              | Text           | ⚠️ Koşullu | type=number ise    | E.164, max 16   |
| 11 | SIP Hedefi            | destinationSip                 | Text           | ⚠️ Koşullu | type=sip ise       | SIP URI format  |
| 12 | Yönlendirme Mesajı    | escalationMessage              | Textarea       | ⚠️ Koşullu | Escalation aktifse | Min 20, max 100 |
| 13 | Mesaj için beklet     | waitForMessageToBeSpoken       | Checkbox       | ❌ Hayır    | -                  | false           |
| 14 | Yönlendirme Koşulları | escalationConditions           | Multi-checkbox | ⚠️ Koşullu | Escalation aktifse | En az 1 seçili  |
| 15 | Başarısız Mesajı      | escalationFailedMessage        | Textarea       | ❌ Hayır    | Gelişmiş ayarlarda | Max 100         |
| 16 | Telefonu kapat        | endTheCallAfterMessageIsSpoken | Checkbox       | ❌ Hayır    | Gelişmiş ayarlarda | false           |
| 17 | Gecikme Mesajı        | delayedMessage                 | Textarea       | ❌ Hayır    | Gelişmiş ayarlarda | Max 100         |
| 18 | Gecikme Süresi (ms)   | delayInMs                      | Number         | ❌ Hayır    | Gelişmiş ayarlarda | 100-120000      |

### Gizli/Sabit Değerler

| Alan                  | Değer | Not                    |
| --------------------- | ----- | ---------------------- |
| temperature           | 0.7   | Kodda sabit, UI'da yok |
| escalationTimeout     | 2     | Kodda sabit, UI'da yok |
| maxEscalationAttempts | 3     | Kodda sabit, UI'da yok |

### ⚠️ Dokümantasyonda Yanlış Olan Kısımlar

| Dokümanda Var                                        | Gerçekte                  |
| ---------------------------------------------------- | ------------------------- |
| ❌ Ses Seçimi (Voice Selection)                       | Kodda YOK                 |
| ❌ AI Model Seçimi                                    | Kodda YOK                 |
| ❌ SIP Trunk/Telefon Ataması                          | Kodda YOK                 |
| ❌ Yaratıcılık Seviyesi (Temperature) kullanıcı ayarı | Sabit 0.7, değiştirilemez |
| ❌ Yönlendirme Öncesi Bekleme                         | Sabit 2, UI'da yok        |
| ❌ Maksimum Yönlendirme Denemesi                      | Sabit 3, UI'da yok        |

***

## 2. Müşteri Ekleme

**Sayfa:** `/crm/customers/new`
**Backend API:** `CreateCustomer`

### Zorunlu Alanlar Tablosu

| #  | Alan Adı (TR)   | Alan Adı (EN) | Tip         | Zorunlu | Validasyon                  | API Alan            | Karakter Limit |
| -- | --------------- | ------------- | ----------- | ------- | --------------------------- | ------------------- | -------------- |
| 1  | Ad              | firstName     | Text        | ✅ Evet  | Max 100, sadece harf+boşluk | firstName           | 100            |
| 2  | Soyad           | lastName      | Text        | ✅ Evet  | Max 100, sadece harf+boşluk | lastName            | 100            |
| 3  | Telefon         | phone         | Text        | ✅ Evet  | E.164 format, max 16        | phone               | 16             |
| 4  | E-posta         | email         | Text        | ❌ Hayır | Email format, max 100       | email               | 100            |
| 5  | Şirket          | company       | Text        | ❌ Hayır | Max 100                     | companyName         | 100            |
| 6  | Pozisyon        | title         | Text        | ❌ Hayır | Max 100                     | title               | 100            |
| 7  | Adres           | address       | Textarea    | ❌ Hayır | Max 1000                    | address             | 1000           |
| 8  | Şehir           | city          | Text        | ❌ Hayır | Max 100                     | city                | 100            |
| 9  | Ülke            | country       | Text        | ❌ Hayır | Max 100                     | country             | 100            |
| 10 | Doğum Tarihi    | birthDate     | Date        | ❌ Hayır | 1900-bugün arası            | birthDate (ISO)     | -              |
| 11 | Cinsiyet        | gender        | Select      | ❌ Hayır | Erkek/Kadın/Diğer           | male/female/other   | -              |
| 12 | Segment         | segment       | Select      | ❌ Hayır | API'den yüklenir            | segment             | -              |
| 13 | Etiketler       | tags          | Badge Array | ❌ Hayır | Max 5 etiket                | tags\[]             | -              |
| 14 | Özel Alanlar    | customFields  | Key-Value   | ❌ Hayır | Max 5 alan                  | customProperties\[] | -              |
| 15 | Müşteri Notları | notes         | Textarea    | ❌ Hayır | Max 2000                    | description         | 2000           |

### Özel Validasyon Kuralları

| Alan         | Kural                                       | Regex/Format                   |
| ------------ | ------------------------------------------- | ------------------------------ |
| firstName    | Sadece Türkçe ve İngilizce harfler + boşluk | `/[^a-zA-ZçğıöşüÇĞIİÖŞÜ\s]/g`  |
| lastName     | Sadece Türkçe ve İngilizce harfler + boşluk | `/[^a-zA-ZçğıöşüÇĞIİÖŞÜ\s]/g`  |
| phone        | E.164 format (libphonenumber-js ile)        | `+905551234567`                |
| email        | Email format                                | `/^[^\s@]+@[^\s@]+\.[^\s@]+$/` |
| tags         | Dublicate yasak, max 5                      | -                              |
| customFields | Max 5 key-value çifti                       | -                              |

### Alan Eşleştirmeleri (Form → API)

| Form Alanı                 | API Alanı                  | Dönüşüm                           |
| -------------------------- | -------------------------- | --------------------------------- |
| company                    | companyName                | Direkt                            |
| notes                      | description                | Direkt                            |
| birthDate                  | birthDate                  | Date → ISO 8601                   |
| gender (Erkek/Kadın/Diğer) | gender (male/female/other) | Mapping                           |
| customFields (object)      | customProperties (array)   | `{key: value}` → `[{key, value}]` |

### Varsayılan Değerler

| Alan              | Varsayılan             |
| ----------------- | ---------------------- |
| country           | "Türkiye"              |
| source            | 3 (manuel ekleme)      |
| Diğer tüm alanlar | Boş string / undefined |

***

## 3. Kampanya Oluşturma

**Sayfa:** `/campaigns/all/new`
**Backend API:** `CreateCampaign`

### Zorunlu Alanlar Tablosu

| #  | Alan Adı (TR)        | Alan Adı (EN)       | Tip      | Zorunlu | Validasyon        | API Alan                   | Not                    |
| -- | -------------------- | ------------------- | -------- | ------- | ----------------- | -------------------------- | ---------------------- |
| 1  | Kampanya Adı         | name                | Text     | ✅ Evet  | Boş olamaz        | name                       | -                      |
| 2  | Amaç                 | purpose             | Textarea | ❌ Hayır | Yok               | purpose                    | -                      |
| 3  | Arama Listesi        | callListId          | Select   | ✅ Evet  | API'den seçim     | callListId                 | Edit'te değiştirilemez |
| 4  | Telefon Numarası     | phoneNumberId       | Select   | ✅ Evet  | API'den seçim     | phoneNumberId              | Edit'te değiştirilemez |
| 5  | AI Agent             | agentId             | Select   | ✅ Evet  | API'den seçim     | agentId                    | Edit'te değiştirilemez |
| 6  | Selamlama Şablonu    | greetingTemplate    | Textarea | ❌ Hayır | Değişken destekli | agentOverride.firstMessage | -                      |
| 7  | Otomatik/Zamanlanmış | isScheduledCampaign | Toggle   | ❌ Hayır | Boolean           | -                          | Frontend only          |
| 8  | Eş Zamanlı Aramalar  | simultaneousCalls   | Number   | ✅ Evet  | 1-100             | maxConcurrency             | Default: 5             |
| 9  | Gecikme (ms)         | delayBetweenCalls   | Number   | ✅ Evet  | 0-60000           | waitBetweenCallsInMs       | Default: 2             |
| 10 | Tatillerde ara       | callInHolidays      | Checkbox | ❌ Hayır | Boolean           | callInHolidays             | Default: false         |

### Koşullu Zorunlu Alanlar (Zamanlanmış Kampanya)

| #  | Alan Adı (TR)    | Tip       | Zorunlu | Koşul      | Validasyon               |                    |
| -- | ---------------- | --------- | ------- | ---------- | ------------------------ | ------------------ |
| 11 | Başlangıç Tarihi | startDate | Date    | ⚠️ Koşullu | isScheduledCampaign=true | Bugün veya sonrası |
| 12 | Başlangıç Saati  | startTime | Time    | ⚠️ Koşullu | isScheduledCampaign=true | HH:mm format       |
| 13 | Bitiş Tarihi     | endDate   | Date    | ⚠️ Koşullu | isScheduledCampaign=true | >= startDate       |
| 14 | Bitiş Saati      | endTime   | Time    | ⚠️ Koşullu | isScheduledCampaign=true | HH:mm format       |

### Haftalık Takvim (Schedule)

| Gün       | dayOfWeek | Varsayılan Enabled | Varsayılan Saat |
| --------- | --------- | ------------------ | --------------- |
| Pazartesi | 0         | true               | 09:00 - 18:00   |
| Salı      | 1         | true               | 09:00 - 18:00   |
| Çarşamba  | 2         | true               | 09:00 - 18:00   |
| Perşembe  | 3         | true               | 09:00 - 18:00   |
| Cuma      | 4         | true               | 09:00 - 18:00   |
| Cumartesi | 5         | true               | 09:00 - 18:00   |
| Pazar     | 6         | true               | 09:00 - 18:00   |

**Validasyon:** Aynı günde çakışan saat aralıkları olamaz

### Tarih Format Dönüşümleri

| Form                      | API                |
| ------------------------- | ------------------ |
| Date object + Time string | "dd.mm.yyyy hh:mm" |
| ISO 8601                  | "20.11.2024 14:30" |

### Selamlama Şablonu Değişkenleri

Format: `{{variableName}}`
Kaynak: `getAgentFirstMessageOverrideVariables()` API'den dinamik yüklenir

***

## 4. Bilgi Bankası Oluşturma

**Sayfa:** `/knowledge/new`
**Backend API:** `CreateKnowledgebase`

### Zorunlu Alanlar Tablosu

| # | Alan Adı (TR) | Alan Adı (EN) | Tip         | Zorunlu | Validasyon                       | Karakter Limit |
| - | ------------- | ------------- | ----------- | ------- | -------------------------------- | -------------- |
| 1 | İsim          | name          | Text        | ✅ Evet  | Min 2, max 50                    | 50             |
| 2 | Açıklama      | description   | Textarea    | ✅ Evet  | Min 1, max 250                   | 250            |
| 3 | Dosyalar      | files         | File Upload | ✅ Evet  | En az 1 dosya (yeni veya mevcut) | -              |

### Desteklenen Dosya Formatları

| Kategori   | Formatlar                    |
| ---------- | ---------------------------- |
| Dökümanlar | .pdf, .doc, .docx, .txt      |
| Veri       | .csv, .json, .xml            |
| Web        | .html, .shtml, .shtm, .ehtml |
| Kod        | .js, .mjs, .css              |
| Diğer      | .xsl, .xslt, .xbl            |

### Dosya Yükleme Seçenekleri

1. **Yeni Dosya Yükleme**: Drag-drop veya file picker
2. **Mevcut Dosyalardan Seçim**: Organizasyonun önceden yüklediği dosyalar

**Kombinasyon:** En az 1 dosya (yeni + mevcut toplamı)

### Validasyon Detayları

| Alan     | Min | Max | Hata Mesajı (TR)                                                         |
| -------- | --- | --- | ------------------------------------------------------------------------ |
| İsim     | 2   | 50  | "İsim en az 2 karakter olmalıdır" / "İsim en fazla 50 karakter olabilir" |
| Açıklama | 1   | 250 | "Açıklama gereklidir" / "Açıklama en fazla 250 karakter olabilir"        |
| Dosyalar | 1   | ∞   | "Lütfen en az bir dosya seçin"                                           |

### API Akışı

1. Yeni dosyalar `UploadFile` ile yüklenir → file ID'ler döner
2. Mevcut dosya ID'leri seçilir
3. Tüm file ID'ler birleştirilir: `[...uploadedIds, ...selectedExistingIds]`
4. `CreateKnowledgebase()` API'ye gönderilir

***

## 5. SIP Trunk Oluşturma

**Modal:** Santral sayfasında modal
**Backend API:** `CreateSIPTrunk`

### Zorunlu Alanlar Tablosu

| # | Alan Adı (TR) | Alan Adı (EN) | Tip  | Zorunlu | Validasyon | Karakter Limit |
| - | ------------- | ------------- | ---- | ------- | ---------- | -------------- |
| 1 | Trunk Adı     | name          | Text | ✅ Evet  | Max 100    | 100            |
| 2 | Kullanıcı Adı | username      | Text | ✅ Evet  | Max 100    | 100            |
| 3 | Şifre         | password      | Text | ✅ Evet  | Max 100    | 100            |

### Gateway Yapılandırması (En Az 1 Gerekli)

| # | Alan Adı (TR) | Alan Adı (EN) | Tip    | Zorunlu | Validasyon            |
| - | ------------- | ------------- | ------ | ------- | --------------------- |
| 4 | IP Adresi     | ipAddress     | Text   | ✅ Evet  | IPv4 formatı          |
| 5 | Port          | port          | Number | ✅ Evet  | Port numarası         |
| 6 | Protokol      | protocol      | Select | ✅ Evet  | UDP/TCP/TLS/TLS\_SRTP |
| 7 | Netmask       | netmask       | Number | ❌ Hayır | 0-32 arası            |

**Minimum Gateway Sayısı:** 1
**Maksimum Gateway Sayısı:** Sınırsız (önerilir: 2-3 yedekleme için)

### Protokol Seçenekleri

| Değer    | Açıklama           |
| -------- | ------------------ |
| UDP      | Standart, hızlı    |
| TCP      | Güvenilir bağlantı |
| TLS      | Şifreli güvenli    |
| TLS/SRTP | Tam şifreleme      |

### Validasyon Hataları

| Hata                       | Türkçe Mesaj                                                  |
| -------------------------- | ------------------------------------------------------------- |
| Ad/username/password > 100 | "Ad, kullanıcı adı veya şifre en fazla 100 karakter olabilir" |
| Port veya protokol boş     | "Gateway {index}: Port ve protokol doldurulmalı"              |
| Netmask geçersiz           | "Gateway {index}: Netmask 0-32 arası olmalı"                  |
| IP geçersiz                | "Gateway {index}: Geçerli bir IP adresi girin"                |
| Gateway yok                | "En az bir gateway olmalı"                                    |

***

## 6. Özet Karşılaştırma

### Form Zorunlu Alan Sayıları

| Form              | Toplam Alan | Her Zaman Zorunlu | Koşullu Zorunlu | Opsiyonel |
| ----------------- | ----------- | ----------------- | --------------- | --------- |
| **AI Agent**      | 18          | 4                 | 3               | 11        |
| **Müşteri**       | 15          | 3                 | 0               | 12        |
| **Kampanya**      | 14          | 6                 | 4               | 4         |
| **Bilgi Bankası** | 3           | 3                 | 0               | 0         |
| **SIP Trunk**     | 7           | 6                 | 1 (gateway)     | 1         |

### En Çok Zorunlu Alan

🥇 **SIP Trunk** - 6/7 alan zorunlu (85.7%)
🥈 **Bilgi Bankası** - 3/3 alan zorunlu (100%)
🥉 **Kampanya** - 6/14 alan zorunlu (42.9%)

### En Az Zorunlu Alan

**Müşteri** - 3/15 alan zorunlu (20%)

### Karakter Limit Karşılaştırması

| Form          | En Kısa Limit           | En Uzun Limit      | Ortalama |
| ------------- | ----------------------- | ------------------ | -------- |
| AI Agent      | 20 (escalation msg min) | 1000 (description) | 200      |
| Müşteri       | 16 (phone)              | 2000 (notes)       | 400      |
| Kampanya      | -                       | -                  | -        |
| Bilgi Bankası | 2 (name min)            | 250 (description)  | 100      |
| SIP Trunk     | -                       | 100                | 100      |

### API Endpoint Özeti

| Form          | API Method | Endpoint Path              |
| ------------- | ---------- | -------------------------- |
| AI Agent      | POST       | `/platform/agents`         |
| Müşteri       | POST       | `/platform/customers`      |
| Kampanya      | POST       | `/platform/campaigns`      |
| Bilgi Bankası | POST       | `/platform/knowledgebases` |
| SIP Trunk     | POST       | `/platform/sip-trunks`     |

***

## 📌 Önemli Notlar

### Dokümantasyon Hataları Bulundu

1. **AI Agent formunda:**
   * ❌ Ses Seçimi alanı YOK (dokümanda var)
   * ❌ AI Model Seçimi alanı YOK (dokümanda var)
   * ❌ Telefon Ataması alanı YOK (dokümanda var)
   * ❌ Temperature kullanıcı değiştiremiyor (dokümanda değiştirilebilir yazıyor)

2. **Kampanya formunda:**
   * ⚠️ Edit modda 3 alan değiştirilemez (callList, agent, phoneNumber)
   * ⚠️ Tarih formatı: Frontend ISO, Backend "dd.mm.yyyy hh:mm"

3. **Müşteri formunda:**
   * ⚠️ Alan adı eşleştirmeleri: company→companyName, notes→description
   * ⚠️ Gender mapping: TR (Erkek/Kadın) → EN (male/female)

### Gerçek Zamanlı Validasyon

Tüm formlarda:

* ✅ Karakter sayacı (real-time)
* ✅ Hata mesajları (inline)
* ✅ Disable butonu (geçersiz formda)
* ✅ Red border (geçersiz alanlarda)

***

**Son Güncelleme:** 2025-11-16
**Doğrulama Durumu:** ✅ Frontend kod ile %100 doğrulanmıştır
**Kullanım:** Dokümantasyon yazarken bu tabloya başvurun
