Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

Protams, daudziem no jums, tāpat kā man, bija ideja darÄ«t kaut ko unikālu. Å ajā rakstā es aprakstÄ«Å”u tehniskās problēmas un risinājumus, ar kuriem man bija jāsaskaras, izstrādājot PBX. VarbÅ«t tas kādam palÄ«dzēs izlemt par savu ideju un kādam iet pa iestaigāto ceļu, jo arÄ« man noderēja pionieru pieredze.

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

Ideja un galvenās prasības

Un viss sākās vienkārÅ”i ar mÄ«lestÄ«bu pret ZvaigznÄ«te (sakaru lietojumprogrammu ietvars), telefonijas un instalāciju automatizācija Bezmaksas PBX (tÄ«mekļa saskarne priekÅ” ZvaigznÄ«te). Ja uzņēmuma vajadzÄ«bas bija bez specifikas un ietilpa iespēju robežās Bezmaksas PBX - viss ir lieliski. Visa instalÄ“Å”ana notika XNUMX stundu laikā, uzņēmums saņēma konfigurētu PBX, lietotājam draudzÄ«gu saskarni un Ä«su apmācÄ«bu, kā arÄ« atbalstu, ja vēlējās.

Bet interesantākie uzdevumi bija nestandarta un tad nebija tik pasakaini. ZvaigznÄ«te var izdarÄ«t daudz, taču, lai tÄ«mekļa saskarne bÅ«tu darba kārtÄ«bā, bija nepiecieÅ”ams pavadÄ«t daudzkārt vairāk laika. Tātad neliela detaļa var aizņemt daudz ilgāku laiku nekā pārējā PBX instalÄ“Å”ana. Un runa nav par to, ka tÄ«mekļa saskarnes rakstÄ«Å”ana prasa ilgu laiku, bet gan jēga ir arhitektÅ«ras iezÄ«mēs Bezmaksas PBX. ArhitektÅ«ras pieejas un metodes Bezmaksas PBX tika izlikts php4 laikā, un tajā brÄ«dÄ« jau bija php5.6, uz kura visu varēja padarÄ«t vienkārŔāku un ērtāku.

Pēdējais piliens bija grafiskie zvanu plāni diagrammas veidā. Kad es mēģināju izveidot kaut ko lÄ«dzÄ«gu Å”im Bezmaksas PBX, sapratu, ka bÅ«s bÅ«tiski jāpārraksta un bÅ«s vieglāk uzbÅ«vēt ko jaunu.

Galvenās prasības bija:

  • vienkārÅ”a iestatÄ«Å”ana, intuitÄ«vi pieejama pat iesācēju administratoram. Tādējādi uzņēmumiem mÅ«su pusē nav nepiecieÅ”ama PBX uzturÄ“Å”ana,
  • vienkārÅ”a modifikācija, lai uzdevumi tiktu atrisināti atbilstoŔā laikā,
  • ērta integrācija ar PBX. U Bezmaksas PBX nebija API iestatÄ«jumu maiņai, t.i. JÅ«s nevarat, piemēram, izveidot grupas vai balss izvēlnes no treŔās puses lietojumprogrammas, tikai paÅ”u API ZvaigznÄ«te,
  • opensource - programmētājiem tas ir ārkārtÄ«gi svarÄ«gi klienta modifikācijām.

Ātrākas attÄ«stÄ«bas ideja bija panākt, lai visa funkcionalitāte sastāvētu no moduļiem objektu formā. Visiem objektiem bija jābÅ«t kopējai vecāku klasei, kas nozÄ«mē, ka visu galveno funkciju nosaukumi jau ir zināmi un tāpēc jau ir noklusējuma implementācijas. Objekti ļaus dramatiski samazināt argumentu skaitu asociatÄ«vu masÄ«vu veidā ar virknes taustiņiem, ko varat uzzināt Bezmaksas PBX Tas bija iespējams, pārbaudot visu funkciju un ligzdotās funkcijas. Objektu gadÄ«jumā banālā automātiskā pabeigÅ”ana parādÄ«s visas Ä«paŔības un kopumā daudzkārt vienkārÅ”os dzÄ«vi. Turklāt mantoÅ”ana un pārdefinÄ“Å”ana jau atrisina daudzas problēmas ar modifikācijām.

