Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

Shubhasiz, ko'plaringiz, men kabi, o'ziga xos narsa qilish g'oyasiga ega bo'lgansiz. Ushbu maqolada men PBXni ishlab chiqishda duch keladigan texnik muammolar va echimlarni tasvirlab beraman. Ehtimol, bu kimgadir o'z g'oyasi bo'yicha qaror qabul qilishga yordam beradi va kimdir yaxshi bosib o'tilgan yo'ldan borishga yordam beradi, chunki men ham kashshoflarning tajribasidan foydalandim.

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

G'oya va asosiy talablar

Va hammasi shunchaki sevgidan boshlandi Asterisk (aloqa dasturlarini qurish uchun ramka), telefoniya va qurilmalarni avtomatlashtirish freepbx (uchun veb-interfeys Asterisk). Agar kompaniyaning ehtiyojlari aniq bo'lmasa va imkoniyatlarga kirsa freepbx - hammasi a `lo. Butun o'rnatish XNUMX soat ichida amalga oshirildi, kompaniya sozlangan PBX, foydalanuvchilar uchun qulay interfeys va qisqa ta'lim va agar kerak bo'lsa, qo'llab-quvvatlashni oldi.

Lekin eng qiziqarli vazifalar nostandart edi va keyin bu juda ajoyib emas edi. Asterisk ko'p ish qila oladi, lekin veb-interfeysni ish tartibida saqlash uchun ko'p marta ko'proq vaqt sarflash kerak edi. Shunday qilib, kichik bir tafsilot PBXning qolgan qismini o'rnatishdan ko'ra ko'proq vaqt talab qilishi mumkin. Gap shundaki, veb-interfeysni yozish uchun ko'p vaqt talab etiladi, aksincha, gap arxitektura xususiyatlarida. freepbx. Arxitektura yondashuvlari va usullari freepbx php4 vaqtida yaratilgan va o'sha paytda hamma narsani sodda va qulayroq qilish mumkin bo'lgan php5.6 allaqachon mavjud edi.

Oxirgi somon diagramma ko'rinishidagi grafik dialplanlar edi. Men shunga o'xshash narsalarni qurishga harakat qilganimda freepbx, Men uni sezilarli darajada qayta yozishim kerakligini angladim va yangi narsalarni qurish osonroq bo'ladi.

Asosiy talablar quyidagilar edi:

  • oddiy sozlash, hatto boshlang'ich administrator ham intuitiv ravishda foydalanishi mumkin. Shunday qilib, kompaniyalar biz tomonda PBX texnik xizmat ko'rsatishni talab qilmaydi,
  • vazifalarni etarli vaqt ichida hal qilish uchun oson o'zgartirish,
  • ATS bilan integratsiya qulayligi. U freepbx sozlamalarni o'zgartirish uchun API yo'q edi, ya'ni. Siz, masalan, uchinchi tomon ilovasidan guruhlar yoki ovozli menyular yarata olmaysiz, faqat APIning o'zi Asterisk,
  • ochiq manba - dasturchilar uchun bu mijoz uchun o'zgartirishlar uchun juda muhimdir.

Tezroq rivojlanish g'oyasi barcha funksionallik ob'ektlar ko'rinishidagi modullardan iborat bo'lishi kerak edi. Barcha ob'ektlar umumiy ota-klassga ega bo'lishi kerak edi, ya'ni barcha asosiy funktsiyalarning nomlari allaqachon ma'lum va shuning uchun allaqachon standart ilovalar mavjud. Ob'ektlar sizga assotsiativ massivlar ko'rinishidagi argumentlar sonini string tugmachalari bilan sezilarli darajada kamaytirishga imkon beradi, ularni siz ushbu sahifada topishingiz mumkin. freepbx Bu butun funktsiyani va ichki o'rnatilgan funktsiyalarni o'rganish orqali mumkin edi. Ob'ektlar holatida, banal avtoto'ldirish barcha xususiyatlarni ko'rsatadi va umuman hayotni ko'p marta soddalashtiradi. Bundan tashqari, meros va qayta aniqlash allaqachon o'zgartirishlar bilan ko'p muammolarni hal qiladi.

