php代码如何调用cdr功能

胜哥 PHP代码

CDR(Call Detail Record)是电话系统中用于记录电话通话详细信息的一种记录方式。在PHP代码中,我们可以通过调用Asterisk的AMI(Asterisk Manager Interface)接口来获取CDR信息。具体的步骤如下:

  1. 在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服务器的基础知识有一定的了解。