当目的地是多个分机时,在星号上设置呼叫记录文件名

时间:2013-06-20 10:23:39

标签: asterisk audio-recording asterisk-ael

我总是得到在Asterisk上最令人头疼的配置。

公司有一个直接连接到SIP中继的星号服务器,所有工作正常。被要求在他们试用automixmon(* 3)命令后自动将呼叫录音引入入站和出站呼叫。

他们的要求很简单,只有MD和销售经理才能访问调用,所有内部都只是被转储到/ var / spool / asterisk / monitor文件夹中,而带有身份验证的Web服务器允许他们查看文件夹 - 当他们开心时,我们会清理这一点。

我已经通过此方式执行出站呼叫(我们使用AEL),因此从任何分机拨出时都会触发以下代码段。

  _9. => {
    Monitor(wav,${STRFTIME(${EPOCH},,%Y%m%d-%H:%M:%S)}-OUT-${CALLERID(num)}-${EXTEN:${ABSORB}},m);
    Dial(SIP/${EXTEN:${ABSORB}}@MAINTRUNK,90,X);
  };

ABSORB是一个全局变量,大多只是设置为1,因此9不会传递给Dial()应用程序。

入站呼叫有点棘手,因为来电通过:

Dial(SIP/2000&SIP/2001&SIP/2002&SIP/2003&SIP/2004&SIP/2005,35,Tt);

所以现在我只是这样设置:

Monitor(wav,${STRFTIME(${EPOCH},,%Y%m%d-%H:%M:%S)}-IN-${CALLERID(num)},m);
Dial(SIP/2000&SIP/2001&SIP/2002&SIP/2003&SIP/2004&SIP/2005,35,Tt);

至少会获取一个日期/时间为“IN”状态的文件和来电来电显示。

MD想要的是文件被标记为实际接听电话的分机。

有没有办法说占位符在文件名中如'XXXX'然后使用MONITOR_EXEC来获取shell并在呼叫挂起后重命名该文件,将XXXX替换为最后连接的频道?

我意识到它不会将转接的电话考虑在内。

我看不到确定呼叫的活动分机的方法,因为我必须在拨号命令之前启用监听。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我克服这个问题的建议是将控制变量,MonitorIncoming用于exaple,然后在调用Monitor之前先设置它:

MonitorIncoming=${STRFTIME(${EPOCH},,%Y%m%d-%H:%M:%S)}-IN-${CALLERID(num)};

然后做其余的

Monitor(wav,${MonitorIncoming},m);
Dial(SIP/2000&SIP/2001&SIP/2002&SIP/2003&SIP/2004&SIP/2005,35,gTt);
带有g标志的

*允许在拨号方案中继续呼叫,然后执行类似的操作(在呼叫离开所有拨号方案之前):

if(${LEN(${MonitorIncoming})}>0)
     System(mv /var/spool/asterisk/monitor/${MonitorIncoming} /var/spool/asterisk/monitor/${MonitorIncoming}-${${CDR(dstchannel)}:4:8});

*我没有对此进行过测试,也许您需要先将$ {CDR(dstchannel)}分配给变量然后再分配:4:8。 :) 或者您可以编写一个简单的shell脚本并使用System()调用它并将其传递给${CDR(dstchannel)} 希望这有帮助,
米尔科