Çağrı Analitiği
Çağrı Kayıtları

Çağrı Arama

POST/api/app/public-calls/get-calls
Tenant'a ait analiz edilmiş çağrı kayıtlarını sorgular. Yalnızca token sahibinin tenant'ına ait veriler döner.

Request Body

{
  "startTime": "2026-04-01T00:00:00",
  "endTime": "2026-04-10T23:59:59",
  "skip": 0,
  "take": 20,
  "sortColumn": "start_time_dt",
  "isAscending": false,
  "issueTypeNames": ["Şikayet", "Teknik Sorun"],
  "hasNewRequest": true,
  "direction": 1,
  "results": [1],
  "includeAnalysis": false
}

Parametreler

AlanTipZorunluAçıklama
startTimedatetimeEvetBaşlangıç tarihi (dahil). ISO 8601 formatında gönderilmeli.
endTimedatetimeEvetBitiş tarihi (dahil). ISO 8601 formatında gönderilmeli.
skipintHayırAtlanan kayıt sayısı. Sayfalama için kullanılır. Varsayılan: 0. Negatif değer gönderilirse hata döner.
takeintHayırDönen kayıt sayısı. Boş veya 0 ise varsayılan 20 kullanılır. İzin verilen üst sınır includeAnalysis değerine bağlıdır: false ise 500, true ise 100. Bu sınır aşılırsa istek 400 doğrulama hatası ile reddedilir (sessizce düşürülmez).
sortColumnstringHayırSıralama alanı. Gönderilmezse başlangıç tarihine göre azalan sıralanır.
isAscendingboolHayırtrue artan, false azalan sıralama. Varsayılan: false.
issueTypeNamesarrayHayırÇağrı tipi filtresi. Gönderildiğinde yalnızca belirtilen çağrı tiplerine ait kayıtlar döner. Boş bırakılırsa çağrı tipi filtresi uygulanmaz ve tüm çağrı tipleri listelenir. Tanımsız değer gönderilirse hata döner.
hasNewRequestboolHayırYeni talep içeren çağrıları filtreler. true gönderilirse yalnızca newRequestInfo alanı dolu olan kayıtlar döner, false gönderilirse yalnızca dolu olmayanlar döner. Gönderilmezse (null) filtre uygulanmaz.
directionintHayırÇağrı yönü filtresi. 0 = Gelen, 1 = Giden. Gönderilmezse her iki yön de listelenir.
resultsarrayHayırÇağrı sonucu filtresi (IN). Değerler: 1 = Cevaplandı, 2 = Meşgule Atıldı, 3 = Meşgul, 4 = Belirsiz, 5 = Kaçırıldı. Alan hiç gönderilmezse varsayılan olarak yalnızca Cevaplandı (1) sonuçlar döner. Açıkça null gönderilirse sonuç filtresi uygulanmaz.
includeAnalysisboolHayırtrue ise her kayıtta genişletilmiş analiz alanları (analysis) doldurulur ve maksimum take 100 ile sınırlanır. false (varsayılan) ise analysis boş döner ve maksimum take 500'e kadar çıkabilir.
⚠️

skip + take toplamı 10.000'i geçemez. Aşılırsa sistem sayfa boyutunu otomatik düşürür.

issueTypeNames değerleri sistemdeki çağrı tipi kataloğundaki Value veya Description alanlarıyla eşleşir. Tanımsız bir değer gönderilirse hata döner.

results alanı ile varsayılan davranış farklıdır: alan isteğe hiç eklenmezse yalnızca Cevaplandı durumundaki çağrılar döner. Tüm sonuçları görmek için "results": null göndermek gerekir.

Doğrulama Hataları

Aşağıdaki durumlarda 400 Bad Request ve ABP standart doğrulama hatası formatı döner:

  • İstek gövdesi boşsa (request null)
  • startTime, endTime'dan büyükse
  • skip negatifse
  • take, uygulanan üst sınırı (includeAnalysis: false → 500, true → 100) aşıyorsa
400Doğrulama hatası
{
  "error": {
    "code": null,
    "message": "Doğrulama hatası.",
    "details": null,
    "validationErrors": [
      {
        "message": "Başlangıç tarihi, bitiş tarihinden büyük olamaz.",
        "members": ["startTime", "endTime"]
      }
    ]
  }
}

Tarih ve Saat Davranışı

⚠️

Dönen callDate değeri kullanıcının zaman dilimi ayarına göre dönüştürülmüş olabilir. Entegrasyon ekibi tarihleri gönderirken tek bir standart belirlemelidir.

ÖneriAçıklama
ISO 8601Tüm tarihleri 2026-04-01T00:00:00 formatında gönder
Timezone standardıEkip içinde UTC mi yoksa Europe/Istanbul mu kullanılacağını netleştir

Örnek cURL

curl --request POST 'https://public-api.thinkvoice.ai/api/app/public-calls/get-calls' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'   --header 'Content-Type: application/json'   --data-raw '{
    "startTime": "2026-04-01T00:00:00",
    "endTime": "2026-04-10T23:59:59",
    "skip": 0,
    "take": 20,
    "isAscending": false,
    "issueTypeNames": ["Şikayet", "Teknik Sorun"],
    "hasNewRequest": true,
    "direction": 1,
    "results": [1],
    "includeAnalysis": false
  }'

Responses

