Интересный факт: Я пытаюсь реализовать функцию управления конференц-связью на своем сервере Elastix. Первоначальная проблема заключалась в невозможности Elastix пригласить всех участников конференции через веб-интерфейс. Я обнаружил, что могу использовать веб-приложение на основе Python под названием Asterisk Conference Manager, которое, по сути, представляет собой инструмент, который создает несколько файлов выноски и помещает их в папку Outgoing Asterisk для создания конференции Confbridge.
Проблема в: когда пара пользователей звонит и приглашение на конференцию выдается одному из пользователей - исходный вызов устанавливается на удержание. Но затем присоединившийся пользователь может добавить еще одного нежелательного гостя, нажав кнопку «Conf» на своем SIP-телефоне, беззвучно включив подслушивающего устройства в конференцию. Есть ли способ ограничить такую функциональность? Может есть настройка диалплана или контекста? Я пытался выполнить поиск в документации, но, похоже, мне не удалось найти нужную информацию.
Вот пример моего файла выноски:
CALLOUT_TEMPLATE = """Channel: SIP/%(number)s
Context: confman-bridge
Extension: %(confnum)s
Priority: 1
MaxRetries: 0
RetryTime: 300
WaitTime: 300
Set: participant_name=%(name)s
Set: participant_number=%(number)s
Set: conf_number=%(confnum)s
"""
Вот как выглядит мой контекст:
[confman-bridge]
load => func_groupcount.so ; function GroupCount - Requires N/A
exten => _X.,1,Verbose(Bridging ${participant_name} ${participant_number})
;Limit the number of outgoing calls
;Set Group
same => n,Set(CALLERID(all)=${participant_name} <${participant_number}>)
same => n,Set(ret=${CURL(${CONFMAN_HOST}/asterisk/enter_conference/${conf_number}/${participant_number})})
same => n,Answer
same => n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?READPIN)
same => n,Answer
same => n,Wait(1)
same => n,Set(PINCOUNT=0)
same => n(READPIN),Read(PIN,enter-conf-pin-number,,,,)
same => n,GotoIf($[x${PIN} = x22]?USER)
same => n,Set(PINCOUNT=$[${PINCOUNT}+1])
same => n,Playback(conf-invalidpin)
same => n,GotoIf($[${PINCOUNT}>3]?h,1)
same => n,Goto(READPIN)
same => n,1,Set(ret=${CURL(${CONFMAN_HOST}/asterisk/leave_conference/${conf_number}/${participant_number})})
same => n(USER),ConfBridge(${EXTEN},,,user_menu)
exten => h,1,Hangup
P.S: Я новичок в Asterisk и Elastix, поэтому не уверен, как именно называется эта функция.