Asterisk 1.8.11.0+LinkSys SPA-2102
Стояла задача: обеспечить возможность вклиниться в разговор абонентов "A" и "B", абоненту "С". Вклинивание в разговор должно обеспечить возможность общения абонента "С" с абонетом "А", даже при условии, что абонент "В" повесил трубку.
Дополнительным требованием также являлась организация приоритетов: допустим после абонента "С" звонит абонент "D" (у которого в свою очередь более высокий приоритет) и он тогда должен вклиниться в разговор абонентов "С" и "А" по аналогии с предыдущим.
Поскольку опыта написания и подключения скриптов нет, задачу я реализовывал засчет стандартных приложений.
"А" - абонент с №100
"С" - абонент с №911
exten => 100,1,Answer()
exten => 100,n,Dial(SIP/${EXTEN},30)
exten => 100,n,GotoIF($[${GROUP_COUNT(${EXTEN}@busy_in)} > 0 ]?number_is_busy)
exten => 100,n,GotoIF($[${GROUP_COUNT(${EXTEN}@busy_out)} > 0 ]?number_is_busy)
exten => 100,n(number_is_busy),Goto(Context_1,100,11)
exten => 100,11,GotoIf($[${CALLERID(num)} =911]?22:33)
exten => 100,22,Bridge(SIP/100)
exten => 100,33,Hangup()
По такому сценарию (без приоритетов) задача выполнялась.
Но потребовалось, чтобы схема также отрабатывала и при проведении автоматического оповещения абонентов. Например, если абонент с кем-нибудь общается, но было запущено автоматичсекое оповещение, то он в любом случае должен быть оповещен, чего не происходит.
Оповещаю посредством *.call файлов следующим образом:
[Notification] ;сценарий на запуск оповещения
exten = 555,1,GotoIf($[${CALLERID(num)} = 911]?10:20)
exten => 555,10,Goto(Notification1,s,1)
exten => 555,20,Hungup()
[Notification1] ;Исполнительный сценарий для осуществления оповещения
exten => s,1,Answer
exten => s,n,System(cp /etc/asterisk/warning/*.call /tmp/)
exten => s,n,System(mv /tmp/*.call /var/spool/asterisk/outgoing/)
exten => s,n,Hangup()
*.call файл, лежащий в папке "warning"
Channel: SIP/100
Callerid:922
MaxRetries: 3
RetryTime: 30
WaitTime:30
Context: Opoveshenie
Extension: 10
Priority: 1
[Opoveshenie] ; контекст в соответствии, с которым проводилось оповещение
exten => 10,1,Answer(30)
exten => 10,n,Wait(1)
exten => 10,n,Playback(/var/lib/asterisk/sounds/ru/vsem_na_palubu)
exten => 10,n,Hangup()
Так как контекст “Opoveshenie” будет запускаться только в случае успешного соединения с абонетом 100, я для реализации задачи "оповещения в любом случае" немного видоизменил контекст к следующему виду:
exten => 100,1,Answer()
exten => 100,n,Dial(SIP/${EXTEN},30)
exten => 100,n,GotoIF($[${GROUP_COUNT(${EXTEN}@busy_in)} > 0 ]?number_is_busy)
exten => 100,n,GotoIF($[${GROUP_COUNT(${EXTEN}@busy_out)} > 0 ]?number_is_busy)
exten => 100,n(number_is_busy),Goto(Context_1,100,11)
exten => 100,11,GotoIf($[${CALLERID(num)} =911]?33:21)
exten => 100,21,GotoIf($[${CALLERID(num)} =922]?33:44)
exten => 100,33,Bridge(SIP/100)
exten => 100,44,Hangup()
Но, асткриск все равно дает отбой и произвести оповещение при занятом канале не получается.
Подскажите, плиз, возможные пути к решению данной проблемы.