我正在使用asterisk / freepbx。 Asterisk不记录从公园提取的呼叫。这是我的通话流程。
对Asterisk服务器(AS)的调用 呼叫由分机B接听 B通过拨打* 2200进行转机转接(200是我的默认停车场) C拨1以获取暂留的呼叫 C拨打* 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