Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

Certe multi, sicut me, aliquid singulare cogitaverunt. In hoc articulo describam quaestiones technicas et solutiones quas mihi occurreret cum PBX evolvere. Forsitan hoc iuvabit aliquem de sua sententia decernere, et aliquem viam tritam sequi, quia etiam experientia auctorum profuit.

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

Idea et clavis opus

Et totum simpliciter incepit cum amore Asteriscus (Famework ad aedificationem communicationis applicationes), automation telephony et officinae freepbx * (Tela interface for Asteriscus). Si necessitates societatis erant sine specialibus rebus et intra facultates ceciderunt freepbx * β€” omnia magna sunt. Totam institutionem intra XXIV horas facta est, societas PBX figuram accepit, interface amica usoris et brevem institutionem plus auxilii ad libitum.

Sed maxime interesting opera non-vexillum erant et tunc non ita fabulosa. Asteriscus multum facere potest, sed ut interfacies interfaces in ordine faciendo operetur, necesse erat multoties plus temporis consumere. Tam parva res multo longiores sumi potuit quam reliquae PBX inaugurari. Atque illud non est longum tempus scribere interfaciei telas, sed punctum in notis architecturae. freepbx *. Architecture aditus ac modi freepbx * in tempore php4 positum est, et eo momento iam php5.6, XNUMX quo omnia faciliora et commodiora fieri possent.

Stramenta postrema erant dialplana graphica in forma schematis. Cum aliquid simile hoc facere conatus sum freepbx *Intellexi me signanter rescribere et facilius aliquid novi aedificare.

Praecipua clavis erant:

  • simplex paroeciale, intuitive etiam ad administratorem novitium pervium. Ita societates non indigent PBX sustentatione a nobis;
  • facilis immutatio, ut opera congruo tempore solvuntur;
  • otium integrationis cum PBX. U freepbx * ad mutandum occasus non erat API, i.e. Non potes, exempli gratia, coetus vel vocis menus creare ex applicatione tertii partis, solum ipsum API Asteriscus,
  • opensource - programmatoribus hoc maximi momenti est pro modificationibus clientis.

Idea velocioris progressionis erat, ut omnes functiones modulorum in forma objectorum consisterent. Omnes res communes habere debebant genus parentis, quod significat nomina omnium principalium functionum iam nota sunt et ideo iam ad effectum deducendi sunt. Objecta sinet ut dramatically reducere numerum argumentorum in modum vestium consociationum cum clavibus chordis, quas inspicere potes. freepbx * Potuit examinando functiones integras et functiones nestras. In rebus obiectis, vulgare autocompletionem omnes proprietates ostendet, et in generali vitam pluries simpliciorem reddet. Plus, hereditas et redemptio iam multas difficultates cum modificationibus solvuntur.

Proxima res, quae temporis pigritiam retardavit et evitandi valuit, duplicatio fuit. Si modulus auctor est pro dialing operarius, omnes alii moduli qui vocationi ad operarium mittere debent eo utantur, nec exemplaria sua efficiant. Si igitur aliquid mutare debes, in uno tantum loco mutare debebis et inquisitionem " quomodo operatur" in uno loco peragatur, nec per totum consilium investigetur.

Prima versio et prima errorum

Primum exemplar intra annum paratum erat. Tota PBX, ut destinatum, modularis erat, et moduli non solum novas functiones ad vocationes expediendas addere potuerunt, sed etiam interfaciem ipsam interretialem mutare.

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php
Ita, idea aedificandi dialplanum in tali schematis forma non est mea, sed percommodum est et idem feci; Asteriscus.

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

Moduli scribendo, programmatores iam poterant;

  • munus tuum crea ad processui vocationis, quae in schemate collocari poterat, tum in menu elementorum a sinistris;
  • paginas tuas interfaciei creare et exempla tua ad paginas exsistentes adde (si pagina elit huic provisum est)
  • add your settings to the main occasus tab or create your own settings tab;
  • programmator potest ab exsistente modulo possidere, partem functionis mutare et sub novo nomine eam subdere vel moduli primigenii reponere.

Exempli gratia, hoc modo tuam vocem menu creare potes;

......
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__); //ΠŸΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Prima multiplex actio primam superbiam et primam deceptionem attulit. Laetatus sum operatum esse, me iam pelagus lineamenta referre posse freepbx *. Laetatus sum quod homines illius rationem schematis probaverunt. Multae optiones ad simpliciorem progressionem adhuc erant, sed etiam tunc temporis quaedam officia faciliora iam fiebant.

