我使用C# AsterNET来管理我的星号命令和事件,现在我确实有了一个新的特性。
这很简单(我想),但我现在被塞了起来。
场景
我有两个队列,8100和8300,两个分机是8101和8301。当我接到来自PSTN的电话时,它会被驱动到8100队列。当8101扩展可用时,我确实将这个扩展添加到8100队列中,因此调用的PSTN设备将被重定向到这个8101扩展。
在这里之前一切都很顺利。
有时候,我会把呼叫设备停下来,让8301知道我的应用程序,所以使用同一应用程序的8301用户可以发送命令,请求将停靠的频道重定向到SIP电话。工作也很好。
作用域
现在我想有一些功能让8101将这个呼叫设备传送到我的另一个队列,8300。所以我试着重新使用我的停放方法和重定向方法
internal void Park(string channel, int parkTimeout)
{
ParkAction pa = new ParkAction(channel, channel, parkTimeout.ToString());
ManagerResponse mr = manager.SendAction(pa);
}
internal void RedirectFromParking(string channel, string exten)
{
RedirectAction ra = new RedirectAction
{
Priority = 1,
Context = "default",
Channel = channel,
Exten = exten
};
ManagerResponse mr = manager.SendAction(ra);
}
Park("abc123456", 10000);
RedirectFromParking("abc123456", "8300")问题
我是停车罚款,但当我试图重定向从停车到我的队列,呼叫设备只是断开了,连接失去了。
如何将一个已停靠的呼叫转移到我的队列,或者直接将其传输到队列(更好),而不需要发起?
发布于 2019-09-04 21:04:41
只需坚持而不是停车,并制定你自己的名单这样的电话。
发布于 2019-09-05 16:58:03
为了传送到队列,我可以做一个盲传输记录在星号网站上。链接如下:
为了使用AsterNET实现这一点,我可以使用我使用的相同的RedirectAction,但我确实需要更改上下文。它不能默认为上下文,因为默认情况下,我们让星号管理它,不知怎么它不能处理,因为我驱逐。因此,它需要明确规定为内部转移。此上下文传输后引发的事件是Manager_BlindTransfer。
因此,在调试引发事件方法的调试过程中,我使用我的SIP电话成功地传输了一个呼叫,这样我就可以捕获使用在其中的上下文。使用正确的上下文
ManagerConnection manager = new ManagerConnection(address, port, user, password);
manager.BlindTransfer += Manager_BlindTransfer;
private void Manager_BlindTransfer(object sender, BlindTransferEvent e)
{
}在此之后,我创建了另一个使用正确上下文直接传输到队列的方法。
internal void TransferToQueue(string channel, string queue)
{
RedirectAction ma = new RedirectAction
{
Priority = priority,
Context = "from-internal-xfer",
Channel = channel,
Exten = queue
};
ManagerResponse mr = manager.SendAction(ma);
}
TransferToQueue("abc123456", "8300")摘要
只是使用正确的上下文而已。
内部-xfer
https://stackoverflow.com/questions/57792024
复制相似问题