asterisk res fastcgi

其他类别 2025-07-29

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