CDR(Call Detail Record)是电话系统中用于记录电话通话详细信息的一种记录方式。在PHP代码中,我们可以通过调用Asterisk的AMI(Asterisk Manager Interface)接口来获取CDR信息。具体的步骤如下:
- 在Asterisk服务器上打开AMI接口,配置用户名和密码。配置文件一般位于/etc/asterisk/manager.conf,在文件中添加以下内容:
[php-ami] secret = mysecret deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.0 read = cdr write = cdr
上述配置中,php-ami是用户名,mysecret是密码。deny和permit用于限制AMI接口的访问权限,这里限制了本地IP地址可以访问。
2. 在PHP代码中使用AMI接口获取CDR信息。这里我们使用PHP的Asterisk Manager Library(https://github.com/phpari/ari-php)来调用AMI接口。首先需要安装ari-php库:
composer require phpari/ari
安装完成后,在代码中引入库文件:
require_once 'vendor/autoload.php';
然后,创建一个AMI连接对象,并使用AMI接口获取CDR信息:
// 创建AMI连接对象 $ari = new \phpari\Phpari(array( 'host' => 'localhost', 'port' => '5038', 'username' => 'php-ami', 'password' => 'mysecret', )); // 获取CDR信息 $cdr = $ari->channels()->cdr($channel_id);
上述代码中,$channel_id是通话的通道ID,可以通过其他方法获取。
3. 处理CDR信息。获取到CDR信息后,可以对其进行处理,例如存储到数据库、统计通话时长等。 需要注意的是,使用AMI接口获取CDR信息需要Asterisk服务器上开启CDR记录功能。在Asterisk配置文件中(一般为/etc/asterisk/cdr.conf),需要配置CDR记录的方式和存储路径。
例如,可以使用csv格式记录CDR信息:
[CSV] usegmtime=yes loguniqueid=yes loguserfield=yes accountlogs=yes logrotationinterval=86400 log3rdpartymessages=no
配置完成后,需要重启Asterisk服务使配置生效。
总之,使用AMI接口获取CDR信息需要Asterisk服务器上的一些配置和准备工作,需要对Asterisk服务器的基础知识有一定的了解。
评论