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

Asterisk 如何将星号呼叫的呼叫持续时间插入我自己的数据库?,asterisk,Asterisk,我有自己的数据库来记录astreisk中的调用。我需要在表中插入每个呼叫的呼叫持续时间。我该怎么做?我可以在拨号计划中这样做吗 您没有提供太多关于希望使用哪种db后端的信息,也没有询问如何编写呼叫持续时间或如何配置asterisk来编写相关cdr 因此,一般来说,您有3种可能的选择(见下文)。对于选项2和3您必须自己打开到数据库的连接,编写插入/更新所需行、处理错误等所需的查询。而对于选项1您只需配置星号即可 1) Asterisk可以通过将每次呼叫的CDR(呼叫详细记录)写入后端,在默认情况下

我有自己的数据库来记录astreisk中的调用。我需要在表中插入每个呼叫的呼叫持续时间。我该怎么做?我可以在拨号计划中这样做吗

您没有提供太多关于希望使用哪种db后端的信息,也没有询问如何编写呼叫持续时间或如何配置asterisk来编写相关cdr

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

1) Asterisk可以通过将每次呼叫的CDR(呼叫详细记录)写入后端,在默认情况下自行完成此操作。此后端可以通过模块连接、和其他数据库。您必须配置cdr.conf(并且根据您选择的后端,cdr\u mysql.confcdr\u odbc.confcdr\u 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
当disposition为ANSWER时,billsec将包含计费的秒数(呼叫的总“应答时间”),duration将包含呼叫的总时间,包括未计费时间

2) 另一方面,如果您不是在询问cdr,而是想为自己编写通话持续时间,您可以使用一个脚本,在发出a后读取cdr(billsec)变量或ANSWEREDTIME(由命令设置):

3) 您还可以通过让客户端监听变量ANSWEREDTIME的事件VarSet来获得相同的结果。有问题的事件将包含为其设置此变量的通道

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


希望有帮助

很抱歉,我没有提供足够的信息。选项2和3是我所需要的。但我有一个问题:是否可以在拨号计划中访问应答时间?@Karadous肯定。请参阅:。所以只需使用${ANSWEREDTIME}和(可能)使用dial命令的选项g即可。回答得很好。为了完整起见,对于选项(1),您可能希望提及cdr_adaptive_odbc而不是cdr_odbc,后者对于用户定义的数据更灵活。@marcelog,但是如何获取B-leg的呼叫持续时间(来自Dialplan的出站呼叫)?
${DIALEDTIME} * Time for the call (seconds)
${ANSWEREDTIME} * Time from dial to answer (seconds)