Qayta ishlash vaqtini sekinlashtirgan va undan qochishga arziydigan keyingi narsa takrorlash edi. Agar xodimga qo'ng'iroq qilish uchun mas'ul bo'lgan modul mavjud bo'lsa, u holda xodimga qo'ng'iroqni yuborish kerak bo'lgan barcha boshqa modullar undan foydalanishlari kerak va o'zlarining nusxalarini yaratmasliklari kerak. Shunday qilib, agar siz biror narsani o'zgartirishingiz kerak bo'lsa, unda siz faqat bitta joyda o'zgartirishingiz kerak bo'ladi va "u qanday ishlaydi" ni qidirish butun loyiha bo'ylab qidirilmaydi va bir joyda amalga oshirilishi kerak.

Birinchi versiya va birinchi xatolar

Birinchi prototip bir yil ichida tayyor bo'ldi. Rejaga ko'ra, butun PBX modulli edi va modullar nafaqat qo'ng'iroqlarni qayta ishlash uchun yangi funksiyalarni qo'shishi, balki veb-interfeysning o'zini ham o'zgartirishi mumkin edi.

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim
Ha, bunday sxema ko'rinishida dialplanni qurish g'oyasi meniki emas, lekin bu juda qulay va men ham xuddi shunday qildim. Asterisk.

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

