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(请确保池运行用户可以阅读它!)
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事件填充
下载源码
通过命令行克隆项目:
git clone https://github.com/kf1day/asterisk-res-fastcgi.git