L'histoire d'un projet ou comment j'ai créé un PBX de 7 ans basé sur Asterisk et Php

Beaucoup d'entre vous, comme moi, ont sûrement eu l'idée de créer quelque chose d'unique. Dans cet article, je décrirai les problèmes techniques et les solutions qui ont dû être rencontrés dans le développement des centraux téléphoniques automatiques. Peut-être que cela aidera quelqu'un à décider de son idée et quelqu'un à suivre les sentiers battus, car j'ai également utilisé l'expérience des pionniers.


image


Idée et exigences clés


Asterisk (framework ), FreePBX ( Asterisk). FreePBX – . , , .


. Asterisk , -, . , . , , FreePBX. FreePBX php4, php5.6  .


. FreePBX, , - .


:


  • , . ,
  • , ,
  • . FreePBX API , .. , , , API Asterisk,
  • opensource – .

, . , . , FreePBX , . , . .


, — . , , , , . , - , « » , .



. , , , , -.


image
, , Asterisk.


image


, :


  • , , ,
  • - ( ),
  • ,
  • , .

, :


......
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__); //  

. , , FreePBX. , . , .


API — , . , FreePBX, Apply .


:


image
* — (), .


API . -, Asterisk .
-, , .. .
-, .


, Askozia, , . .


.


Asterisk, . Asterisk , , REALTIME_HASH.


Asterisk Asterisk.


image


hints.


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

Ami ( Asterisk) .


API . , , “dialtime” ( , .. API Ami ).


. , . , , , . , -, API . , - « », .


. php Asterisk , Asterisk .


:


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

, . , .



Asterisk php, FastAGI php. FastAGI Asterisk, , . . Asterisk , php.


. , /. , 1,5 , , .


1 php Pthreads. - . php , - , php, php .


‘’, PHPLIB. php , , , – . FastAGI , php .


Asterisk 1,5 0,05 .


image


, , c php. -, php , -, -, – - php.


dialplanDynamicCall pbxCallRequest Asterisk.


image


( php xdebug ), .



. – . = : , , . , . .


:


  • , , .. ,
  • . FreePBX , , . , 0-1 . , ( . «», « »),
  • , , .

, .


:


( — ).


image


  1. « » 05:55:52 89295671458 89999999999, «2» 104. 60 36 .
  2. «2» 112 «1» 8 . 14 .
  3. «1» 13

, .


image


:


  1. « » 05:55:52 89295671458 89999999999.
  2. 05:55:53 «test»
  3. « », 16 . .
  4. « » () «1» 5 . .
  5. « » « ». ( ) 11 .
  6. « » «1, 2, 3» 11 . .
  7. . « 1». . 0 .
  8. « ». 31 , .
  9. «», 12 .
  10. 2 «1» «2» 12 «2». . «2», «2» «2».

. , . , , , , - , .


, . , , .


, , , , .


?


, – .


php, .. sip , , . Asterisk. ( - ) . Asterisk , - . , , , .


:


  • ,
  • -,
  • , ,
  • .

API. , , API . API , , . API .


(/), (, , , , ). – .


Ce qui se passera ensuite montrera le temps. Il y a beaucoup plus de nuances qui méritent d'être refaites, il y a beaucoup plus de plans, mais une année s'est déjà écoulée depuis la création de la 3ème version et on peut déjà dire que l'idée fonctionne. Le principal inconvénient de la 3e version est les ressources matérielles, mais pour la commodité du développement, c'est généralement toujours de cette façon que vous devez payer.


All Articles