Modul yozish orqali dasturchilar allaqachon:

  • diagrammada, shuningdek chapdagi elementlar menyusida joylashtirilishi mumkin bo'lgan qo'ng'iroqlarni qayta ishlash uchun o'zingizning funksiyangizni yarating;
  • veb-interfeys uchun o'z sahifalaringizni yarating va shablonlaringizni mavjud sahifalarga qo'shing (agar sahifa ishlab chiqaruvchisi buni taqdim etgan bo'lsa),
  • sozlamalaringizni asosiy sozlamalar yorlig'iga qo'shing yoki shaxsiy sozlamalar yorlig'ini yarating,
  • dasturchi mavjud moduldan meros olishi, funksiyaning bir qismini o'zgartirishi va uni yangi nom bilan ro'yxatdan o'tkazishi yoki asl modulni almashtirishi mumkin.

Masalan, siz o'zingizning ovozli menyuingizni shunday yaratishingiz mumkin:

......
class CPBX_MYIVR extends CPBX_IVR
{
 function __construct()
 {
 parent::__construct();
 $this->_module = "myivr";
 }
}
.....
$myIvrModule = new CPBX_MYIVR();
CPBXEngine::getInstance()->registerModule($myIvrModule,__DIR__); //Зарегистрировать новый модуль
CPBXEngine::getInstance()->registerModuleExtension($myIvrModule,'ivr',__DIR__); //Подменить существующий модуль

Birinchi murakkab amalga oshirish birinchi mag'rurlik va birinchi umidsizliklarni olib keldi. Bu ishlaganidan, men allaqachon asosiy xususiyatlarni takrorlay olganimdan xursand bo'ldim freepbx. Sxema g'oyasi odamlarga yoqqanidan xursand bo'ldim. Rivojlanishni soddalashtirish uchun hali ham ko'p variantlar mavjud edi, lekin o'sha paytda ham ba'zi vazifalar allaqachon osonlashtirildi.

PBX konfiguratsiyasini o'zgartirish uchun API umidsizlik bo'ldi - natija biz xohlagandek emas edi. Men xuddi shu printsipni oldim freepbx, Ilova tugmasini bosish orqali butun konfiguratsiya qayta yaratiladi va modullar qayta ishga tushiriladi.

Bu shunday ko'rinadi:

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim
*Dialplan - bu qo'ng'iroqqa ishlov beriladigan qoida (algoritm).

Ammo bu variant bilan PBX sozlamalarini o'zgartirish uchun oddiy API yozish mumkin emas. Birinchidan, o'zgarishlarni qo'llash operatsiyasi Asterisk juda uzoq va resurs talab qiladi.
Ikkinchidan, siz bir vaqtning o'zida ikkita funktsiyani chaqira olmaysiz, chunki ikkalasi ham konfiguratsiyani yaratadi.
Uchinchidan, u barcha sozlamalarni, shu jumladan administrator tomonidan o'rnatilgan sozlamalarni qo'llaydi.

Ushbu versiyada, xuddi shunday Askozia, faqat o'zgartirilgan modullarning konfiguratsiyasini yaratish va faqat kerakli modullarni qayta ishga tushirish mumkin edi, ammo bularning barchasi yarim o'lchovlardir. Yondashuvni o'zgartirish kerak edi.

Ikkinchi versiya. Burun dumini tortib oldi

Muammoni hal qilish g'oyasi konfiguratsiya va dialplanni qayta yaratish emas edi Asterisk, lekin ma'lumotni ma'lumotlar bazasiga saqlang va qo'ng'iroqni qayta ishlash jarayonida to'g'ridan-to'g'ri ma'lumotlar bazasidan o'qing. Asterisk Men allaqachon ma'lumotlar bazasidan konfiguratsiyalarni qanday o'qishni bilardim, shunchaki ma'lumotlar bazasidagi qiymatni o'zgartiring va keyingi qo'ng'iroq o'zgarishlarni hisobga olgan holda qayta ishlanadi va funktsiya dialplan parametrlarini o'qish uchun juda mos edi. REALTIME_HASH.

Oxir-oqibat, hatto qayta boshlashning hojati yo'q edi Asterisk sozlamalarni o'zgartirganda va barcha sozlamalar darhol qo'llanila boshlandi Asterisk.

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

Dialplandagi yagona o'zgarishlar - bu kengaytma raqamlarining qo'shilishi va maslahatlar. Ammo bu kichik o'zgarishlar edi

exten=>101,1,GoSub(‘sub-callusers’,s,1(1)); - точечное изменение, добавляется/изменяется через ami

; sub-callusers – универсальная функция генерится при установке модуля.
[sub-callusers]
exten =>s,1,Noop()
exten =>s,n,Set(LOCAL(TOUSERID)=${ARG1})
exten =>s,n,ClearHash(TOUSERPARAM)
exten =>s,n,Set(HASH(TOUSERPARAM)=${REALTIME_HASH(rl_users,id,${LOCAL(TOUSERID)})})
exten =>s,n,GotoIf($["${HASH(TOUSERPARAM,id)}"=""]?return)
...

Siz dialplanga osongina qo'shishingiz yoki qatorni o'zgartirishingiz mumkin Ami (boshqaruv interfeysi Asterisk) va butun dial rejasini qayta ishga tushirish talab qilinmaydi.

Bu konfiguratsiya API bilan bog'liq muammoni hal qildi. Siz hatto to'g'ridan-to'g'ri ma'lumotlar bazasiga kirishingiz va yangi guruh qo'shishingiz yoki o'zgartirishingiz mumkin, masalan, guruh uchun "terish vaqti" maydonidagi dial-up vaqtini o'zgartirishingiz mumkin va keyingi qo'ng'iroq allaqachon belgilangan vaqtgacha davom etadi (Bu tavsiya etilmaydi harakat, chunki ba'zi API operatsiyalari talab qiladi Ami qo'ng'iroqlar).

Birinchi qiyin amalga oshirish yana birinchi mag'rurlik va umidsizlikni keltirdi. Bu ishlaganidan xursand bo'ldim. Ma'lumotlar bazasi muhim havolaga aylandi, diskka bog'liqlik kuchaydi, ko'proq xavflar bor edi, lekin hamma narsa barqaror va muammosiz ishladi. Va eng muhimi, endi veb-interfeys orqali amalga oshirilishi mumkin bo'lgan hamma narsani API orqali amalga oshirish mumkin edi va xuddi shu usullardan foydalanildi. Bundan tashqari, veb-interfeys ma'murlar ko'pincha unutadigan "PBX sozlamalarini qo'llash" tugmasidan xalos bo'ldi.