Nākamā lieta, kas palēnināja pārstrādāŔanas laiku un no kuras bija vērts izvairÄ«ties, bija dublÄ“Å”anās. Ja ir modulis, kas atbild par darbinieka izsaukÅ”anu, tad visiem pārējiem moduļiem, kuriem jānosÅ«ta zvans darbiniekam, tas ir jāizmanto, nevis jāveido savas kopijas. Tātad, ja jums kaut kas jāmaina, jums bÅ«s jāmaina tikai vienā vietā, un meklÄ“Å”ana ā€œkā tas darbojasā€ ir jāveic vienuviet, nevis jāmeklē visā projektā.

Pirmā versija un pirmās kļūdas

Pirmais prototips bija gatavs gada laikā. Viss PBX, kā plānots, bija modulārs, un moduļi varēja ne tikai pievienot jaunu funkcionalitāti zvanu apstrādei, bet arÄ« mainÄ«t paÅ”u tÄ«mekļa saskarni.

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php
Jā, ideja par numura sastādÄ«Å”anas plāna izveidi Ŕādas shēmas veidā nav mana, taču tas ir ļoti ērti, un es darÄ«ju to paÅ”u ZvaigznÄ«te.

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

Rakstot moduli, programmētāji jau varēja:

  • izveidot savu zvanu apstrādes funkcionalitāti, ko varētu ievietot diagrammā, kā arÄ« kreisajā pusē esoÅ”o elementu izvēlnē,
  • izveidojiet savas lapas tÄ«mekļa saskarnei un pievienojiet savas veidnes esoÅ”ajām lapām (ja lapas izstrādātājs to ir paredzējis),
  • pievienojiet savus iestatÄ«jumus galvenajai iestatÄ«jumu cilnei vai izveidojiet savu iestatÄ«jumu cilni,
  • programmētājs var mantot no esoÅ”a moduļa, mainÄ«t daļu funkcionalitātes un reÄ£istrēt to ar jaunu nosaukumu vai aizstāt sākotnējo moduli.

Piemēram, Ŕādi varat izveidot savu balss izvēlni:

......
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__); //ŠŸŠ¾Š“Š¼ŠµŠ½Šøть сущŠµŃŃ‚Š²ŃƒŃŽŃ‰ŠøŠ¹ Š¼Š¾Š“уŠ»ŃŒ

Pirmās sarežģītās ievieÅ”anas radÄ«ja pirmo lepnumu un pirmās vilÅ”anās. Priecājos, ka izdevās, ka jau varēju reproducēt galvenās iezÄ«mes Bezmaksas PBX. Man bija prieks, ka cilvēkiem patika shēmas ideja. Joprojām bija daudz iespēju vienkārÅ”ot izstrādi, taču pat tajā laikā daži uzdevumi jau tika atviegloti.

API PBX konfigurācijas maiņai sagādāja vilÅ”anos ā€“ rezultāts nepavisam nebija tāds, kādu vēlējāmies. Es izmantoju to paÅ”u principu kā Bezmaksas PBX, noklikŔķinot uz pogas Lietot, visa konfigurācija tiek izveidota no jauna un moduļi tiek restartēti.

Tas izskatās Ŕādi:

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php
*Dialplan ir noteikums (algoritms), pēc kura tiek apstrādāts zvans.

Bet ar Å”o opciju nav iespējams uzrakstÄ«t parastu API, lai mainÄ«tu PBX iestatÄ«jumus. Pirmkārt, izmaiņu piemēroÅ”anas darbÄ«ba ZvaigznÄ«te pārāk ilgi un resursietilpÄ«gi.
Otrkārt, jūs nevarat izsaukt divas funkcijas vienlaikus, jo abi izveidos konfigurāciju.
TreÅ”kārt, tas piemēro visus iestatÄ«jumus, tostarp tos, ko veicis administrators.

Å ajā versijā, tāpat kā Askozia, bija iespējams Ä£enerēt tikai mainÄ«to moduļu konfigurāciju un restartēt tikai nepiecieÅ”amos moduļus, taču tie visi ir pusmēri. Bija jāmaina pieeja.

Otrā versija. Deguns izvilkts aste iestrēdzis

