如何将Asterisk呼叫的呼叫持续时间插入到我自己的数据库中?

Kar*_*ous 2 asterisk

我有自己的数据库来记录astreisk中的调用.我需要将每个调用的呼叫持续时间插入表中.我怎样才能做到这一点?我可以在拨号方案中这样做吗?

mar*_*log 7

您没有提供有关您想要使用的db后端的更多信息,以及您是否询问如何自己编写呼叫持续时间或如何配置星号来编写有问题的cdr.

因此,一般来说,您有3种可能的选择(见下文).对于选项23,您必须自己打开与数据库的连接,编写插入/更新所需行所需的查询,处理错误等.对于选项1,您只需要配置星号来执行工作.

1)Asterisk可以通过将每次调用的CDR(呼叫详细记录)写入后端来默认执行此操作.这个后端可以通过cdr_odbc模块成为csv,mysql,pgsql,sqlite和其他数据库.您必须配置cdr.conf(并根据您选择的后端,cdr_mysql.conf,cdr_odbc.conf,cdr_pgsql.conf以及您的后端信息,如凭据,表名等).

CDR将默认写入一些内容,即CDR变量(取自预定义的星号变量列表)

如果通道有一个cdr,那个cdr记录有它自己的变量集,可以像通道变量一样访问它们.以下内置变量可用,除非另有说明,否则为只读变量.

在这一点上你感兴趣的是:

${CDR(duration)}     Duration of the call.
${CDR(billsec)}  Duration of the call once it was answered.
${CDR(disposition)}  ANSWERED, NO ANSWER, BUSY
Run Code Online (Sandbox Code Playgroud)

当处置是ANSWER时,billsec将包含计费的秒数(呼叫的总"回答时间"),持续时间将包含呼叫的总时间,包括非计费时间.

2)另一方面,如果你不是在询问cdr,而是想自己写一个呼叫持续时间,你可以有一个AGI脚本,在发出dial()之后,读取CDR(billsec)变量,或者所述ANSWEREDTIME(由设定拨号()命令):

${DIALEDTIME} * Time for the call (seconds)
${ANSWEREDTIME} * Time from dial to answer (seconds)
Run Code Online (Sandbox Code Playgroud)

3)您也可以通过具有实现同样的结果AMI客户端侦听该事件VarSet为变量ANSWEREDTIME.有问题的事件将包含已为其设置此变量的通道.

因此,如果您已经拥有自己的控制/处理调用的AGI脚本或AMI客户端,则选项2和3显然更有用,而选项1更通用但可能稍微不那么灵活.

希望能帮助到你!