Xafagarchilik shundaki, rivojlanish yanada murakkablashdi. Birinchi versiyadan boshlab, PHP tili tilda dialplan yaratdi Asterisk va u butunlay o'qib bo'lmaydigan ko'rinadi, shuningdek, tilning o'zi Asterisk dialplan yozish uchun bu juda ibtidoiy.

U qanday ko'rinishga ega edi:

$usersInitSection = $dialplan->createExtSection('usersinit-sub','s');
$usersInitSection
 ->add('',new Dialplanext_gotoif('$["${G_USERINIT}"="1"]','exit'))
 ->add('',new Dialplanext_set('G_USERINIT','1'))
 ->add('',new Dialplanext_gosub('1','s','sub-AddOnAnswerSub','usersconnected-sub'))
 ->add('',new Dialplanext_gosub('1','s','sub-AddOnPredoDialSub','usersinitondial-sub'))
 ->add('',new Dialplanext_set('LOCAL(TECH)','${CUT(CHANNEL(name),/,1)}'))
 ->add('',new Dialplanext_gotoif('$["${LOCAL(TECH)}"="SIP"]','sipdev'))
 ->add('',new Dialplanext_gotoif('$["${LOCAL(TECH)}"="PJSIP"]','pjsipdev'))

Ikkinchi versiyada dialplan universal bo'lib qoldi, u parametrlarga qarab barcha mumkin bo'lgan ishlov berish variantlarini o'z ichiga oldi va uning hajmi sezilarli darajada oshdi. Bularning barchasi rivojlanish vaqtini sezilarli darajada sekinlashtirdi va dialplanga yana aralashish kerak degan fikr meni xafa qildi.

Uchinchi versiya

Muammoni hal qilish g'oyasi ishlab chiqarish emas edi Asterisk php dan dialplan va foydalaning FastAGI va PHP da barcha ishlov berish qoidalarini yozing. FastAGI Bu beradi Asterisk, qo'ng'iroqni qayta ishlash uchun rozetkaga ulang. U yerdan buyruqlar oling va natijalarni yuboring. Shunday qilib, dialplanning mantig'i allaqachon chegaralardan tashqarida Asterisk va har qanday tilda yozilishi mumkin, mening holimda PHP da.

Ko'p sinov va xatolik bor edi. Asosiy muammo shundaki, menda juda ko'p sinflar/fayllar bor edi. Ob'ektlarni yaratish, ularni ishga tushirish va bir-birini ro'yxatdan o'tkazish uchun taxminan 1,5 soniya kerak bo'ldi va har bir qo'ng'iroq uchun bu kechikishni e'tiborsiz qoldirib bo'lmaydi.

Initializatsiya faqat bir marta sodir bo'lishi kerak edi va shuning uchun yechim izlash PHP-da xizmat yozishdan boshlandi Mavzular. Bir haftalik tajribadan so'ng, ushbu kengaytma qanday ishlashining nozikligi tufayli ushbu variant to'xtatildi. Bir oylik sinovdan so'ng, men ham PHPda asinxron dasturlashdan voz kechishga majbur bo'ldim; menga oddiy, har qanday PHP boshlang'ichiga tanish bo'lgan narsa kerak edi va PHP uchun ko'plab kengaytmalar sinxrondir.

Yechim bizning C tilidagi ko'p tarmoqli xizmatimiz edi, u bilan tuzilgan PHPLIB. U barcha ATS PHP fayllarini yuklaydi, barcha modullarni ishga tushirishni kutadi, bir-biriga qayta qo'ng'iroqni qo'shadi va hamma narsa tayyor bo'lgach, uni keshlaydi. tomonidan so'ralganda FastAGI oqim yaratiladi, unda barcha sinflar va ma'lumotlar keshidan nusxa ko'paytiriladi va so'rov php funktsiyasiga uzatiladi.