Problēmas risināŔanas ideja nebija no jauna izveidot konfigurāciju un iezvanes plānu ZvaigznÄ«te, bet saglabājiet informāciju datu bāzē un lasiet no datu bāzes tieÅ”i, apstrādājot zvanu. ZvaigznÄ«te Es jau zināju, kā nolasÄ«t konfigurācijas no datu bāzes, vienkārÅ”i mainiet vērtÄ«bu datu bāzē un nākamais zvans tiks apstrādāts, ņemot vērā izmaiņas, un funkcija bija ideāli piemērota sastādÄ«Å”anas plāna parametru nolasÄ«Å”anai REALTIME_HASH.

Galu galā nebija vajadzības pat restartēt Zvaigznīte mainot iestatījumus, un visi iestatījumi tika nekavējoties piemēroti Zvaigznīte.

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

VienÄ«gās izmaiņas sastādÄ«Å”anas plānā ir paplaÅ”inājumu numuru pievienoÅ”ana un mājieni. Bet tās bija nelielas izmaiņas

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)
...

JÅ«s varat viegli pievienot vai mainÄ«t lÄ«niju sastādÄ«Å”anas plānā, izmantojot Ami (vadÄ«bas interfeiss ZvaigznÄ«te), un nav nepiecieÅ”ama visa numura sastādÄ«Å”anas plāna atsāknÄ“Å”ana.

Tas atrisināja problēmu ar konfigurācijas API. JÅ«s pat varētu tieÅ”i ieiet datu bāzē un pievienot jaunu grupu vai mainÄ«t, piemēram, grupas iezvanes laiku laukā ā€œdialtimeā€ un nākamais zvans jau ilgs norādÄ«to laiku (tas nav ieteikums darbÄ«bu, jo ir nepiecieÅ”amas dažas API darbÄ«bas Ami zvani).

Pirmās sarežģītās realizācijas atkal radÄ«ja pirmo lepnumu un vilÅ”anos. Priecājos, ka izdevās. Datubāze kļuva par kritisku saiti, pieauga atkarÄ«ba no diska, bija vairāk risku, bet viss darbojās stabili un bez problēmām. Un pats galvenais, tagad visu, ko varēja izdarÄ«t, izmantojot tÄ«mekļa saskarni, varēja izdarÄ«t, izmantojot API, un tika izmantotas tās paÅ”as metodes. Turklāt tÄ«mekļa saskarne atbrÄ«vojās no pogas ā€œLietot iestatÄ«jumus PBXā€, par ko administratori bieži aizmirsa.

VilÅ”anās bija tā, ka izstrāde kļuva sarežģītāka. KopÅ” pirmās versijas PHP valoda ir Ä£enerējusi iezvanes plānu Å”ajā valodā ZvaigznÄ«te un izskatās galÄ«gi nelasāms, plus pati valoda ZvaigznÄ«te sastādÄ«Å”anas plāna rakstÄ«Å”anai tas ir ārkārtÄ«gi primitÄ«vi.

Kā tas izskatījās:

$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'))

Otrajā versijā sastādÄ«Å”anas plāns kļuva universāls, tas ietvēra visas iespējamās apstrādes iespējas atkarÄ«bā no parametriem un tā izmērs ievērojami palielinājās. Tas viss ļoti bremzēja izstrādes laiku, un jau pati doma, ka kārtējo reizi jāiejaucas iezvanes plānā, mani sarÅ«gtināja.

TreŔā versija

Ideja atrisināt problēmu nebija Ä£enerēt ZvaigznÄ«te dialplan no php un izmantot FastAGI un rakstÄ«t visus apstrādes noteikumus paŔā PHP. FastAGI pieļauj ZvaigznÄ«te, lai apstrādātu zvanu, izveidojiet savienojumu ar kontaktligzdu. Saņemiet komandas no turienes un nosÅ«tiet rezultātus. Tādējādi sastādÄ«Å”anas plāna loÄ£ika jau ir ārpus robežām ZvaigznÄ«te un var rakstÄ«t jebkurā valodā, manā gadÄ«jumā PHP.

Bija daudz izmēģinājumu un kļūdu. Galvenā problēma bija tā, ka man jau bija daudz nodarbÄ«bu/failu. Objektu izveidoÅ”ana, inicializācija un cita cita reÄ£istrÄ“Å”ana aizņēma aptuveni 1,5 sekundes, un Å”o aizkavi vienam zvanam nevar ignorēt.

