Asterisk AsterNET Как перейти с парковки в очередь?

Я использую C# AsterNET для управления своими командами и событиями Asterisk, и теперь у меня есть новая функция, над которой нужно работать.

Это просто (я думаю), но сейчас я застрял.

Сценарий

У меня есть две очереди, 8100 и 8300, и 2 внутренних номера - 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")

Проблема

Паркуюсь нормально, но когда я пытаюсь перенаправить со стоянки в свою очередь, вызывающее устройство просто отключается и соединение теряется.

Как я могу перевести запаркованный вызов в мою очередь или передать его прямо в очередь (было бы лучше) без необходимости исходить?

2 ответа

Просто держите вместо парковки и составляйте свой список таких звонков.

Для перехода в очередь я могу выполнить слепой перенос, как описано на веб-сайте Asterisk. Ссылки ниже:

ManagerAction_BlindTransfer

ManagerEvent_BlindTransfer

Чтобы добиться этого с помощью AsterNET, я могу использовать то же действие RedirectAction, которое я использовал, но мне нужно изменить контекст. Это не может быть по умолчанию для контекста, по умолчанию мы позволяем Asterisk управлять им, и почему-то он не может справиться, как я ожидал. Таким образом, это должно быть четко указано как международный перевод. Событие, возникающее после этой передачи контекста, - это Manager_BlindTransfer.

Manager_Action_RedirectAction

Таким образом, с помощью своего 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")

Резюме

Было просто вопросом правильного контекста для использования.

from-internal-xfer

Другие вопросы по тегам