Skip to content

Javob formati ​

GET /v1/jobs/{id}/result JSON qaytaradi. Barcha opsiyalar bilan stereo qo‘ng‘iroq uchun qisqartirilgan misol:

json
{
  "schema_version": "gapi_task_result.v0",
  "audio_seconds": 282.7,
  "speech_seconds": 230.4,
  "channels": 2,
  "stereo_parties": true,
  "speakers": 2,
  "vocabulary_terms": 4,
  "vocabulary_dropped": false,
  "text": "Assalomu alaykum, Metasell kompaniyasi. …",
  "language": {"code": "uz", "confidence": 0.97, "speech_seconds": 230.4, "share": {"uz": 0.91, "ru": 0.09}, "posterior": {"uz": 0.97, "ru": 0.03}},
  "call_outcome": {"outcome": "conversation", "reached": true, "confidence": 0.99, "probabilities": {"conversation": 0.99, "no_answer": 0.004, "operator_message": 0.003, "ivr": 0.003}, "answer_at": 11.4, "seconds": 180.0},
  "segments": [
    {
      "index": 0,
      "start": 0.42,
      "end": 3.9,
      "speaker": 1,
      "text": "Assalomu alaykum, Metasell kompaniyasi.",
      "raw_asr_text": "assalomu alaykum metasell kompaniyasi",
      "formatted_text": "Assalomu alaykum, Metasell kompaniyasi.",
      "pii": {"entities": [], "redacted_text": "Assalomu alaykum, Metasell kompaniyasi."},
      "language": {"code": "uz", "confidence": 0.99}
    }
  ],
  "speaker_info": [
    {
      "index": 0,
      "speech_seconds": 149.2,
      "gender": {"label": "male", "confidence": 0.97},
      "role": "client",
      "identity": {"status": "new", "voice_id": 100, "speaker_id": "e3db…", "name": null},
      "has_voiceprint": true,
      "clarity": {"scored_words": 412, "low_confidence_share": 0.071, "estimated_error_share": 0.118, "speech_rate": 5.6,
                  "line_quality": {"snr_db": 31.5, "clipping_share": 0.0, "bandwidth_hz": 3850, "band": "telephone"}}
    }
  ],
  "voices": [
    {"label": "SPEAKER_1", "speaker": 0, "voice_id": 100, "name": null, "status": "new"},
    {"label": "SPEAKER_2", "speaker": 1, "voice_id": 101, "name": "Azimbek", "status": "matched", "score": 0.97}
  ],
  "options_report": {"requested": ["gender", "speaker_roles", "speaker_identification", "pii", "language_detection", "call_outcome"], "errors": {}, "seconds": 1.8},
  "timing": {"decode_seconds": 0.3, "vad_seconds": 0.4, "stt_seconds": 2.1, "total_seconds": 4.9}
}

Matn lotin yozuvida keladi: model o‘zbek tilining lotin yozuvida o‘qitilgan va barcha opsiyalar (tinish belgilari, raqamlar, shaxsiy ma’lumotlar) u bilan ishlaydi. Chiqishda kirill yozuvi yo‘q.

Yuqori daraja ​