Inicializācijai vajadzēja notikt tikai vienu reizi un tāpēc risinājuma meklējumi sākās ar servisa rakstÄ«Å”anu php izmantojot Ppavedieni. Pēc nedēļas eksperimentÄ“Å”anas Ŕī opcija tika atcelta Ŕī paplaÅ”inājuma darbÄ«bas sarežģītÄ«bas dēļ. Pēc mēneÅ”a testÄ“Å”anas man arÄ« bija jāatsakās no asinhronās programmÄ“Å”anas PHP; man vajadzēja kaut ko vienkārÅ”u, pazÄ«stamu jebkuram PHP iesācējam, un daudzi PHP paplaÅ”inājumi ir sinhroni.

Risinājums bija mÅ«su paÅ”u daudzpavedienu pakalpojums C valodā, kas tika kompilēts ar PHPLIB. Tas ielādē visus ATS php failus, gaida, kamēr visi moduļi tiks inicializēti, pievieno viens otram atzvanÄ«Å”anu un, kad viss ir gatavs, saglabā to keÅ”atmiņā. Jautājot pa FastAGI tiek izveidota straume, tajā tiek reproducēta visu klaÅ”u un datu kopija no keÅ”atmiņas, un pieprasÄ«jums tiek nodots php funkcijai.

Izmantojot Å”o risinājumu, laiks no zvana nosÅ«tÄ«Å”anas uz mÅ«su dienestu lÄ«dz pirmajai komandai ZvaigznÄ«te samazinājies no 1,5 s uz 0,05 s, un Å”is laiks ir nedaudz atkarÄ«gs no projekta lieluma.

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

Tā rezultātā tika ievērojami samazināts zvanu plāna izstrādes laiks, un es to varu novērtēt, jo man bija jāpārraksta viss PHP moduļu iezvanes plāns. Pirmkārt, metodes jau ir jāraksta php, lai iegÅ«tu objektu no datu bāzes, tās bija vajadzÄ«gas attēloÅ”anai tÄ«mekļa saskarnē, un, otrkārt, un tas ir galvenais, beidzot ir iespējams ērti strādāt ar virknēm ar cipariem un masÄ«viem ar datu bāzi un daudziem PHP paplaÅ”inājumiem.

Lai apstrādātu iezvanes plānu moduļu klasē, jums ir jārealizē funkcija dialplanDynamicCall un arguments pbxCallRequest saturēs objektu, ar ko mijiedarboties Zvaigznīte.

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

Turklāt kļuva iespējams atkļūdot sastādÄ«Å”anas plānu (php ir xdebug, un tas darbojas mÅ«su pakalpojumā), jÅ«s varat pārvietoties soli pa solim, apskatot mainÄ«go vērtÄ«bas.

Zvanu dati

Jebkurai analÄ«zei un pārskatiem ir nepiecieÅ”ami pareizi savākti dati, un Å”im PBX blokam arÄ« tika veikts daudz izmēģinājumu un kļūdu, sākot no pirmās lÄ«dz treÅ”ajai versijai. Bieži vien zvanu dati ir zÄ«me. Viens zvans = viens ieraksts: kurÅ” zvanÄ«ja, kurÅ” atbildēja, cik ilgi runāja. Interesantākos variantos ir papildu zÄ«me, kas norāda, kurÅ” PBX darbinieks tika izsaukts zvana laikā. Bet tas viss sedz tikai daļu no vajadzÄ«bām.

Sākotnējās prasības bija:

  • saglabāt ne tikai to, kam PBX zvanÄ«ja, bet arÄ« to, kas atbildēja, jo notiek pārtverÅ”ana, un tas bÅ«s jāņem vērā, analizējot zvanus,
  • laiku pirms saziņas ar darbinieku. In Bezmaksas PBX un daži citi PBX, uz zvanu tiek uzskatÄ«ts atbildēts, tiklÄ«dz PBX paceļ klausuli. Bet balss izvēlnei jau ir jāpaceļ telefons, tāpēc uz visiem zvaniem tiek atbildēts un atbildes gaidÄ«Å”anas laiks kļūst 0-1 sekunde. Tāpēc tika nolemts ietaupÄ«t ne tikai laiku pirms atbildes, bet arÄ« laiku pirms savienojuma ar atslēgas moduļiem (pats modulis uzstāda Å”o karogu. Å obrÄ«d tas ir ā€œDarbinieksā€, ā€œÄ€rējā lÄ«nijaā€),
  • Sarežģītākam sastādÄ«Å”anas plānam, kad zvans ceļo starp dažādām grupām, bija jāspēj pārbaudÄ«t katru elementu atseviŔķi.

