当然,像我一样,你们中的许多人都有创造独特之处的想法。在本文中,我将介绍开发PBX时必须解决的技术问题和解决方案。也许这将有助于某人决定他们的想法,并帮助某人遵循既定原则,因为我也利用了先驱者的经验。

想法和关键要求
一切都始于对Asterisk(建筑通信应用程序的框架),电话自动化和FreePBX(Asterisk的 Web界面)安装的热爱。如果公司的需求微不足道并且适合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 .
(/), (, , , , ). – .
接下来将发生的事情将显示时间。还有很多细微之处值得重做,还有更多计划,但是自从创建第三个版本以来已经过去了一年,我们可以说这个想法行得通。第3版的主要缺点是硬件资源,但是为了开发方便,通常总是需要付费的方式。