res_fastcgi
Asterisk的FastCGI活动提供商
一个直接向FastCGI服务器(例如PHP-FPM)提供AMI消息的小模块。以自定义方式处理事件可能很有用
比较
在星号上测试13.13、16.4和18.4
汇编
通常无聊的顺序:
./configure && make && make install
数据传输
模块通过环境变量将数据发送到脚本,并且不关心数据收到的内容。
这是单个脚本拍摄的示例数据:
$ _SERVER = Array ( \' USER \' => \' asterisk \' , \' HOME \' => \' /var/lib/asterisk \' , \' RemoteAddress \' => \' IPV4/UDP/1.2.3.4/60243 \' , \' LocalAddress \' => \' IPV4/UDP/5.6.7.8/5060 \' , \' SessionID \' => \' 485334176-1794503427-955328712 \' , \' AccountID \' => 1234 , \' EventVersion \' => 1 , \' Service \' => \' PJSIP \' , \' Severity \' => \' Error \' , \' EventTV \' => \' 2020-01-01T01:02:04.735+0000 \' , \' Privilege \' => \' security,all \' , \' Event \' => \' InvalidAccountID \' , \' REQUEST_METHOD \' => \' GET \' , \' SCRIPT_FILENAME \' => \' /var/lib/asterisk/manager.php \' , \' FCGI_ROLE \' => \' RESPONDER \' , \' PHP_SELF \' => \'\' , \' REQUEST_TIME_FLOAT \' => 1600001234.7358 , \' REQUEST_TIME \' => 1600001234 );
带有php-fpm的样品配置
确保Asterisk的运行用户可以编写收听套接字。好/etc/php/7.0/fpm/pool.d/是通过在您的fpm pool配置目录中创建文件(例如ast.conf )来创建一个单独的PHP-FPM进程池(例如
[ast] user = nobody group = nogroup listen = /var/run/asterisk/php-fpm.sock listen.owner = asterisk listen.group = asterisk pm = static pm.max_children = 2
然后重新启动服务systemctl restart php-fpm
现在在/etc/asterisk/res_fastcgi.conf中配置模块定义
[global] socket = /var/run/asterisk/php-fpm.sock script = /var/lib/asterisk/manager.php
选项是:
- 套接字-FastCGI服务器的Unix域套接字路径,默认值为
/var/run/asterisk/php-fpm.sock - 脚本– fastcgi处理器的脚本名称,默认为
/var/lib/asterisk/manager.php
现在,我们在处理脚本中添加了一些buisness-Logic(请确保池运行用户可以阅读它!)
<?php if ( ! in_array ( $ _SERVER [ \' Event \' ], [ \' ChallengeSent \' , \' SuccessfulAuth \' , \' RTCPSent \' , \' RTCPReceived \' ] ) ) { file_put_contents ( \' /tmp/debug.out \' , print_r ( $ _SERVER , 1 ), FILE_APPEND ); }
最后,通过星号控制台加载模块asterisk -x "module load res_fastcgi"
现在我们可以看到文件/tmp/debug.out ami事件填充