Labākais variants izrādījās, kad PBX moduļi zvana laikā nosūta informāciju par sevi un galu galā saglabā informāciju koka formā.

Tas izskatās Ŕādi:

Pirmkārt, vispārÄ«ga informācija par zvanu (kā visi pārējie - nekas Ä«paÅ”s).

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

  1. Saņemts zvans uz ārējo lÄ«niju"Par mÄ«klu"plkst.05:55:52 no numura 89295671458 uz numuru 89999999999, beigās atbildēja darbinieks"Sekretārs 2Ā» ar numuru 104. Klients gaidÄ«ja 60 sekundes un runāja 36 sekundes.
  2. Darbinieks"Sekretārs 2"zvana uz 112 un darbinieks atbild"VadÄ«tājs 1Ā» pēc 8 sekundēm. Viņi runā 14 sekundes.
  3. Klients tiek nodots Darbiniekam "vadītājs 1", kur viņi turpina runāt vēl 13 sekundes

Bet Ŕī ir aisberga redzamā daļa; katram ierakstam varat iegÅ«t detalizētu zvanu vēsturi, izmantojot PBX.

Stāsts par vienu projektu vai to, kā es pavadīju 7 gadus, veidojot PBX, pamatojoties uz Asterisk un Php

Visa informācija tiek parādīta kā zvanu ligzdas:

  1. Saņemts zvans uz ārējo lÄ«niju"Par mÄ«kluĀ» plkst.05:55:52 no numura 89295671458 uz numuru 89999999999.
  2. 05:55:53 ārējā lÄ«nija nosÅ«ta zvanu uz ienākoÅ”o ķēdi "pārbaudeĀ»
  3. Apstrādājot zvanu saskaņā ar shēmu, modulis ā€œmenedžera zvans", kurā zvans ir 16 sekundes. Å is ir klientam izstrādāts modulis.
  4. modulis "menedžera zvans" nosÅ«ta zvanu darbiniekam, kas ir atbildÄ«gs par numuru (klientu)"VadÄ«tājs 1ā€ un gaida 5 sekundes, lai saņemtu atbildi. VadÄ«tājs neatbildēja.
  5. modulis "menedžera zvans"nosÅ«ta zvanu grupai"CORP vadÄ«tāji" Tie ir citi tā paÅ”a virziena vadÄ«tāji (sēž vienā telpā) un gaida atbildi 11 sekundes.
  6. Grupa "CORP vadītāji"zvana darbiniekiem"Vadītājs 1, Vadītājs 2, Vadītājs 3"vienlaikus 11 sekundes. Nav atbildes.
  7. Pārvaldnieka zvans beidzas. Un ķēde nosÅ«ta zvanu uz moduli "MarÅ”ruta izvēle no 1c" ArÄ« klientam rakstÄ«ts modulis. Å eit zvans tika apstrādāts 0 sekundes.
  8. Ķēde nosÅ«ta zvanu uz balss izvēlni "Pamata ar papildu numuru sastādÄ«Å”anu" Klients tur gaidÄ«ja 31 sekundi, papildu sastādÄ«Å”anas nebija.
  9. Shēma nosūta zvanu grupai "Sekretāri", kur klients gaidīja 12 sekundes.
  10. Grupā vienlaikus tiek izsaukti 2 darbinieki "Sekretārs 1"Un"Sekretārs 2"un pēc 12 sekundēm darbinieks atbild"Sekretārs 2" Atbilde uz zvanu tiek dublēta vecāku zvanos. Izrādās, ka grupā viņŔ atbildēja "Sekretārs 2", zvanot ķēde atbildēja"Sekretārs 2" un atbildēja uz zvanu ārējā lÄ«nijā ar "Sekretārs 2'.

