您的当前位置:首页正文

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实现事件监听

因篇幅问题不能全部显示,请点此查看更多更全内容