Ushbu yechim bilan bizning xizmatimizga qo'ng'iroqni yuborishdan birinchi buyruqgacha bo'lgan vaqt Asterisk 1,5 soniyadan 0,05 soniyagacha kamaydi va bu vaqt loyihaning hajmiga biroz bog'liq.

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

Natijada, dialplanni ishlab chiqish vaqti sezilarli darajada qisqardi va men buni qadrlashim mumkin, chunki men PHP-dagi barcha modullarning butun dial rejasini qayta yozishga majbur bo'ldim. Birinchidan, ma'lumotlar bazasidan ob'ektni olish uchun usullar allaqachon php-da yozilishi kerak; ular veb-interfeysda ko'rsatish uchun kerak edi, ikkinchidan, va bu asosiy narsa, nihoyat, raqamlar va massivlardan iborat satrlar bilan qulay ishlash mumkin. ma'lumotlar bazasi va ko'plab PHP kengaytmalari bilan.

Modul sinfida dialplanni qayta ishlash uchun siz funktsiyani amalga oshirishingiz kerak dialplanDynamicCall va argument pbxCallRequest o'zaro aloqada bo'ladigan ob'ektni o'z ichiga oladi Asterisk.

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

Bundan tashqari, dialplanni disk raskadrovka qilish mumkin bo'ldi (php-da xdebug mavjud va u bizning xizmatimiz uchun ishlaydi), siz o'zgaruvchilar qiymatlarini ko'rish orqali bosqichma-bosqich harakat qilishingiz mumkin.

Qo'ng'iroq ma'lumotlari

Har qanday tahlil va hisobotlar to'g'ri to'plangan ma'lumotlarni talab qiladi va bu PBX bloki ham birinchi versiyadan uchinchi versiyagacha ko'p sinov va xatoliklardan o'tdi. Ko'pincha qo'ng'iroq ma'lumotlari belgidir. Bitta qo'ng'iroq = bitta yozuv: kim qo'ng'iroq qildi, kim javob berdi, qancha vaqt gaplashdi. Yana qiziqarli variantlarda qo'ng'iroq paytida qaysi PBX xodimi chaqirilganligini ko'rsatadigan qo'shimcha belgi mavjud. Ammo bularning barchasi ehtiyojlarning faqat bir qismini qoplaydi.

Dastlabki talablar quyidagilar edi:

  • nafaqat PBX qo'ng'iroq qilganini, balki kim javob berganini ham saqlang, chunki ushlashlar mavjud va qo'ng'iroqlarni tahlil qilishda buni hisobga olish kerak,
  • xodim bilan bog'lanishdan oldin vaqt. In freepbx va boshqa ba'zi ATSlarda qo'ng'iroq ATS telefonni ko'targan zahoti javob berilgan hisoblanadi. Ammo ovozli menyu uchun siz allaqachon telefonni olishingiz kerak, shuning uchun barcha qo'ng'iroqlarga javob beriladi va javobni kutish vaqti 0-1 soniyani tashkil qiladi. Shu sababli, nafaqat javob berishdan oldingi vaqtni, balki asosiy modullarga ulanishdan oldingi vaqtni tejashga qaror qilindi (modulning o'zi bu bayroqni o'rnatadi. Hozirda bu "Xodim", "Tashqi chiziq"),
  • yanada murakkab dialplan uchun, qo'ng'iroq turli guruhlar o'rtasida sayohat qilganda, har bir elementni alohida tekshirish imkoniyatiga ega bo'lish kerak edi.

PBX modullari qo'ng'iroqlarda o'zlari haqida ma'lumot yuborganda va oxir-oqibat daraxt shaklida ma'lumotni saqlaganda eng yaxshi variant bo'ldi.

Bu shunday ko'rinadi:

