Страница 1 из 1

Последовательный вызов

Добавлено: 27 ноя 2017, 18:00
janetland
Доброго дня всем

Возник вопрос следующего плана: есть групповой номер 174, при наборе него звонок идет номерам 175 и 176 соответственно. Если трубка 175 выключена (UNAVAILABLE) звонок должен уходить на номер 187. А этого не происходит.

Код extention.conf:

Код: Выделить всё

exten => 174,1,Dial(SIP/175&SIP/176,40,Tt);
exten => 174,n,HangUP();

exten => 175,1,NoOp(device_state is ${DEVICE_STATE(SIP/175)});
exten => 175,2,GotoIf($["${DEVICE_STATE(SIP/175)}" = "UNAVAILABLE"]?5:3);
exten => 175,3,Dial(SIP/175,40,Tt);
exten => 175,4,HangUP();
exten => 175,5,Dial(SIP/187,40,Tt);
exten => 175,6,HangUP();

Код: Выделить всё

   -- Executing [174@incoming:1] Dial("SIP/asterisk-00030e54", "SIP/175&SIP/176,40,Tt") in new stack
[Nov 27 17:44:11] WARNING[100255][C-0001b579]: app_dial.c:2455 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent)
    -- Called SIP/176
    -- SIP/176-00030e55 is ringing
    -- SIP/176-00030e55 is ringing
Если звоним напрямую на 175 - все ок, вызов принимается SIP/187. Получается, при параллельном вызове (из диалплана номера 174) невозможна софтовая переадресация? Вариант, использовать que, но задача - увидеть через AMI маршрут звонка 174-175-187...

Re: Последовательный вызов

Добавлено: 27 ноя 2017, 18:10
virus_net
Ессно не уходит, ведь вы вызываете ГРУППУ номеров, а в группе не отвечает только один номер.
Решение:
  • 1. Вынести SIP/175&SIP/176 в переменную.
    2. Проверить DEVICE_STATE SIP/175 ДО Dial
    3. Если трубка 175 выключена (UNAVAILABLE) менять содержимое переменной на SIP/176&SIP/187
    4. Вызываем Dial с использованием переменной

Re: Последовательный вызов

Добавлено: 28 ноя 2017, 12:32
janetland
Благодарю, virus_net, для ряда групповых номеров у меня используется следующая конструкция:

exten => 240,1,Set(filename=${UNIQUEID});
exten => 240,2,MixMonitor(/usr/rec/${filename}.wav,ab);
exten => 240,3,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes);
exten => 240,4,GotoIf($["${DEVICE_STATE(SIP/223)}" = "INUSE"]?6:5);
exten => 240,5,Set(caller1=SIP/223&);
exten => 240,6,GotoIf($["${DEVICE_STATE(SIP/226)}" = "INUSE"]?8:7);
exten => 240,7,Set(caller2=SIP/226&);
exten => 240,8,GotoIf($["${DEVICE_STATE(SIP/227)}" = "INUSE"]?10:9);
exten => 240,9,Set(caller3=SIP/227&);
exten => 240,10,GotoIf($["${DEVICE_STATE(SIP/343)}" = "INUSE"]?14:11);
exten => 240,11,Set(caller4=SIP/343);
exten => 240,12,Dial(${caller1}${caller2}${caller3}${caller4},300,Tt);
exten => 240,13,HangUP();
exten => 240,14,Set(dialnumber=${caller1}${caller2}${caller3}${caller4});
exten => 240,15,GotoIf(${LEN(${dialnumber})}>0?18:);
exten => 240,16,Background(en/allbusy);
exten => 240,17,Goto(incoming,240,4);
exten => 240,18,Dial(${dialnumber:0:-1},300,Tt);
exten => 240,n,HangUP();

Скорее всего, именно это Вы имели ввиду?

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

Текущая задача чуть сложнее: есть групповой вызов на номер 174 (номера в группе 175 и 176), т.к. сотрудник один, он физически не может разговаривать по 2м трубкам одновременно, поэтому все вызовы должны переадресовываться на номер 187. В зависимости от приходящего вызова в АМИ ловим событие ANSWERED - если поднята трубка 175 (запускаем скрипт1), если поднята трубка 176 (запускаем скрипт2) и приземляем голосовой вызов на номер 187.

Под скриптом1,2 понимается сторонняя обработка 1с.

Re: Последовательный вызов

Добавлено: 28 ноя 2017, 17:11
virus_net
Именно это я имел в виду. Написано у вас конечно кривовато, но работать будет.

Как по мне так своим уточнением вы ничего не поменяли в задаче. Раз сотрудник один, то и названивать на оба его телефона не надо.
Вам никто не мешает вам сгенерить свое событие, ловить его в AMI и запускать по его приходу.