php agi 中文 api,php AGI 学习

AGI(Asterisk 网关接口),也就是说 Asterisk 是支持各种扩展的应用网关。

AGI 脚本通过通信通道与Asterisk 通信,而不是通过API 方式来编程:

AGI 脚本通过STDIN 从Asterisk 获取信息。

AGI 脚本通过STDOUT 把输出信息写到Asterisk 中。

AGI 脚本可以通过STDERR 把调试信息送到Asterisk 控制台。

当一个AGI 脚本启动时,Asterisk 向AGI 脚本传送一系列变量及变量值,通过 fgets(STDIN,4096) 来获取

在 Dialplan 中这样调用 AGI 脚本 :

exten => 123,2,AGI(agi-test.agi)   agi-test.agi 为 AGI 脚本,一般放在/var/lib/asterisk/agi-bin

用 PHP 来写AGI脚本(参照未来之路)

if(!defined('STDIN')){

define('STDIN', fopen('php://stdin', 'r'));

}

if(!defined('STDOUT')){

define('STDOUT', fopen('php://stdout', 'w'));

}

if(!defined('STDERR')){

define('STDERR', fopen('php://stderr', 'w'));

}

//这段代码确保我们有打开的STDIN、STDOUT 和STDERR 文件句柄,

//这些句柄会处理Asterisk 和我们的脚本之间的所有通信。

while (!feof(STDIN)){

$temp = trim(fgets(STDIN,4096));

if (($temp == "") || ($temp == "\n")){

break;

}

$s = split(":",$temp);

$name = str_replace("agi_","",$s[0]);

$agi[$name] = trim($s[1]);

}

//接下来我们会读取Asterisk 传来的所有变量,

//在PHP 中用fgets 命令可以从STDIN 读取数据,

//我们会把每一个变量存入名为$agi 的哈希变量中。

?> 现在我用的是 Asterisk-1.6 版本,测试好像不行!

在网上看了下,有个 phpagi 的类,使用的是 socket 来与 Asterisk 通信:

fwrite($socket, "Action: login\r\nUserName: $username\r\nSecret: $secret\r\n\r\n");

while($c = fgets($socket, 4096))

{

echo $c ."\n";

}

fwrite($socket, "Action: Command\r\nCommand: database show SIP/Registry/801\r\n\r\n");

while($c = fgets($socket, 4096))

{

echo $c ."\n";

} 输出内容为:

0818b9ca8b590ca3270a3433284dd417.png

使用这种方法还得配置些东西,在 /etc/asterisk/manager.conf中设置相关的服务器信息:

[mark]                   ----连接时用到的 用户名

secret = phpami      ----密码

read = system,call,log,verbose,command,agent,user

write = system,call,log,verbose,command,agent,user

read 和 write 就是 AMI 所能用到的指令

记得要重启 Asterisk 。 其实后一种用的是 AMI (Asterisk manager API), 和 AGI 有很大区别的

Asterisk控制接口(Asterisk manager API)允许管理客户端程序连接到一个asterisk实例,并且可以通过TCP/IP(AMI通过TCP/IP协议连接到Asterisk 服务器的端口默认为5038)流发送命令或读取事件。相对于AGI ,AMI并没有将控制交给您的应用程序,但允许您查询和随时更改其状态。

AMI提供给用户的指令集合如下: system       -- 系统的一般信息。允许执行执行系统管理命令,如Shutdown, Restart, and Reload. call           -- 通道的信息。允许用户设置当前通道的一些信息. log            -- 日志信息(Read-only) verbose      -- 详细信息(Read-only.即指asterisk控制台上的信息) agent         -- agents和queues的信息。允许增加一个队列member到队列中. user           -- 允许用户发送和收取UserEvent. config         -- 允许用户读取和写配置文件. command    -- 允许发送可执行的控制台命令(Write-only.) dtmf           -- 接收DTMF事件,Read-only. reporting     -- 允许用户取得系统信息. cdr             -- cdr_manager的输出信息(if loaded. Read-only.) dialplan       -- 接收NewExten and VarSet events(Read-only.) originate      -- 允许产生一个新的call(Write-only.) 在asterisk控制台执行 manager show commands命令,即可查看AMI提供给用户的所有指令。 其中,Privilege即command所属的指令集合,当Privilege为None时,是指这些指令允许任何用户使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值