当前位置:首页 > --Asterisk - AGI程序编写指南 - 图文
图1AGI后台管理系统页面
2.使用绑定了主叫号码的X-Lite呼叫某个被叫(手机或者座机)
Asterisk的后台PHP AGI程序的详细设计主叫号码透传流程设计如图2所示。
图2Asterisk 主叫号码透传的后台PHP AGI流程图
?
代码实现
以下代码片断展示的是PHP AGI中部分代码,并且作了简化。
#!/usr/local/php.5.2.5/bin/php –q
include_once(\开源PHP类函数
......
//判断当前这个id是否做了主叫号码来电显示的绑定操作
$query_string = \ $query_result = mysql_query($query_string, $db_connection);
//如果当前这个id做了绑定操作,调用PHPAGI类函数,设置Asterisk主叫号码
if($query_result && mysql_num_rows($query_result) > 0) {
caller_phone_display_agi (); }
//没有做绑定,设置一个随机的号码 else
{
caller_name = $argv[2];
$rand_num1 = rand(0,9); $rand_num2 = rand(0,9); $rand_num3 = rand(0,9); $caller_phone=
land_media_gw1($caller_phone); exit(); } /**
*@caller_phone_display_agi 主叫号码特殊显示
\
*/
function caller_phone_display_agi() {
global $db_connection, $callee_phone, $caller_name;
$query_string = \skype_id = '{$caller_name}'\
$query_result = mysql_query($query_string, $db_connection); {
$row = mysql_fetch_array($query_result); $caller_phone = $row[0];
$callerid_cli = \land_media_gw1($callerid_cli); exit(); }
}
/**
*@ land_media_gw1 VoIP语音网关media_gw1 */
function land_media_gw1($callerid_num) {
global $agi, $callee_phone_withpre; $agi->set_context(\
$agi->set_extension($callee_phone_withpre); $agi->set_priority(1);
//调用phpagi封装的set_callerid方法,向Asterisk传递设置主叫号码的指令 $agi->set_callerid($callerid_num); }
对X-Lite账户gaolinb作了主叫号码绑定,使用X-Lite软终端呼叫普通的手机,在Asterisk中设置了agi debug,从Asterisk后台我们可以清晰地看到:
1.AGI Tx >> *CLI>上面部分,全是从Asterisk输入到当前AGI的环境变量信息,它包含了当前这个呼叫的详细信息,如Channel的类型,是SIP还是H.323,calleridname,即终端用户是gaolinb等重要信息。
2.AGI Tx >> *CLI>下面部分,全是在上面调用PHPAGI类函数后将命令传给了AGI程序执行,对于主叫号码来电显示的命令是:
SET CALLERID ?gaolinb‘<15810370728>,Asterisk将15810370728传到能够支持主叫号码透传的VoIP运营商,从而被叫用户在接听电话前能够显示一个有意义的电话号码。
共分享92篇相关文档