Asterisk 如何将星号呼叫的呼叫持续时间插入我自己的数据库?
我有自己的数据库来记录astreisk中的调用。我需要在表中插入每个呼叫的呼叫持续时间。我该怎么做?我可以在拨号计划中这样做吗 您没有提供太多关于希望使用哪种db后端的信息,也没有询问如何编写呼叫持续时间或如何配置asterisk来编写相关cdr 因此,一般来说,您有3种可能的选择(见下文)。对于选项2和3您必须自己打开到数据库的连接,编写插入/更新所需行、处理错误等所需的查询。而对于选项1您只需配置星号即可 1) Asterisk可以通过将每次呼叫的CDR(呼叫详细记录)写入后端,在默认情况下自行完成此操作。此后端可以通过模块连接、和其他数据库。您必须配置cdr.conf(并且根据您选择的后端,cdr\u mysql.conf,cdr\u odbc.conf,cdr\u pgsql.conf使用您的后端信息,如凭证、表名等) 默认情况下,CDR将写入一些内容,这些内容是CDR变量(取自) 如果通道有cdr,则该cdr记录有自己的一组 可以像通道变量一样访问的变量。这个 以下内置变量可用,除非另有规定, 只读 在这一点上,您感兴趣的是:Asterisk 如何将星号呼叫的呼叫持续时间插入我自己的数据库?,asterisk,Asterisk,我有自己的数据库来记录astreisk中的调用。我需要在表中插入每个呼叫的呼叫持续时间。我该怎么做?我可以在拨号计划中这样做吗 您没有提供太多关于希望使用哪种db后端的信息,也没有询问如何编写呼叫持续时间或如何配置asterisk来编写相关cdr 因此,一般来说,您有3种可能的选择(见下文)。对于选项2和3您必须自己打开到数据库的连接,编写插入/更新所需行、处理错误等所需的查询。而对于选项1您只需配置星号即可 1) Asterisk可以通过将每次呼叫的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)