我总是得到在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替换为最后连接的频道?
我意识到它不会将转接的电话考虑在内。
我看不到确定呼叫的活动分机的方法,因为我必须在拨号命令之前启用监听。
有什么建议吗?
答案 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)}
希望这有帮助,
米尔科