3

我在 C 中有一个遗留的 Asterisk 应用程序,它使用 MySQL 对用户进行身份验证、路由和计费。我将它保留在 Asterisk 1.4.21 中,因为在较新版本的 Asterisk 中没有返回任何 CDR 数据。

显然 1.4.22 https://issues.asterisk.org/jira/browse/ASTERISK-13064中发生了一些变化,完全改变了 CDR-s 的处理方式。不幸的是,没有提供有关如何正确迁移现有代码的有用信息。

他们更改了执行顺序,调用了“h”扩展名并重置了 CDR 数据。

我的代码:

ast_log(LOG_NOTICE,"拨号字符串:'%s'\n", dialstr);

app = pbx_findapp("拨号");
如果(应用程序)
        res = pbx_exec(chan, app, dialstr);

ast_log(LOG_NOTICE,"从 pbx_exec '%i'返回, 处置: '%s'\n", res, ast_cdr_disp2str(chan->cdr->disposition));

代码的其他部分处理 chan->cdr->billsec 等,但它总是给出 0 值。

成功调用后,我总是从 CLI 获取此日志:

从 pbx_exec '-1' 返回,处置:'NO ANSWER'
虽然相同的代码在 1.4.21 上运行良好

我听到的一种解决方案是在 Dial 之前使用 ast_reset() ,但我不确定如何实现它。有关如何调整此应用程序的任何帮助?

4

1 回答 1

2

您可以只获取 DIALSTATUS 变量,这对您的应用程序来说已经足够了,并且将在未来的版本中得到支持。

pbx_builtin_getvar_helper(chan, "DIALSTATUS");
于 2012-12-03T08:19:27.370 回答