TieÅ”i informācijas saglabāŔana par katru darbÄ«bu un to ligzdoÅ”anu ļaus vienkārÅ”i veidot atskaites. Balss izvēlnes pārskats palÄ«dzēs noskaidrot, cik daudz tas palÄ«dz vai traucē. Izveidojiet atskaiti par darbinieku neatbildētajiem zvaniem, ņemot vērā, ka zvans tika pārtverts un lÄ«dz ar to netiek uzskatÄ«ts par neatbildētu, un ņemot vērā, ka tas bija grupas zvans un kāds cits atbildēja agrāk, kas nozÄ«mē, ka zvans arÄ« netika neatbildēts.

Šāda informācijas glabāŔana ļaus jums paņemt katru grupu atseviŔķi un noteikt, cik efektÄ«vi tā darbojas, un izveidot grafiku ar atbildētajām un neatbildētajām grupām pa stundām. Varat arÄ« pārbaudÄ«t, cik precÄ«zs ir savienojums ar atbildÄ«go pārvaldnieku, analizējot pārskaitÄ«jumus pēc savienojuma ar pārvaldnieku.

Var veikt arÄ« visai netipiskus pētÄ«jumus, piemēram, cik bieži numuri, kas nav datu bāzē, izsauc pareizo paplaÅ”inājumu vai cik procenti izejoÅ”o zvanu tiek pāradresēti uz mobilo tālruni.

Rezultāts?

PBX uzturÄ“Å”ana nav nepiecieÅ”ama speciālistam, to var izdarÄ«t visparastākais administrators ā€“ pārbaudÄ«ts praksē.

Modifikācijām nav nepiecieÅ”ami speciālisti ar nopietnu kvalifikāciju, pietiek ar PHP zināŔanām, jo Moduļi jau ir uzrakstÄ«ti gan SIP protokolam, gan rindai, gan darbinieka izsaukÅ”anai un citiem. Ir iesaiņojuma klase ZvaigznÄ«te. Lai izstrādātu moduli, programmētājs var (un labā nozÄ«mē vajadzētu) izsaukt gatavus moduļus. Un zināŔanas ZvaigznÄ«te ir pilnÄ«gi nevajadzÄ«gi, ja klients lÅ«dz pievienot lapu ar kādu jaunu pārskatu. Taču prakse rāda, ka, lai gan treÅ”o puÅ”u programmētāji var tikt galā, viņi jÅ«tas nedroÅ”i bez dokumentācijas un normāla komentāru atspoguļojuma, tāpēc vēl ir ko uzlabot.

Moduļi var:

  • izveidot jaunas zvanu apstrādes iespējas,
  • pievienot jaunus blokus tÄ«mekļa saskarnei,
  • mantot no jebkura no esoÅ”ajiem moduļiem, no jauna definēt funkcijas un aizstāt to vai vienkārÅ”i bÅ«t nedaudz pārveidota kopija,
  • pievienojiet savus iestatÄ«jumus citu moduļu iestatÄ«jumu veidnei un daudz ko citu.

PBX iestatÄ«jumi, izmantojot API. Kā aprakstÄ«ts iepriekÅ”, visi iestatÄ«jumi tiek saglabāti datu bāzē un nolasÄ«ti zvana laikā, lai jÅ«s varētu mainÄ«t visus PBX iestatÄ«jumus, izmantojot API. Izsaucot API, konfigurācija netiek izveidota no jauna un moduļi netiek restartēti, tāpēc nav svarÄ«gi, cik iestatÄ«jumu un darbinieku jums ir. API pieprasÄ«jumi tiek izpildÄ«ti ātri un viens otru nebloķē.

PBX saglabā visas galvenās darbÄ«bas ar zvaniem ar ilgumu (gaidÄ«Å”ana/saruna), ligzdoÅ”anu un PBX terminos (darbinieks, grupa, ārējā lÄ«nija, nevis kanāls, numurs). Tas ļauj izveidot dažādus pārskatus konkrētiem klientiem, un lielākā daļa darba ir lietotājam draudzÄ«ga interfeisa izveide.

Laiks rādÄ«s, kas notiks tālāk. Vēl ir daudzas nianses, kas jāpārtaisa, vēl ir daudz plānu, bet pagājis gads kopÅ” 3. versijas tapÅ”anas un jau tagad var teikt, ka ideja strādā. Galvenais 3. versijas trÅ«kums ir aparatÅ«ras resursi, taču parasti par to ir jāmaksā, lai atvieglotu attÄ«stÄ«bu.

Avots: www.habr.com

Pievieno komentāru