Birinchidan, qo'ng'iroq haqida umumiy ma'lumot (boshqalar kabi - alohida narsa yo'q).

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

  1. Tashqi liniyada qo'ng'iroq qabul qilindi "xamir uchun"soat 05:55:52 da 89295671458 raqamidan 89999999999 raqamiga, oxirida xodim javob berdi"Kotib 2» raqami bilan 104. Mijoz 60 soniya kutdi va 36 soniya gapirdi.
  2. Xodim"Kotib 2"112 raqamiga qo'ng'iroq qiladi va xodim javob beradi"Menejer 1» 8 soniyadan keyin. Ular 14 soniya gaplashadilar.
  3. Mijoz xodimga o'tkaziladi "menejer 1"U erda ular yana 13 soniya gapirishni davom ettiradilar

Ammo bu aysbergning uchi, har bir yozuv uchun PBX orqali batafsil qo'ng'iroqlar tarixini olishingiz mumkin.

Bitta loyihaning hikoyasi yoki men Asterisk va Php-ga asoslangan PBX yaratishda 7 yil sarflaganim

Barcha ma'lumotlar qo'ng'iroqlar uyasi sifatida taqdim etiladi:

  1. Tashqi liniyada qo'ng'iroq qabul qilindi "xamir uchun» 05:55:52 da 89295671458 raqamidan 89999999999 raqamiga.
  2. 05:55:53 da tashqi liniya Kiruvchi kontaktlarning zanglashiga qo'ng'iroq qiladi "sinov»
  3. Sxema bo'yicha qo'ng'iroqni qayta ishlashda modul "menejer chaqiruvi", bunda qo'ng'iroq 16 soniya. Bu mijoz uchun ishlab chiqilgan modul.
  4. moduli"menejer chaqiruvi"raqam (mijoz) uchun mas'ul xodimga qo'ng'iroq yuboradi"Menejer 1” va javobni 5 soniya kutadi. Menejer javob bermadi.
  5. moduli"menejer chaqiruvi"guruhga qo'ng'iroq yuboradi"CORP menejerlari" Bular bir xil yo'nalishdagi boshqa menejerlar (bir xonada o'tirishadi) va javobni 11 soniya kutishadi.
  6. Guruh "CORP menejerlari"xodimlarni chaqiradi"Menejer 1, Menejer 2, Menejer 3"bir vaqtning o'zida 11 soniya. Javob yo'q.
  7. Menejerning qo'ng'irog'i tugaydi. Va sxema modulga qo'ng'iroq yuboradi "1c dan marshrutni tanlash" Shuningdek, mijoz uchun yozilgan modul. Bu erda qo'ng'iroq 0 soniya davomida amalga oshirildi.
  8. Sxema qo'ng'iroqni ovozli menyuga yuboradi "Qo'shimcha terish bilan asosiy" Mijoz u erda 31 soniya kutdi, qo'shimcha terish bo'lmadi.
  9. Sxema guruhga qo'ng'iroq yuboradi "Kotiblar", bu erda mijoz 12 soniya kutdi.
  10. Bir guruhda bir vaqtning o'zida 2 nafar xodim chaqiriladi "Kotib 1"Va"Kotib 2"va 12 soniyadan keyin xodim javob beradi"Kotib 2" Qo'ng'iroqqa javob ota-ona qo'ng'iroqlariga takrorlanadi. Ma'lum bo'lishicha, u guruhda javob bergan "Kotib 2", qo'ng'iroq qilganda sxema javob berdi"Kotib 2" va tashqi liniyadagi qo'ng'iroqqa " deb javob berdiKotib 2".

Bu har bir operatsiya to'g'risidagi ma'lumotlarni saqlash va ularni joylashtirish, bu shunchaki hisobotlarni tuzish imkonini beradi. Ovozli menyudagi hisobot sizga qanchalik yordam berishini yoki to'sqinlik qilishini aniqlashga yordam beradi. Xodimlar tomonidan o'tkazib yuborilgan qo'ng'iroqlar to'g'risida hisobot tuzing, qo'ng'iroq ushlangan va shuning uchun o'tkazib yuborilgan deb hisoblanmaydi va bu guruh qo'ng'irog'i bo'lgan va boshqa birov ilgari javob bergan, ya'ni qo'ng'iroq ham o'tkazib yuborilmagan.

