我正在使用 Asterisk 并想收集 cdr 记录。我搜索了一会儿,发现已经有模块可以用来将 cdr 记录收集到 CSV 文件或 MySQL 中。
我想知道是否已经有一个模块可以让我通过 http post 收集 cdr 记录。这样当调用结束时,Asterisk 会将 cdr 记录发布到预定义的 URL。
提前致谢。
我不知道这样的模块,但你可以在挂断时执行一个应用程序。
您可以使用该功能${CURL(url[,post-data])}
:
exten => h,n,Set(result=${CURL(http://SERVER/cdr.php?\
cdranswer=${CDR(answer)}&exten=${EXTEN}&cidnum=${CALLERID(num)})})
exten => h,n,Noop(${result})
另一种方法是在挂断时执行脚本:
exten => h,n,System('php -f /opt/scripts/cdr.php \
${CallerID(num)} ${EXTEN} "${CDR(answer)}" ${EPOCH}');
也许你也可以使用 ${CDR(billsec)}。
另一种选择是使用 CRON 作业每隔几分钟运行一次 Ruby 或 PHP 脚本,以提取和 HTTP POST 自上次运行脚本以来的所有 CDR。我已经为客户做了这件事,而且效果还不错。
也就是说,我发现如果我需要让 CDR 可以“脱离机器”访问,那么从长远来看,最简单的方法是设置 MySQL 复制。将 CDR 写入 PBX 机器,从报告机器上的复制副本中读取它们。一开始它的设置更加密集,但以后一切都会变得容易得多。