200Başarılı
{
  "items": [
    {
      "callId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "customerId": "11111111-2222-3333-4444-555555555555",
      "callDate": "2026-04-10T14:35:12",
      "queueName": "Musteri Hizmetleri",
      "topic": "Odeme",
      "subTopic": "Iade > Gecikme",
      "resolutionStatus": "Cozuldu",
      "title": "Iade sureciyle ilgili sikayet",
      "summary": "Musteri, [MASKED] numarasi icin iade surecinin geciktigini belirtti.",
      "callIssueType": "Şikayet",
      "newRequestInfo": "Müşteri, iade sürecinin durumunu uygulama üzerinden takip edebilmek için yeni bir özellik talep etti.",
      "direction": 1,
      "directionName": "Giden",
      "resultId": 1,
      "resultName": "Cevaplandı",
      "hangupDirectionId": 1,
      "hangupDirectionName": "Müşteri",
      "endTime": "2026-04-10T14:41:47",
      "answerTime": "2026-04-10T14:35:20",
      "callDurationSeconds": 387.5,
      "queueWaitSeconds": 12,
      "personnelId": "22222222-3333-4444-5555-666666666666",
      "personnelName": "Ayşe Yılmaz",
      "agentId": "agent-42",
      "agentName": "İade Botu",
      "analysis": [],
      "metadata": null
    }
  ],
  "totalResultCount": 153,
  "totalPageCount": 8,
  "sortableColumns": []
}

Yukarıdaki örnekte includeAnalysis: false gönderildiği için analysis boş dizi döner. includeAnalysis: true gönderilirse her öğe { key, friendlyName, value } biçiminde analiz parametreleriyle doldurulur, örneğin: [{ "key": "musteri_memnuniyeti", "friendlyName": "Müşteri Memnuniyeti", "value": "Olumlu" }].

401Token geçersiz veya eksik
{ "error": "invalid_token" }
429Rate limit aşıldı — 60 istek / 60 saniye
Retry-After: 60

Yanıt Alanları

AlanTipZorunluAçıklama
callIdstringHayırÇağrının sistemdeki benzersiz kimliği.
customerIdstringHayırMüşterinin sistemdeki benzersiz kimliği.
callDatedatetimeHayırÇağrı tarihi. Kullanıcının timezone ayarına göre dönüştürülmüş olabilir.
queueNamestringHayırÇağrının ait olduğu kuyruk.
topicstringHayırAna konu.
subTopicstringHayırAlt konu zinciri.
resolutionStatusstringHayırÇözüm durumunun metinsel karşılığı.
titlestringHayırÇağrı başlığı. Hassas veriler maskelenir.
summarystringHayırÖzet metni. Telefon, e-posta, TCKN gibi veriler [MASKED] olarak döner.
callIssueTypestringHayırÇağrı tipi.
newRequestInfostringHayırYeni talep veya özellik isteği bilgisi. Yoksa null döner.
directionintHayırÇağrı yönü. 0 = Gelen, 1 = Giden.
directionNamestringHayırÇağrı yönünün metinsel karşılığı. Örn: "Gelen", "Giden".
resultIdintHayırÇağrı sonucu id'si. 1 = Cevaplandı, 2 = Meşgule Atıldı, 3 = Meşgul, 4 = Belirsiz, 5 = Kaçırıldı.
resultNamestringHayırÇağrı sonucunun metinsel karşılığı.
hangupDirectionIdintHayırÇağrıyı kim kapattı bilgisinin id'si.
hangupDirectionNamestringHayırKapanış yönünün metinsel karşılığı.
endTimedatetimeHayırÇağrının bitiş zamanı. Yoksa null döner.
answerTimedatetimeHayırÇağrının cevaplanma zamanı. Cevaplanmadıysa null döner.
callDurationSecondsdoubleHayırÇağrı süresi (saniye). Yoksa null döner.
queueWaitSecondsintHayırKuyrukta bekleme süresi (saniye).
personnelIdstringHayırÇağrıyla ilgilenen personelin kimliği. Yoksa null döner.
personnelNamestringHayırÇağrıyla ilgilenen personelin adı.
agentIdstringHayırÇağrıyı işleyen yapay zeka ajanının kimliği. Yoksa null döner.
agentNamestringHayırÇağrıyı işleyen yapay zeka ajanının adı.
analysisarrayHayırGenişletilmiş analiz parametreleri. İstek gövdesinde includeAnalysis: true gönderilmediği sürece boş dizi döner. Doluysa her öğe { key (snake_case), friendlyName (etiket), value (değer) } biçimindedir.
metadataobjectHayırÇağrıyı başlatan Çağrı Başlat isteğiyle gönderilen metadata'nın aynen geri dönüşü. Metadata gönderilmemişse null.
totalResultCountintHayırToplam eşleşen kayıt sayısı.
totalPageCountintHayırToplam sayfa sayısı.

Veri Güvenliği ve Maskeleme

⚠️

Aşağıdaki bilgiler yanıtta hiçbir zaman dönmez veya maskelenir:

AlanDavranış
Telefon numarasıHiç dönmez, title/summary içinde geçiyorsa [MASKED] olarak döner
E-posta[MASKED] olarak döner
TCKN[MASKED] olarak döner

callId alanı çağrının kendi kimliğidir ve telefon numarası gibi hassas veri sayılmaz — yanıtta düz metin olarak döner.