Certamente muitos de vocĂȘs, como eu, tiveram uma idĂ©ia de criar algo Ășnico. Neste artigo, descreverei os problemas e soluçÔes tĂ©cnicas que tiveram que ser encontrados no desenvolvimento de trocas telefĂŽnicas automĂĄticas. Talvez isso ajude alguĂ©m a decidir sua idĂ©ia e alguĂ©m a seguir o caminho batido, porque eu tambĂ©m usei a experiĂȘncia de pioneiros.

Idéia e requisitos principais
Asterisk (framework ), FreePBX ( Asterisk). FreePBX â . , , .
. Asterisk , -, . , . , , FreePBX. FreePBX php4, php5.6 .
. FreePBX, , - .
:
- , . ,
- , ,
- . FreePBX API , .. , , , API Asterisk,
- opensource â .
, . , . , FreePBX , . , . .
, â . , , , , . , - , « » , .
. , , , , -.

, , Asterisk.

, :
, :
......
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 .
:

* â (), .
API . -, Asterisk .
-, , .. .
-, .
, Askozia, , . .
.
Asterisk, . Asterisk , , REALTIME_HASH.
Asterisk Asterisk.

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

, , c php. -, php , -, -, â - php.
dialplanDynamicCall pbxCallRequest Asterisk.

( php xdebug ), .
. â . = : , , . , . .
:
- , , .. ,
- . FreePBX , , . , 0-1 . , ( . «», « »),
- , , .
, .
:
( â ).

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

:
- « » 05:55:52 89295671458 89999999999.
- 05:55:53 «test»
- « », 16 . .
- « » () «1» 5 . .
- « » « ». ( ) 11 .
- « » «1, 2, 3» 11 . .
- . « 1». . 0 .
- « ». 31 , .
- «», 12 .
- 2 «1» «2» 12 «2». . «2», «2» «2».
. , . , , , , - , .
, . , , .
, , , , .
?
, â .
php, .. sip , , . Asterisk. ( - ) . Asterisk , - . , , , .
:
API. , , API . API , , . API .
(/), (, , , , ). â .
O que acontecerĂĄ a seguir mostrarĂĄ a hora. HĂĄ muitas outras nuances que valem a pena refazer, hĂĄ muito mais planos, mas jĂĄ se passou um ano desde a criação da 3ÂȘ versĂŁo e jĂĄ se pode dizer que a ideia funciona. O principal ponto negativo da 3ÂȘ versĂŁo sĂŁo os recursos de hardware, mas para a conveniĂȘncia do desenvolvimento, geralmente Ă© sempre a maneira de pagar por isso.