Ovozlar va so‘zlovchilar
Chalkashtirish oson bo‘lgan uch xil narsa:
- Yozuv so‘zlovchisi bu bitta yozuv ichidagi ovoz raqami:
segments[].speaker= 0, 1, 2… Keyingi yozuvda o‘sha odam boshqa raqam ostida bo‘lishi mumkin. - Loyiha ovozi bu odamning loyihaning barcha yozuvlaridagi doimiy raqami: #100, #101… «Ovozdan tanish» opsiyasi yoqilganda paydo bo‘ladi.
- Ism bu loyiha ovozini qanday nomlaganingiz: «Azimbek (menejer)». Ism majburiy emas: ismsiz ovoz ham taniladi.
Ovozlar raqamni qanday oladi
Yozuv «Ovozdan tanish» yoqilgan holda qayta ishlanganda:
- Yozuvning har bir so‘zlovchisi uchun ovoz izi hisoblanadi.
- Iz loyiha ovozlari bilan taqqoslanadi. Mos keldi: so‘zlovchi shu ovozning raqamini oladi, holat
matched. - Mos kelmadi, so‘zlovchining nutqi esa 10 soniya va undan ko‘p: keyingi raqam bilan yangi loyiha ovozi ro‘yxatga olinadi, holat
new. - Nutq 10 soniyadan kam: holat
unknown, raqam yo‘q. Bir necha soniyadan olingan iz ishonchsiz, biz u bo‘yicha ovoz ochmaymiz.
Yozuv so‘zlovchilarining loyiha ovozlari bilan bog‘lanishi voices da:
"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}
]speaker bu segments[].speaker dagi raqam, voice_id loyiha ovozining raqami, speaker_id so‘zlovchilar API si uchun identifikatori.
Ovoz qancha yashaydi
Bir marta eshitilgan har bir ovozni abadiy saqlash shart emas, shuning uchun ovozning turi bor va u kind da ko‘rinadi:
| Tur | Bu nima | Qancha yashaydi |
|---|---|---|
candidate | Bir marta eshitilgan ovoz | Oxirgi uchrashuvdan 30 kun, keyin yo‘qoladi |
recurring | Uch va undan ko‘p yozuvda eshitilgan | O‘chirilmaguncha saqlanadi |
named | Ism berilgan ovoz | O‘chirilmaguncha saqlanadi |
Yana uchragan nomzod last_seen_at ni yangilaydi va hisob qaytadan boshlanadi; uchinchi yozuvda u takrorlanuvchiga aylanadi va muddat olib tashlanadi. Ism muddatni darhol olib tashlaydi: ovozga ism berildi — u qoladi. Shuning uchun xodimning ovozini uchinchi yozuvni kutmay, birinchi safar nomlagan ma’qul.
expires_at ovoz qachon yo‘qolishini aytadi; recurring va named da u bo‘sh.
Ism berish
Kabinetning «So‘zlovchilar» bo‘limi loyihaning barcha ovozlarini ko‘rsatadi: nomlanganlar va avtomatik tanilgan «Ovoz #100». «Ism berish» tugmasi raqamni ismga aylantiradi. API orqali: PATCH /v1/speakers/{id} bilan {"name": "…"}.
Parchalarni bir odam sifatida belgilash
Ba’zan so‘zlovchilar bo‘yicha ajratish xato qiladi: bir odam ikki raqamga tushadi yoki aksincha. Yozuv natijasida «Bir odamning bo‘laklarini belgilash» rejimi bor: aniq bir odamga tegishli replikalarni tanlang va bu kim ekanini ko‘rsating: mavjud ovoz yoki yangi ism. Tanlangan replikalardan iz hisoblanadi va shu ovozga qo‘shiladi. Qancha ko‘p nutq tanlansa, shuncha ishonchli; 10 soniyadan kam bo‘lsa kabinet ogohlantiradi.
API orqali: POST /v1/speakers/{id}/enroll bilan {"job_id": "…", "segment_indexes": [3, 5, 8]}. Replikalar raqamini ko‘rsatish kifoya: iz saqlangan yozuvdan bizning tomonda hisoblanadi. Izlarning o‘zi javobda yo‘q — bu biometriya va har ovozga yuzlab son, ular bilan bevosita ishlashning hojati yo‘q.
Ovoz namunasini yuklash
«So‘zlovchilar» bo‘limida bir odamning qisqa yozuvini (masalan, menejer nutqidan 20–30 soniya) yuklab, uni darhol ovozga bog‘lash mumkin. Yozuv oddiy vazifa sifatida taniladi, ya’ni boshqalar qatori balansni sarflaydi.
Bitta loyihada bir nechta biznes
Bitta loyiha orqali ko‘p bizneslarga xizmat ko‘rsatadigan integrator har bir yozuvning biznesini uning tenanti sifatida ko‘rsatadi: "tenant": "biz-86233275". Ikki tenantning ovozlari hech qachon taqqoslanmaydi va birga raqamlanmaydi: ovozlar uchun tenant alohida loyihadir, har birida raqamlash #100 dan boshlanadi. tenant siz yozuv avvalgidek loyihaning o‘z ovozlari bilan ishlaydi.
Buni o‘xshashlik chegarasi bilan qilib bo‘lmaydi. Bir xil ofis liniyalari, garnituralar va kodeklar turli bizneslar xodimlarini bir-biriga o‘xshatib qo‘yadi: haqiqiy qo‘ng‘iroqlarda boshqa biznes menejerlari yozib olingan menejer ovoziga 0,87 gacha yaqinlashgan.
Faqat xodimlar
Qo‘ng‘iroqni qaysi xodim liniyasi olib borganini bilsangiz (CRM dagi foydalanuvchi), uni yozuv bilan birga yuboring:
"settings": {
"speaker_roles": true,
"tenant": "biz-86233275",
"known_speakers": [{"external_id": "crm-9612766", "role": "manager"}]
}external_id bu liniyaning sizdagi identifikatori, A–Z a–z 0–9 . _ : @ - belgilaridan 1–128 ta. Liniya bitta odam yoki unda smenalar bo‘yicha ishlaydigan to‘rttagacha odam bo‘lishi mumkin. role bu manager (yana operator yoki supervisor), name majburiy emas, bitta yozuvda to‘rttadan ko‘p liniya bo‘lmaydi. known_speakers uchun tenant shart: usiz yuklash 400 tenant_required bilan rad etiladi, shunda unutilgan tenant bir biznes mijozlarini boshqa biznes xodimlari bilan hech qachon taqqoslamaydi.
known_speakers bilan yozuv faqat tenant xodimlari bilan taqqoslanadi:
- Faqat xodimlar taniladi va raqam oladi. Mijoz hech qachon ro‘yxatga olinmaydi, yozuvning ovoz izlari esa uning natijasi saqlanishidan oldin tashlab yuboriladi.
- So‘zlovchi liniya xodimi deb hisoblanadi, agar liniya ovozlaridan biriga yaqinligi kamida 0,65 bo‘lsa va qo‘ng‘iroqdagi boshqa so‘zlovchinikidan kamida 0,05 yuqori bo‘lsa.
identitykim ekanini aytadi:{"status": "matched", "external_id": "crm-9612766", "role": "manager", "voice": 2, "expected": true, "score": 0.91, "threshold": 0.65, "runner_up": 0.39, "voice_id": 100}.voiceliniyaning qaysi odami ekanini 1 dan 4 gacha aytadi; ularning ismlarini biz bilmaymiz.expected: falseovoz nomlangan liniyaga emas, o‘sha biznesning boshqa liniyasiga tegishli ekanini bildiradi. Bu hukm emas, CRM ni tekshirish uchun ishora: ovoz hamkasblarni xodim va mijozdan ko‘ra ancha yomonroq ajratadi.- Boshqa holatlar:
not_enrolled(nomlangan liniyaning hali ovozi yo‘q),not_matched(xodimlardan hech kim emas),insufficient_speech. - Rollar
known_speakersbilan birga yoqiladi. Aynan bitta tomoni tanilgan ikki tomonli qo‘ng‘iroq rollarni ovozdan oladi: bu tomon liniyaning rolini, ikkinchisiclientni oladi.options_report.roles.sourcenima hal qilganini aytadi (voice,textyokinone),roles.textesa yonida matn modelining o‘z javobiniagreesbilan saqlaydi.
"enroll": "off" allaqachon o‘rganilgan ovozlarni taniydi va yangi narsa o‘rganmaydi.
Liniya ovozlari qanday o‘rganiladi
Namuna yuklash shart emas. Liniya nomlangan har bir qo‘ng‘iroqdan matn modeli menejer deb atagan tomonni olamiz. Shu tarzda liniyaning oxirgi 20 ta qo‘ng‘irog‘idan ikkitasida eshitilgan ovoz uning ovozlaridan biriga aylanadi; liniyada eng ko‘p eshitilgan to‘rttagacha ovoz bo‘ladi. Mijoz ovozi qo‘ng‘iroqdan qo‘ng‘iroqqa takrorlanmaydi, shuning uchun matn modeli mijozni menejer deb olganida ham u liniya ovoziga aylanmaydi. Liniyaga yangi kelgan odam uchinchi qo‘ng‘irog‘idan taniladi, uning qo‘ng‘iroqlarini olmay qo‘ygan odam esa oyna siljigani sari chiqib ketadi. Liniyada ovoz paydo bo‘lguncha rollar ovozsizdagidek matndan olinadi.
Nima saqlanadi: liniyaning oxirgi 20 ta qo‘ng‘irog‘ining har biri uchun vazifa raqami va o‘sha tomon qayerda gapirgani, ovoz izi esa faqat u liniya ovozlaridan biriga tegishli bo‘lgandagina. Hali takrorlanmagan tomon kerak bo‘lganda saqlangan yozuvdan qayta hisoblanadi, shuning uchun matn modeli xato tanlagan mijozning izi saqlanmaydi.
Agar 20 ta qo‘ng‘iroqda birorta ovoz takrorlanmasa, liniya inconsistent holatini oladi. Haqiqiy qo‘ng‘iroqlarda liniya xodimlari taxminan 100 ta qo‘ng‘iroqdan 95 tasida tanilgan — liniyada bitta odam bo‘lganda ham, bir necha odam smenalar bilan ishlaganda ham, stereoda ham, monoda ham — mijozni esa ovoz 100 ta qo‘ng‘iroqdan 1 tasidan kamrog‘ida xodim deb bilgan. Odamlari doim almashib turgan CRM hisoblarida tanish taxminan 100 tadan 80 tagacha tushadi, mijoz 100 tadan 7–10 ta qo‘ng‘iroqda xodim deb olinadi va ovoz rollarni buzganidan ko‘p tuzatmaydi. Shuning uchun known_speakers ni faqat shaxsiy hisoblar va doimiy smenalar uchun yuboring.
Matn modeli noto‘g‘ri tomonni tanlagan qo‘ng‘iroqni tuzatish uchun: POST /v1/tenants/{tenant}/staff/{external_id}/enroll bilan {"job_id": "…", "speaker_index": 1}. Liniyalar ro‘yxati ovozlari bilan va o‘chirish: API.
Ovoz bu biometrik ma’lumot
Ovozlarni faqat odamlarning roziligi bilan qo‘shing. Ovozni o‘chirish uning barcha izlarini o‘chiradi: DELETE /v1/speakers/{id}. Bir ovozda 10 tadan ko‘p iz, bir loyihada 500 tadan ko‘p ovoz bo‘lmaydi.
Liniyani o‘chirish, DELETE /v1/tenants/{tenant}/staff/{external_id}, uning barcha ovozlarini, ularning izlarini va eslab qolingan qo‘ng‘iroqlarni darhol olib tashlaydi; …/voices/{n} uning bitta odamini olib tashlaydi. DELETE /v1/tenants/{tenant} bitta biznesga tegishli hamma narsani, uning saqlangan natijalari ichidagi izlarni ham o‘chiradi. O‘chirilgan yozuv har bir liniya oynasidan chiqadi. Yozuvlarning o‘zi har qanday vazifadagidek saqlanadi, natija esa 30 kundan keyin muddati tugaguncha liniya identifikatori bilan identity ni saqlaydi.