MaydonBu nima
audio_secondsYozuv uzunligi; g dagi yechim shundan hisoblanadi
speech_secondsUnda qancha nutq bor
channels, stereo_partiesFayldagi kanallar; tomonlar kanallar bo‘yicha ajratilgan bo‘lsa true
speakersSo‘zlovchilar bo‘yicha ajratish nechta ovoz topdi
textButun matn ketma-ket
segmentsTartib bo‘yicha replikalar
speaker_infoYozuvning har bir so‘zlovchisi bo‘yicha xulosa: opsiyalar topgan narsalar va so‘zlovchilar ma’lum bo‘lsa clarity
language«Nutq tili» da yozuvning asosiy nutq tili va har bir til ulushi; qarang: Opsiyalar
call_outcomeJonli suhbat bo‘ldimi, bo‘lmasa uning o‘rnida nima eshitildi; ikkinchi tomon javob bergan soniya. «Qo‘ng‘iroq natijasi» bilan; qarang: Opsiyalar
voice_eventsKulgi, norozilik va ovoz energiyasi: `[{"type": "laughter"
summaryQo‘ng‘iroqning qisqacha xulosasi: {"text", "lines", "read_lines"}, «Qisqacha xulosa» bilan; qarang: Opsiyalar
voices«Ovozdan tanish» da loyiha ovozlarining doimiy raqamlari
optionsYozuv aslida qaysi sozlamalar bilan hisoblangani: loyiha ustiga so‘rovning settings i. Bu yerda Opsiyalar sahifasidagi barcha kalitlar bor — stereo_channels_as_speakers, max_speakers, call_direction va fuzzy_itn (raqamlarni erkin normallashtirish; sukut bo‘yicha o‘chiq) ham
tenantVazifa nomlagan bo‘lsa, yozuv tegishli integrator biznesi; qarang: Tenantlar
vocabulary_terms, vocabulary_droppedVazifa lug‘atdan nechta atama olgani; tozalashdan keyin bittasi ham qolmasa, ikkinchisi true
diarization_errorSo‘zlovchilar bo‘yicha ajratish ishlamagan bo‘lsa true: yozuvda so‘zlovchi raqamlari bo‘lmaydi. Ajratish o‘tgan bo‘lsa, maydon bor va null ga teng
options_reportQaysi opsiyalar so‘ralgan, qaysilari hisoblanmagan va nima uchun
segment_voiceprintsQaysi replikalarda ovoz izi bor: {"dims", "format", "min_seconds", "segments": [indekslar]}. Izlarning o‘zi tashqariga chiqmaydi — bu POST /v1/speakers/{id}/enroll ga segment_indexes bilan berib, ovoz yaratsa bo‘ladigan replikalar ro‘yxati
timingQayta ishlash necha soniya olgan: decode_seconds, vad_seconds, stt_seconds, format_seconds, diarization_seconds, total_seconds. Bular bilan o‘zimizni o‘lchaymiz, sizni emas

options_report nimalar so‘ralganini (requested), nimalar hisoblanmaganini va nega (errors), hamda opsiyalarga qancha soniya ketganini (seconds) ko‘rsatadi. Rollar so‘ralgan bo‘lsa, o‘sha yerda roles ham bo‘ladi: status, kalibrlangan score (rollar to‘g‘ri taqsimlanganining ehtimoli) va qolgan maydonlar, ular Mijoz va menejer bo‘limida tasvirlangan. Har bir so‘zlovchining rolini speaker_info[].role dan oling.

Yonida xizmat maydonlari turadi — word_timing, formatting, partial. Ular bizning murojaatlarni tahlil qilish uchun: tarkibi o‘zgarishi mumkin, ustiga mantiq qurmang.

Replika ​

MaydonBu nima
indexTartib raqami, 0 dan
start, endYozuv boshidan soniyalar
speakerYozuv so‘zlovchisining raqami yoki null
textYoqilgan opsiyalar bilan yakuniy matn
raw_asr_textModel qanday eshitgan: kichik harflar, belgilarsiz
formatted_textTinish belgilari va bosh harflar bilan
wordsword_timestamps da vaqt bilan so‘zlar; qarang: quyida
speaker_shareReplika nutqining qancha ulushini ajratishning o‘zi shu so‘zlovchiga bergani, 0 dan 1 gacha; qolgani qo‘shni so‘zlardan o‘tgan. Faqat so‘zlovchilar hisoblangan joyda bo‘ladi
contextual_textLug‘atdan keyingi, tinish belgilari va raqamlardan oldingi matn: raw_asr_text bilan formatted_text orasida
duration_bucket_secondsBizning telemetriyamiz uchun uzunlik savati
emotionFaqat so‘rov olib tashlangan emotion kalitini yuborsa: doim {"label": null, "reason": "removed"}; qarang: Hissiyotlar (olib tashlandi)
pii«Shaxsiy ma’lumotlar» da {"entities", "redacted_text"}
language«Nutq tili» da {"code", "confidence"}; bir soniyadan qisqa replikada {"code": null, "reason": "too_short"}

pii belgilari: NAME, PHONE, ADDRESS, DATE, DOCUMENT_ID, CARD_NUMBER.

So‘z ​

json
{"text": "kredit", "raw": "kredit", "formatted": "kredit", "start": 12.40, "end": 12.81, "speaker": 0, "aligned": "exact", "confidence": 0.93}
{"text": "Uzum", "raw": "uzim", "formatted": "Uzum", "start": 4.12, "end": 4.51, "speaker": 1, "aligned": "term", "confidence": null}
MaydonBu nima
textLug‘atdan keyingi, tinish belgilaridan oldingi so‘z
rawModel shu o‘rinda nima eshitgani; qo‘shib qo‘yilgan so‘zda bu maydon yo‘q
formattedReplika formatlangach o‘sha so‘z bosh harf va belgilar bilan
start, endYozuv boshidan soniyalar
speakerSo‘zlovchi raqami, so‘zlovchilar hisoblangan bo‘lsa
alignedSo‘zning vaqti qayerdan olingani
confidenceSo‘z to‘g‘ri tanilganining 0 dan 1 gacha ehtimoli; so‘z modelning o‘z so‘zi bo‘lmasa null (pastga qarang)

aligned ni o‘qish arziydi: exact — modelning aynan shu so‘zdagi kadrlari; term — so‘z lug‘atdan kelgan va atama qidiruvchisining kadrlari bo‘yicha belgilangan, ya’ni bu atama qo‘llangani haqidagi to‘g‘ridan-to‘g‘ri dalil; span — qayta yozilgan bo‘lakdan tegishli ulush; chunk — bu bo‘lakka model yaroqli so‘z bermagan, vaqt butun bo‘lakka umumiy; none — akustik dalilsiz qo‘shilgan, uzunligi nol.

So‘zga ishonch. confidence — so‘z to‘g‘ri yozilganining 0 dan 1 gacha ehtimoli. U odamlar tekshirgan qo‘ng‘iroq yozuvlarida kalibrlangan: 0.8 belgisi qo‘yilgan barcha so‘zlarning taxminan o‘ntadan sakkiztasi to‘g‘ri. Bu son faqat modelning o‘z so‘zlarida bor (aligned: exact). Korrektor yoki lug‘atingiz eshitilgan narsa o‘rniga qo‘ygan so‘zda (span, term), akustik dalilsiz qo‘shilgan so‘zda (none) va yaroqli so‘zlari yo‘q bo‘lakda (chunk) confidence: null: ular uchun akustik baho yo‘q. Korrektor qayta yozgan so‘zlar modelning o‘z so‘zlariga qaraganda sezilarli darajada kamroq to‘g‘ri chiqadi, shuning uchun null ga ham qarab qo‘yish arziydi.

Ishonch nimani o‘lchaydi. U odam qanchalik yaxshi gapirganini emas, nutqni tanib olish modeli eshitganiga qanchalik ishonganini ko‘rsatadi. Tor telefon liniyasi, shovqin, past yoki haddan tashqari baland mikrofon, ovozlarning ustma-ust tushishi, kam uchraydigan ismlar va ruscha yoki inglizcha so‘zlar uni xuddi tushunarsiz nutq kabi pasaytiradi. Bitta qo‘ng‘iroqda ishonchi past so‘zlar ulushi yuqori bo‘lsa, bu shu so‘zlovchi matniga kamroq ishonish kerakligini bildiradi. O‘z-o‘zidan bu yomon diksiya dalili emas.

Yozuv so‘zlovchisi ​

MaydonBu nima
indexSo‘zlovchi raqami, replikalardagi bilan bir xil
speech_secondsU qancha gapirgan
gender{"label": "female" | "male" | "unknown", "confidence", "reason", "windows", "speech_seconds", "probabilities"}. unknown da confidence null bo‘ladi, reason esa nega ekanini aytadi
role"client", "manager", "machine" (faqat jonli odam javob berishidan oldin eshitilgan ovoz: ovozli menyu, operator xabari), "other" (ikki suhbatdoshdan tashqari jonli ovoz) yoki "unknown". Qarang: Mijoz va menejer
identity{"status", "voice_id", "speaker_id", "name", "score", "threshold", "runner_up", "kind"}
has_voiceprintSo‘zlovchining nutqi ovoz izi uchun yetarli bo‘lgan: uni Ovozlar va so‘zlovchilar orqali nomlash mumkin. Izning o‘zi tashqariga chiqmaydi
emotionFaqat olib tashlangan emotion kaliti bilan: {"dominant_mood": null, "mood_share": {}, "valence": null, "arousal": null, "dominance": null, "reason": "removed"}
language{"code", "confidence", "seconds"} — so‘zlovchining butun nutqi bo‘yicha til; ikki soniyadan kam nutqda {"code": null, "reason": "insufficient_speech"}
clarityModel shu so‘zlovchining so‘zlariga qanchalik ishongani va ular kelgan liniyaning sifati; Clarity ga qarang

identity.status bitta savolga javob beradi: bu odam tanildimi, tanilmasa nega.

StatusNima bo‘ldivoice_id bormi
matchedIz loyiha ovozi bilan mos keldiha, tanish ovoz raqami
newMos kelmadi, lekin nutq yetdi: ovoz shu yozuv bilan qayd etildi va bundan keyin tanaladiha, yangi raqam
unknownMos kelmadi va nutq 10 soniyadan kam — bunday iz bo‘yicha ovoz ochish ishonchsizyo‘q
insufficient_speechIzni umuman hisoblab bo‘lmadi: nutq deyarli yo‘qyo‘q
no_enrolled_voicesLoyihada hali birorta ovoz yo‘q, solishtiradigan narsa yo‘qyo‘q

unknown bilan insufficient_speech farqi shundaki, birinchisida iz bor va solishtirish bo‘ldi, odam shunchaki notanish va ro‘yxatga olishga nutq kam; ikkinchisida hisoblaydigan narsaning o‘zi yo‘q edi.

matched va unknown yonida score — eng yaqin ovozga yaqinlik, 0 dan 1 gacha, va threshold — moslik hisoblanadigan chegara turadi. Agar score muntazam chegaradan sal past bo‘lsa, ovozga izlar yetishmayapti: yaxshi yozuvdan yana bittasini qo‘shing.

known_speakers bilan (faqat xodimlar) identity tenant xodim liniyalari haqida gapiradi: status bu matched, not_matched, not_enrolled (nomlangan liniyaning hali ovozi yo‘q) yoki insufficient_speech; moslikda external_id, role, voice (liniyaning qaysi odami, 1–4) va expected bor, threshold 0,65 ga teng, runner_up esa o‘sha liniyaga nisbatan qo‘ng‘iroqdagi boshqa so‘zlovchi. voice_id ni faqat xodimlar oladi, has_voiceprint esa yo‘q: bunday yozuvning izlari saqlanmaydi.

O‘sha yerda runner_up ham bor — o‘xshashlik bo‘yicha ikkinchi ovozga yaqinlik (solishtiradigan narsa bo‘lmasa -1). Moslik faqat birinchi ikkinchisini zapas bilan ortda qoldirsa hisoblanadi: ikkita o‘xshash ovoz bir-biridan tasodifan yutmasligi kerak. matched va new da yana kind bor — bu loyihada qanday ovoz ekani: candidate, recurring yoki named, qarang: Ovozlar va so‘zlovchilar.

Clarity: so‘zlovchi bo‘yicha tanib olish ishonchi ​

speaker_info[].clarity so‘zlovchilari ma’lum bo‘lgan har bir yozuv uchun hisoblanadi — tomonlari alohida kanallarda bo‘lgan stereo qo‘ng‘iroq yoki so‘zlovchilarga ajratish yoqilgan mono yozuv uchun — qaysi opsiyalar yoqilganidan qat’i nazar va qo‘shimcha haqsiz.

json
"clarity": {
  "scored_words": 412,
  "low_confidence_share": 0.071,
  "estimated_error_share": 0.118,
  "speech_rate": 5.6,
  "line_quality": {"snr_db": 31.5, "clipping_share": 0.0, "bandwidth_hz": 3850, "band": "telephone"}
}
MaydonBu nima
scored_wordsSo‘zlovchining confidence ga ega so‘zlari
low_confidence_shareUlardan 0.5 dan pastlarining ulushi, ya’ni to‘g‘ri bo‘lishidan ko‘ra noto‘g‘ri bo‘lishi ehtimoli kattaroqlari
estimated_error_shareUlar bo‘yicha 1 - confidence ning o‘rtachasi: kutilishicha ularning qancha qismi noto‘g‘ri
reasonBunday so‘zlar 40 tadan kam bo‘lsa insufficient_words; ikkala ulush ham shunda null
speech_rateSo‘zlovchining o‘z nutqining har soniyasiga to‘g‘ri keladigan bo‘g‘inlar (unli harflar)
line_quality.snr_dbSo‘zlovchi replikalari ichida nutq cho‘qqilari so‘zlar orasidagi pauzalardan qanchalik baland, dB da
line_quality.clipping_shareSo‘zlovchi nutqining shkala chegarasidagi qiymatlarga ega ulushi: haddan tashqari yuklangan mikrofon yoki liniya
line_quality.bandwidth_hzBu liniyada so‘zlovchi ovozi qaysi chastotagacha yetib boradi
line_quality.bandnarrow — 3 800 Hz dan past, telephone — 3 800 dan 4 500 Hz gacha, wide — 4 500 Hz dan

Hammasi butun yozuv bo‘yicha so‘zlovchining o‘z replikalarida, boshqa birov bir vaqtda gapirgan lahzalarni chiqarib tashlab hisoblanadi. Stereo qo‘ng‘iroqda har bir tomonning liniyasi uning o‘z kanali. Bunday nutq bir soniyadan kam bo‘lsa, line_quality va speech_rate null bo‘ladi.

Liniyani so‘zlovchidan ajratish. Ulushlar o‘sha so‘zlovchi ovozidan o‘lchangan line_quality yonida turadi. Liniyani ulardan ayirmaymiz: o‘lchovlarimizda u ularning ozgina qismini tushuntiradi. Eng ko‘p ta’sir qilgani chastota kengligi bo‘ldi: narrow liniyadagi so‘zlovchilarda ishonchi past so‘zlar ulushi qolganlarnikidan qariyb ikki baravar yuqori. Oddiy qo‘ng‘iroqlardagi shovqin darajalari oralig‘ida shovqin darajasi sezilarli farq bermadi. So‘zlovchilar orasidagi farqning qariyb yarmi bitta qo‘ng‘iroqning ikkala ishtirokchisi uchun umumiy, ya’ni u odamga emas, qo‘ng‘iroqqa tegishli. Odamlarni bir xil band ichida solishtiring. Odam haqida bitta emas, ko‘p qo‘ng‘iroq bo‘yicha va o‘sha qo‘ng‘iroqlardagi suhbatdoshi bilan solishtirib xulosa qiling. E’tiborga loyiq holat — qo‘ng‘iroqdan qo‘ng‘iroqqa, bir xil turdagi liniyada suhbatdoshidan sezilarli darajada yuqori turadigan so‘zlovchi.

Cheklovlar. Baholangan so‘zlar 40 tadan kam bo‘lsa, ulushlar berilmaydi va taxminan 100 tagacha shovqinli bo‘lib qoladi: 40 so‘zda plyus-minus 4 punkt, 100 da 2,5. Mono yozuvlarda so‘zlovchilarga ajratish taxminan har yigirmata so‘zdan birini boshqa odamga beradi; har bir kanalda bitta tomon bo‘lgan stereo yozuvlarda bu muammo yo‘q. Nutq tezligi tanilgan so‘zlar bo‘yicha sanaladi, shuning uchun tanib olish uddalay olmagan joyda u past chiqadi. Kalibrovka o‘zbekcha qo‘ng‘iroqlar va nutqni tanib olishning joriy versiyasi uchun qilingan va u har safar o‘zgarganda qayta hisoblanadi.

Hissiyotlar (olib tashlandi) ​

«Hissiyotlar» opsiyasi 2026-yil 10-oktabrda olib tashlandi: unga talab kam edi, qo‘ng‘iroqlarda hissiyotlarni ishonchli aniqlash esa qiyin bo‘lib chiqdi. Integratsiyalar buzilmasligi uchun emotion kaliti hamon qabul qilinadi va uning uchun to‘lov olinmaydi. Uni yuborgan so‘rov eski maydonlarda bo‘sh javob oladi: har bir replikada {"label": null, "reason": "removed"}, speaker_info[].emotion da qiymatlari null va mood_share bo‘sh bo‘lgan so‘zlovchi xulosasi, hamda options_report.emotion = {"status": "removed"}. Keyinroq kalit olib tashlanadi; qarang: Opsiyalar.

Vazifa tayyor bo‘lmaguncha ​

GET /v1/jobs/{id}/result faqat tayyor vazifa uchun natija beradi; ketayotganda 409 result_not_ready keladi. Tayyor bo‘lgan replikalar GET /v1/jobs/{id}/events dan olinadi: API ga qarang.