如何编写星号应用程序
How to write asterisk application
我是 freepbx 和 asterisk 的新手
我需要知道如何编写一个应用程序来检查每个出站呼叫以查看该分机是否具有权限。
例如,我有 2 个分机 100,200,每次其中一个分机尝试拨打外线电话时,我需要检查我的数据库以查看他是否拥有该权限,如果没有则阻止该呼叫
抱歉我的英文不太好
我假设您已经安装了 Asterisk 并且已经配置了 SIP soft phones 的基本设置。
您可能需要在 /etc/asterisk/extensions.conf
中添加以下内容
[internal]
exten => _XXXXXXXXXX,1,Answer()
same => n,Set(callerid=${CALLERID(num)})
same => n,Verbose(Your Callerid is ${callerid})
same => n,Saydigits(${callerid})
same => n,AGI(check_callerid.php,${callerid})
;same => n,Hangup()
[welcome]
exten => s,1,Playback(welcome)
same => n,Verbose(Allowed to call)
;same => n,Dial(SIP/trunkname/${EXTEN})
[good_bye]
exten => s,1,Playback(goodbye)
same => n,Verbose(Not Allowed to call)
same => n,Hangup()
之后重新加载 Asterisk:
asterisk -rvvvv
reload
下载 phpagi 库,运行 按照 Asterisk 控制台上的命令
cd /var/lib/asterisk/agi-bin
git clone https://github.com/welltime/phpagi
然后在 /var/lib/asterisk/agi-bin
创建 check_callerid.php
脚本并授予它完全权限。您可以复制下面的脚本,
#!/usr/bin/php
<?php
global $agi;
require 'phpagi/phpagi.php';
$agi = new AGI();
$agi->answer();
$callerid = $argv[1];
$agi->verbose("CallerID is: $callerid");
$check_in_db = checkDB($callerid); //check caller allowed to do call
if($check_in_db==1){$agi->exec("Goto","welcome,s,1");} //allowed to do call, go to dial plan
else{$agi->exec("Goto","good_bye,s,1");} //not allowed to do call, go to dial plan
function checkDB($callerid){
//check here callerid allowed to do call or not
return 1;
}
?>
现在尝试从您注册的软件 phone 中拨打任何 10 位号码,您的呼叫将到达您拨号计划中的 exten => _XXXXXXXXXX,1,Answer()
我是 freepbx 和 asterisk 的新手
我需要知道如何编写一个应用程序来检查每个出站呼叫以查看该分机是否具有权限。
例如,我有 2 个分机 100,200,每次其中一个分机尝试拨打外线电话时,我需要检查我的数据库以查看他是否拥有该权限,如果没有则阻止该呼叫
抱歉我的英文不太好
我假设您已经安装了 Asterisk 并且已经配置了 SIP soft phones 的基本设置。
您可能需要在 /etc/asterisk/extensions.conf
[internal]
exten => _XXXXXXXXXX,1,Answer()
same => n,Set(callerid=${CALLERID(num)})
same => n,Verbose(Your Callerid is ${callerid})
same => n,Saydigits(${callerid})
same => n,AGI(check_callerid.php,${callerid})
;same => n,Hangup()
[welcome]
exten => s,1,Playback(welcome)
same => n,Verbose(Allowed to call)
;same => n,Dial(SIP/trunkname/${EXTEN})
[good_bye]
exten => s,1,Playback(goodbye)
same => n,Verbose(Not Allowed to call)
same => n,Hangup()
之后重新加载 Asterisk:
asterisk -rvvvv
reload
下载 phpagi 库,运行 按照 Asterisk 控制台上的命令
cd /var/lib/asterisk/agi-bin
git clone https://github.com/welltime/phpagi
然后在 /var/lib/asterisk/agi-bin
创建 check_callerid.php
脚本并授予它完全权限。您可以复制下面的脚本,
#!/usr/bin/php
<?php
global $agi;
require 'phpagi/phpagi.php';
$agi = new AGI();
$agi->answer();
$callerid = $argv[1];
$agi->verbose("CallerID is: $callerid");
$check_in_db = checkDB($callerid); //check caller allowed to do call
if($check_in_db==1){$agi->exec("Goto","welcome,s,1");} //allowed to do call, go to dial plan
else{$agi->exec("Goto","good_bye,s,1");} //not allowed to do call, go to dial plan
function checkDB($callerid){
//check here callerid allowed to do call or not
return 1;
}
?>
现在尝试从您注册的软件 phone 中拨打任何 10 位号码,您的呼叫将到达您拨号计划中的 exten => _XXXXXXXXXX,1,Answer()