API mutandae configurationis PBX erat destitutionis - eventus omnino non erat quod vellemus. Accepi idem principium quod in freepbx *strepitando bullam Applicare, tota configuratione recreatur ac modulorum modorum reprimitur.

Hoc sic videtur:

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php
*Dialplanum est regula (algorithmus) qua vocatio discursum est.

Sed hac optione, impossibile est normalem API scribere ad mutandas PBX occasus. Primo, operatio applicandi mutationes Asteriscus nimium diu et ingeniose intensive.
Secundo, non potes dicere duo munera simul, quia utraque figuram creabit.
Tertio applicat omnes ordinationes, etiam eas quae ab administratore factae sunt.

In hac versione, ut in Askozialicuit generare configurationem mutatorum tantum modulorum ac sileo solum necessariorum modulorum, at hi omnes mensurae dimidiatae sunt. Ac- cedere necesse erat.

Secunda versio. Nasus extraxerunt cauda adhæsit

Idea problema solvendi non erat configurationem et dialplanum recreare Asteriscussed informationes datorum salvum fac et e lege datorum directe in vocatione dispensando. Asteriscus Iam scivi quomodo figurationes ex datorum legere, modo valorem mutare in datorum et sequentium vocationis ratione muta- tionum procedendum erit, et munus perfectum ad parametris dialplan legendi. REALTIME_HASH.

In fine, nihil opus erat ut vel sileo Asteriscus mutato occasus et omnes ordines statim applicari coeperunt Asteriscus.

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

Solae mutationes in dialplano additae sunt extensionis numerorum et innuit. Sed hae erant parvae maculae mutationes

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

Facile addere vel mutare lineam potes in dialplan utens Ammi (Imperium interface Asteriscus) et nulla reboot totius dialplani requiritur.

Hoc problema cum configuratione API solvitur. Etiam directe in datorum ire potes et novam catervam vel mutationem addere, exempli gratia, tempus horologii in campo "dialtime" pro caterva et sequenti vocatione iam definitum tempus duraturas (Hoc non est commendatio pro actio, quia operationes aliquae API requirunt Ammi vocat).

Prima opera difficilia rursus prima superbia et deceptione intulit. Laetatus sum quod functus sum. Datorum nexus criticus factus est, dependentia orbis aucta, pericula erant, sed omnia stabiliter et sine problematibus operabantur. Maximeque nunc omnia, quae per interfaciem interreti fieri poterant, per API fieri possunt, et isdem modis adhibebantur. Praeterea interfacius interfaciendi telam "adplicare occasus ad PBX" removit, cuius administratores saepe oblitus est.

Deceptio fuit quod progressio in magis implicata facta est. Cum prima versio, lingua PHP dialplan in lingua generavit Asteriscus et omnino unreadable spectat, plus ipsa lingua Asteriscus ad scribendum dialplanum perquam primitivum est.

Quid visi;

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

In secunda versione, dialplanum universale factus est, omnes optiones processus possibilis comprehendit secundum parametris et magnitudine sua signanter augebat. Haec omnia progressionem temporis valde retardaverunt, et cogitatio ipsa iterum me contristavit quod necesse fuit impedire dialplan.

Tertium poema

Ideam solvendi quaestionem non generare Asteriscus dialplan ex php et usu FastAGI et scribe omnes regulas processus in ipsa PHP. FastAGI Non concedit Asteriscusad processum vocationis connectere nervum. Accipe inde mandata et mittat eventus. Ita dialectica dialplani iam extra fines est Asteriscus et qualibet lingua scribi potest, in casu meo in PHP.

Multum erat iudicii et erroris. Praecipua quaestio erat quod iam multum classes/files. Accepit circiter 1,5 seconds ut res crearent, initializent eas, et se mutuo inter se profiterentur, et haec mora per vocationem non est aliquid quod negligi possit.

Initialization semel tantum accidisse debuit ideoque solutionem inquisitionis incepit cum scribendo servitium in php utendo Pthreads. Post hebdomadem experimentorum haec optio ob subtilitatem huius extensionis opera diducta est. Post mensem tentationis, etiam programmationem asynchronam in PHP deserere habui, opus simplex, cuivis PHP incipienti familiare, et multae extensiones pro PHP synchronae sunt.