Bunday ma'lumotlarni saqlash sizga har bir guruhni alohida-alohida olish va uning qanchalik samarali ishlashini aniqlash, javob berilgan va o'tkazib yuborilgan guruhlarning soat bo'yicha grafigini tuzish imkonini beradi. Shuningdek, menejerga ulangandan so'ng o'tkazmalarni tahlil qilish orqali mas'ul menejerga ulanish qanchalik to'g'ri ekanligini tekshirishingiz mumkin.

Shuningdek, siz juda atipik tadqiqotlar o'tkazishingiz mumkin, masalan, ma'lumotlar bazasida bo'lmagan raqamlar qanchalik tez-tez to'g'ri kengaytmani teradi yoki chiquvchi qo'ng'iroqlarning necha foizi mobil telefonga yo'naltiriladi.

Nima oxir-oqibat?

PBXga texnik xizmat ko'rsatish uchun mutaxassis kerak emas, eng oddiy ma'mur buni qila oladi - amalda sinovdan o'tgan.

O'zgartirishlar uchun jiddiy malakaga ega bo'lgan mutaxassislar kerak emas, PHP bilimi etarli, chunki Modullar allaqachon SIP protokoli va navbat uchun, xodimni chaqirish va boshqalar uchun yozilgan. uchun o'rash sinfi mavjud Asterisk. Modulni ishlab chiqish uchun dasturchi tayyor modullarni chaqirishi mumkin (va yaxshi ma'noda kerak). Va bilim Asterisk Agar mijoz yangi hisobot bilan sahifa qo'shishni so'rasa, mutlaqo keraksiz. Ammo amaliyot shuni ko'rsatadiki, uchinchi tomon dasturchilari engishlari mumkin bo'lsa-da, ular hujjatsiz va sharhlarning normal yoritilishisiz o'zlarini xavfsiz his qilishadi, shuning uchun hali ham yaxshilanish uchun joy bor.

Modullar:

  • yangi qo'ng'iroqlarni qayta ishlash imkoniyatlarini yaratish,
  • veb-interfeysga yangi bloklar qo'shing,
  • mavjud modullarning har qandayidan meros bo'lib, funktsiyalarni qayta aniqlang va uni almashtiring yoki shunchaki biroz o'zgartirilgan nusxasi bo'ling,
  • sozlamalaringizni boshqa modullarning sozlash shabloniga qo'shing va boshqalar.

API orqali PBX sozlamalari. Yuqorida aytib o'tilganidek, barcha sozlamalar ma'lumotlar bazasida saqlanadi va qo'ng'iroq paytida o'qiladi, shuning uchun API orqali barcha PBX sozlamalarini o'zgartirishingiz mumkin. API-ga qo'ng'iroq qilganda, konfiguratsiya qayta yaratilmaydi va modullar qayta ishga tushirilmaydi, shuning uchun sizda qancha sozlamalar va xodimlaringiz borligi muhim emas. API so'rovlari tezda bajariladi va bir-birini bloklamaydi.

PBX barcha asosiy operatsiyalarni qo'ng'iroqlar bilan davomiylik (kutish/suhbat), joylashtirish va PBX shartlarida (xodim, guruh, tashqi liniya, kanal, raqam emas) bilan saqlaydi. Bu sizga ma'lum mijozlar uchun turli xil hisobotlarni yaratishga imkon beradi va ishning aksariyati foydalanuvchilarga qulay interfeys yaratishdir.

Keyinchalik nima bo'lishini vaqt ko'rsatadi. Hali ham qayta ko'rib chiqilishi kerak bo'lgan ko'plab nuanslar mavjud, hali ko'p rejalar mavjud, ammo 3-versiya yaratilganidan beri bir yil o'tdi va biz allaqachon g'oya ishlayotganini aytishimiz mumkin. 3-versiyaning asosiy kamchiliklari - bu apparat resurslari, ammo bu odatda rivojlanish qulayligi uchun to'lash kerak bo'lgan narsadir.

Manba: www.habr.com

a Izoh qo'shish