【问题标题】:Collect Asterisk cdr records by http post通过 http post 收集 Asterisk cdr 记录
【发布时间】:2013-04-17 02:51:21
【问题描述】:

我正在使用 Asterisk 并想收集 cdr 记录。我搜索了一会儿,发现已经有模块可以用来将 cdr 记录收集到 CSV 文件或 MySQL 中。

我想知道是否已经有一个模块可以让我通过 http post 收集 cdr 记录。这样当一个呼叫完成时,Asterisk 会将 cdr 记录发布到一个预定义的 URL。

提前致谢。

【问题讨论】:

  • 有这样的模块,但由于没有人使用它被删除了。你可以请有 c/c++ 技能的人来做这样的模块,这很简单。

标签: http url voip asterisk cdr


【解决方案1】:

我不知道这样的模块,但你可以在挂断时执行应用程序。

你可以使用函数${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)}。

【讨论】:

  • 注意,默认情况下 curl 同时存在超过 10 个连接的问题。可在源文件中更改。
  • 看起来不错的解决方案,但我对扩展脚本了解不多。所以最后我通过mysql阅读了cdr的源代码,并自己制作了一个模块来完成任务。还是谢谢你。
【解决方案2】:

另一种选择是使用 CRON 作业每隔几分钟运行一次 Ruby 或 PHP 脚本,以提取和 HTTP POST 自上次运行脚本以来的所有 CDR。我已经为客户做了这件事,而且效果还不错。

也就是说,我发现如果我需要“脱离机器”访问 CDR,从长远来看,最简单的方法是设置 MySQL 复制;将 CDR 写入 PBX 机器,从报告机器上的复制副本中读取它们。开始时设置更加密集,但之后其他一切都会变得容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多