2

我总是得到在 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 替换为最后连接的通道来重命名文件?

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

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

有什么建议么?

4

1 回答 1

2

我克服这个问题的建议是制作控制变量,例如 MonitorIncoming,然后在调用 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)}
希望这对您有所帮助,
Mirko

于 2013-06-20T11:55:37.900 回答