Solutio fuit nostra multi- plicandi servitii in C, quod est exaratum PHPLIB. Omnes ATS php lima onerat, omnes modulos ad initializem expectat, callbackum inter se addit, et, cum omnia parata sunt, emittit. Cum quaereret FastAGI rivus creatur, exemplum e thesauro omnium generum et notitiarum in eo expressum est, et petitio ad munus php transmittitur.

Hac solutione, tempus est ut vocatio ad servitium nostrum primum mandatum Asteriscus decrevit ab 1,5s ad 0,05s et hoc tempus leviter pendet in magnitudine rei.

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

Quam ob rem tempus evolutionis dialplani signanter imminutum est, et hoc cognoscere possum cum totum dialplanum omnium modulorum in PHP rescribere debebam. Uno modo, methodi iam scribendae sunt in php ad obtinendum res a datorum, quae ad ostentationem in interreti interreti sunt, et secundo, quod maxime est, tandem commode fieri potest ut cum chordis numeris et vestimentis operetur. cum database plus plures PHP extensiones.

Ad processum dialplan in genere moduli opus est ad munus efficiendum dialplanDynamicCall et argumentum pbxCallRequest objectum continent penitus Asteriscus.

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

Praeterea fieri potest, ut dialplanum debug (php habet xdebug et ad nostrum ministerium operatur), gradatim movere potes per bona variabilium intuenda.

Vocatio data

Quaelibet analytica et relationes recte collectas notitias requirunt, et hic PBX scandalum multum pervadit iudicii et erroris a prima ad tertiam versionem. Saepe signum data vocatio est. One recording = one recording : qui vocabant, qui responderunt, quousque loquebantur. In optionibus magis interesting, additur signum significans quod PBX operarius vocatus est in vocatione. Sed id omnis nisi necessitatibus.

Praecepta initiales erant;

  • nisi qui PBX vocavit, sed etiam qui respondit, quia interceptiones sunt, et haec ratio habenda est cum examinatio vocat;
  • tempus ante connectens cum molestie. In freepbx * et alia quaedam PBXs, quae vocatio consideratur respondit statim cum PBX telephonum gestat. Sed pro voce menu iam necesse est telephonum capere, ita omnes vocati respondent et exspectatio temporis responsionis fit secunda 0-1. Ideo placuit non solum tempus ante responsionem servare, sed tempus antequam cum modulis clavis coniungendis (modulus ipse hoc vexillum ponit. In statu est "Aliquam", "linea externa");
  • ob complexiorem dialplanum, cum vocatio peregrinationis inter diversos coetus, necesse erat ut singula singula separatim examinare possent.

Optima optima evasit, cum PBX modulorum informationes de se in vocationum mitteret et tandem notitias in specie arboris servabit.

Is vultus amo is:

Primum, generalis notitia de vocatione (sicut ceteri - nihil speciale).

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

  1. Vocationem accepit extra lineam "quia civitas a commistione fermenti"at 05:55:52 ex numero 89295671458 ad numerum 89999999999, tandem responsum ab operario".Secretarius 2Β» Cum numero 104. Cliens expectavit LX secundis et locutus est pro 60 secundis.
  2. Aliquam "Secretarius 2"CXII facit vocatio ad responsa et operarius"Manager1Β» Post VIII secundis. Loquuntur ad XIV seconds.
  3. Client ad Employee transfertur "manager1"Ubi continue loquitur pro alio XIII seconds"

Sed hoc extremum est iceberg, nam singulas res gestas per PBX possis accipere.

Fabulam unius consilii vel quomodo exegi VII annos creando PBX fundatur in Asterisco et Php

