星号从停车场取出后无法记录通话

时间:2014-02-05 12:07:01

标签: asterisk

我正在使用asterisk / freepbx。 Asterisk不记录从公园提取的呼叫。这是我的通话流程。

对Asterisk服务器(AS)的调用 呼叫由分机B接听 B通过拨打* 2200进行转机转接(200是我的默认停车场) C拨1以获取暂留的呼叫 C拨打* 1录制通话。

未完成录制。

1 个答案:

答案 0 :(得分:0)

我找到了修复,它对我有用。在星号日志中,我发现星号试图记录到没有文件名的无效文件,只是一个扩展名(.wav)。它执行了2个文件 - /var/lib/asterisk/agi-bin/parkfetch.agi和/var/lib/asterisk/bin/one_touch_record.php。

one_touch_record.php从通道读取的数据生成文件名,如年份,日期,mixmonitor文件夹等,但由于日志中没有有效的文件名,因此这些文件应为null。

$mixMonDir = getVariable($channel, "MIXMON_DIR");
$year = getVariable($channel, "YEAR");
$month = getVariable($channel, "MONTH");
$day = getVariable($channel, "DAY");
$mixMonFormat = getVariable($channel, "MIXMON_FORMAT");
$mixMonPost = getVariable($channel, "MIXMON_POST");
$astman->mixmonitor($channel, "{$mixMonDir}{$year}/{$month}/{$day}/{$callFileName}.{$mixMonFormat}", "a", $mixMonPost, rand());

所以我检查了parkfetch.agi,我发现只有当REC_STATUS为“RECORDING”时才复制这些频道变量,在这种情况下REC_STATUS是“INITIALIZED”。所以我添加了一个OR子句,即我将if($ rec_status ==“RECORDING”)更改为if($ rec_status ==“RECORDING”|| $ rec_status ==“INITIALIZED”)

if ($channel) {
        $rec_status = get_var("IMPORT($channel,REC_STATUS)");

        $agi->set_variable('REC_STATUS', $rec_status);
        if ($rec_status == "RECORDING" || $rec_status=="INITIALIZED") {
                foreach (array('MIXMON_DIR', 'YEAR', 'MONTH', 'DAY', 'CALLFILENAME', 'MIXMON_FORMAT', 'MIXMON_POST', 'MON_FMT') as $v) {
                        $agi->set_variable($v, get_var("IMPORT($channel,$v)"));
                }
        }
}

它有效。现在当我从公园取电话后按* 1时,它就会被记录下来。

如果有人找到了更好的解决方案,请在我的博客中留下评论。 http://sachindotg.blogspot.in/2014/02/asterisk-cannot-record-call-after.html