Asterisk-AMI
一)、asterisk AIM的简介
Asterisk控制接口(AMI)允许管理客户端程序连接到一个asterisk实例并且可以通过TCP/IP流发送命令或读取事件。这在试图跟踪 asterisk的状态或其中的电话客户端状态时很有用,AMI说明了客户端基于的一般(可能是动态的)规则。
(二)、AMI的应用
为了与Asterisk进行管理通话,管理客户端必须建立到Asterisk服务器侦听端口(一般是5038)的TCP/IP连接,并使用登陆动作 进行身 份验证。这就要求在Asterisk服务器上创建用户账户,用户账户在/etc/asterisk/manager.conf中配置。账户由允许登陆的主 机,登录密码以及被授予的权限列表组成。
(1)、添加AMI账户
1. [root@elastix admin]# vi /etc/asterisk/manager.conf
2. [general]
3. enabled = yes
4. port = 5038
5. bindaddr = 0.0.0.0
6. webenabled = no
7. [admin]
8. secret = 123456
9. deny = 0.0.0.0/0.0.0.0
10. permit = 61.61.134.121/255.255.255.0
11. permit = 127.0.0.1/255.255.255.0
12. read = system,call,log,verbose,command,agent,user
13. write = system,call,log,verbose,command,agent,user
在/etc/asterisk/manager.conf中配置了一个用户admin 密码为secret =123456
2)、使用AMI
1. 2. include_once(\"phpagi-asmanager.php\");
3. $asm = new AGI_AsteriskManager('phpagi-ami.conf');
4. $res = $asm->connect();
5. if( $res==TRUE ) {
6. echo \" AMI Connection established.\\n\"; //AMI连接成功
7. } else {
8. echo \"AMI Connection failed.\\n\"; //AMI连接失败
9. }
10. //这里相当于 在asterisk 中执行 sip show peers 命令
11. $result = $asm->Command(\"sip show peers\");
12. print_r($result); //输出执行该命令的结果
13. $asm->disconnect(); //断开连接
14. >
1. 1 phpagi-ami.conf 为连接AIM的配置文件 如下:
2. [asmanager]
3. server=127.0.0.1 ; server to connect to 服务器地址此处为本地服务器
4. port=5038 ; default manager port 默认端口
5. username=admin ; username for login 账号和/etc/asterisk/manager.conf 中配置的账号相同
6. secret=123456 ; password for login 密码 和/etc/asterisk/manager.conf 中配置的密码相同
(3)、AMI监听事件
以上为AMI执行命令的简单应用,下面介绍一下使用AMI来监听电话的摘挂机事件
1. #!/usr/bin/php
2. 3. include_once(\"phpagi-asmanager.php\");
4. /**
5. * 监听事件函数
6. */
7. function link_handler($e, $parameters, $server, $port)
8. {
9. /**
10. * asterisk1.6版本使用
11. 'Link')
* if('bridge' == $e && $parameters['Bridgestate'] ==
12. */
13. if('link' == $e)
14. {
15. echo $e;
16. print_r($parameters);
17. }
18. }
19. ');
$asm = new AGI_AsteriskManager(ROOT_PATH . 'phpagi-ami.conf
20. $res = $asm->connect();
21. if ( $res==TRUE )
22. {
23. echo \" AMI Connection established.\\n\";
24. } else {
25. echo \"AMI Connection failed.\\n\";
26. }
27. /*************************************************************
28. * $asm->add_event_handler('unlink', 'link_handler'); *
29. * $asm->add_event_handler('hangup', 'link_handler'); *
30. * $asm->add_event_handler('newchannel', 'link_handler'); *
31. * $asm->add_event_handler('newcallerid', 'link_handler'); *
32. * $asm->add_event_handler('newstate', 'link_handler'); *
33. * $asm->add_event_handler('newexten', 'link_handler'); *
34. *************************************************************/
35. /**
36. * asterisk1.6版本使用
37. * 可选:$asm->Events('call');
38. * $asm->add_event_handler('*', 'link_handler');
39. * 或
40. * $asm->add_event_handler('bridge', 'link_handler');
41. */
42. $asm->add_event_handler('link', 'link_handler'); //监听摘机事件
43. 件
#$asm->add_event_handler('hangup', 'link_handler'); //监听挂机事
44. while (1) { //持续监听 程序相当一个守护进程持续监听
45. $asm->wait_response();
46. }
47. $asm->disconnect();
48. ?>
以上代码为使用AMI实现事件监听
因篇幅问题不能全部显示,请点此查看更多更全内容