Omnes notitiae praesentatae sunt ut advocationum aerarii;

  1. Vocationem accepit extra lineam "quia civitas a commistione fermentiΒ» at 05:55:52 a numero 89295671458 ad numerum 89999999999.
  2. In 05:55:53 extra lineam vocatum mittit ad Circulum Reditus "TestΒ»
  3. Cum vocationis dispensando secundum schema, modulus "procurator vocationis"In qua vocatio est XVI secundis. Hic modulus est clienti elaboratus.
  4. OMNIBUS "procurator vocationis"Mit officium molestie numerus reus (clientis)"Manager1"V seconds pro responso et observat. Praepositus non responde.
  5. OMNIBUS "procurator vocationis"Vocatio ad coetus mittit"PHARMACEUTICALS INC" Hi sunt alii administratores eiusdem directionis (in eodem cubiculo sedentes) et 11 secundis pro responsione exspectantes.
  6. Circulus "PHARMACEUTICALS INC"Vocat conductos"Manager1, Manager2, Manager3"Eodem XI seconds. Nihil respondes.
  7. Praepositus vocat terminos. Vocatio et circuitus ad modulum mittit β€ž.Discriptis iter a 1c *" Item moduli scripsi pro reum. Hic vocatio pro 0 secundis processit.
  8. Circuitus emittit appellationem ad vocem menuΒ».Basic cum additional dialing" Cliens ibi morabatur 31 seconds, dialing additus non fuit.
  9. Consilium vocatio ad Group mittit "Secretarii", ubi expectavit clientis XII secundis.
  10. In circulo, 2 operarii simul vocantur "Secretarius 1"Et"Secretarius 2"Et post XII seconds ad molestie responsa"Secretarius 2" Responsio ad vocationi geminata in parentem vocat. Evenit ut in coetu respondit "Secretarius 2", cum vocatum ambitum respondisset "Secretarius 2"Et respondit vocationem extra lineam cum"Secretarius 2".

Salutatio est notitiarum de unaquaque operatione et earum nidificatione, quae possibilitatem reddent nuntiationibus faciendis. Renuntiatio in voce menu proderit invenire quantum iuvat vel impediat. Renuntiationem de vocationibus ab operariis desiderari, attenta vocatione interclusa et ideo non falli existimata est, et attentis vocatus coetus erat, et alius antea respondit, quod significat vocationem etiam non desiderari.

Tales informationes repositas licebit tibi singulas coetus separatim sumere ac determinare quam efficaciter operetur, et graphio responsorum aedificabis et per horas desiderabas. Potes etiam inspicere quam accurate nexum procuratori responsali sit examinando translationes post iunctis curatori.

Etiam studia atypica satis gerere potes, exempli gratia, quotiens numeros qui non sunt in database horologio rectam extensionem vel quod recipis emissionem vocationis ad telephonum mobile transmittantur.

Quod effectus?

Specialista ad PBX ponere non requiritur, administrator ordinarius id facere potest, in praxi probatus.

Ad modificationes, periti cum gravibus industria non requiruntur: cognitio PHP sufficit, quia Moduli iam scripta sunt pro HAUSTUS protocollo, et pro queue, et pro operario vocandi, et alii. Est fascia genus for Asteriscus. Ad modulum explicandum, programmator (et modo bene) promptos modulos vocare potest. et scientia Asteriscus omnino supervacaneum esse, si cliens paginam cum aliqua nova fama addere rogat. Sed praxis ostendit, quamvis programmatores tertiae factionis obire possint, securam se sentire sine documentis et incommodis normalibus incommodis, adhuc emendationis locus est.

Integer consequat,

  • creo vocationis processui facultates;
  • novas caudices interfaciei interreti adde;
  • ab aliquo modulorum exsistentium possidebit, functiones redintegras et repone, vel exemplum modice mutatum erit;
  • Adde uncinos tuos ad uncinos templates aliorum modulorum et multo amplius.

PBX occasus via API. Ut supra, omnes occasus in datorum repositae sunt et in tempore vocationis legebantur, sic omnes PBX occasus per API mutare potes. Cum API vocant, conformatio non recreatur et moduli non reprimuntur, ergo non refert quot occasus et conductos habeas. API celeriter petitiones exsecutioni se mutuo non impediunt.

PBX omnes operationes keys cum vocationibus cum durationibus (exspectantibus/conversationibus), nidificans et in terminis PBX reponit (employee, coetus, lineae externae, non canalis, numerus). Hoc permittit ut varias condere relationes pro clientibus certis ac maxime operis usoris amicabilem interfaciem creare sit.

Tempus narrabit quid deinde futurum sit. Sunt adhuc multae nuances quae redone opus sunt, multa adhuc consilia sunt, sed annus transiit a creatione tertiae versionis et iam dicere possumus ideam operari. Praecipuum incommodum versionis 3 est subsidiorum ferramentorum, sed hoc fere est quod tibi pro facilitate evolutionis solvendum est.

Source: www.habr.com