Re: Запрос голоса в конференции
Добавлено: 13 янв 2017, 15:25
Что-то мне подсказывает, что мой вопрос сегодня на форуме hello asterisk и ваш ответ не просто совпадение ))) хотя темы разные...trscod писал(а):И я отчитаюсь о решении своей задачи:
Код: Выделить всё
[operativka_users] ;Определяем как пользователь ведет себя в конференции.
type=user
startmuted=yes ; Выключить микрофон участника при подключении к телеконференции. Off by default
wait_marked=yes ;Пользователь не становиться участником конференции, до подключения промаркированного пользователя (см. также music_on_hold_when_empty=yes). Off by default.
end_marked=yes
[operativka_admin] ;Определяем как пользователь ведет себя в конференции.
type=user
admin=yes ; Предоставить права администратора или нет. Off by default.
marked=yes ; Метка особого пользователя. Поведение других участников конференции может зависеть от действий маркированного пользователя. Некоторые параметры привязанные к маркированному пользователю, будут определять это поведение. Off by default.
startmuted=no ; Выключить микрофон участника при подключении к телеконференции. Off by default
[user_menu] ;Меню пользователя
type=menu
1=dialplan_exec(conferention-alert,,1)
8=leave_conference
[admin_menu] ;Меню администратора
type=menu
72337=dialplan_exec(sub-conferention-blf,2337,1) ;Ирина
72336=dialplan_exec(sub-conferention-blf,2336,1) ;Екатерина
72593=dialplan_exec(sub-conferention-blf,2593,1) ;Павел
Код: Выделить всё
; ################################
; Генерация call файлов
; ################################
[conferention]
exten => 9002,1,NoOp("Собирает конференцию номер ${EXTEN}")
same => n,System(echo "Channel: Local/2622@conferention-caller/nb\nCallerID: "Оперативка" <2770>\nMaxRetries: 0\nRetryTime: 5\nWaitTime: 20\nContext: redirectconferention\nExtension: 2622\nPriority: 1\n" > /tmp/${UNIQUEID}.call)
same => n,System(mv /tmp/${UNIQUEID}.call /var/spool/asterisk/outgoing/)
; same => n,System(echo "Channel: Local/2561@conferention-caller/nb\nCallerID: "Оперативка" <2770>\nMaxRetries: 0\nRetryTime: 5\nWaitTime: 20\nContext: redirectconferention\nExtension: 2561\nPriority: 1\n" > /tmp/${UNIQUEID}.call)
; same => n,System(mv /tmp/${UNIQUEID}.call /var/spool/asterisk/outgoing/)
; same => n,System(echo "Channel: Local/1002@conferention-caller/n\nCallerID: "Оперативка" <2770>\nMaxRetries: 0\nRetryTime: 5\nWaitTime: 20\nContext: redirectconferention\nExtension: 1002\nPriority: 1\n" > /tmp/file1002.call)
; same => n,System(mv /tmp/file1002.call /var/spool/asterisk/outgoing/)
; same => n,System(echo "Channel: Local/2626@conferention-caller/n\nCallerID: "Оперативка" <2770>\nMaxRetries: 0\nRetryTime: 5\nWaitTime: 20\nContext: redirectconferention\nExtension: 2626\nPriority: 1\n" > /tmp/file2626.call)
; same => n,System(mv /tmp/file2626.call /var/spool/asterisk/outgoing/)
same => n,System(echo "Channel: Local/2772@conferention-caller/n\nCallerID: "Оперативка" <2770>\nMaxRetries: 0\nRetryTime: 5\nWaitTime: 20\nContext: redirectconferention\nExtension: 2772\nPriority: 1\n" > /tmp/file2.call)
same => n,System(mv /tmp/file2.call /var/spool/asterisk/outgoing/)
same => n,Goto(conferention-enter-admin,${EXTEN},1)
; ################################
; ################################
; Звонок call file
; ################################
[conferention-caller]
exten => _ZXXX,1,Goto(ats-in-out,${EXTEN},1)
; ################################
; ################################
; Вход в конференцию админа
; ################################
[conferention-enter-admin]
exten => _ZXXX,1,NoOp("Админ собрал ${EXTEN}")
same => n,ConfBridge(8787,operativka,operativka_users,user_menu)
same => n,ConfBridge(8787,operativka,operativka_admin,admin_menu)
exten => h,1, NoOp("${EXTEN} положил трубку. Значение переменной ${CONFBRIDGE_RESULT}")
same => n,Hangup()
; ################################
; ################################
; Редирект в конференцию юзеров
; ################################
[redirectconferention]
exten => _ZXX.,1,NoOp(Перенаправляем в конференцию номер ${EXTEN}, организатор ${CALLERID(num)})
same => n,Set(DEVICE_STATE(Custom:conf${EXTEN})=BUSY)
same => n,Set(CHANNEL(hangup_handler_push)=sub-call-from-cid-ended,s,1(${CALLERID(num)},${EXTEN}))
same => n,ConfBridge(8787,operativka,operativka_users,user_menu)
same => n,Hangup()
; ################################
; ################################
; Если абонент в конференции повесит трубку - сменить статус
; ################################
[sub-call-from-cid-ended]
exten => s,1,NoOp("Значения аргументов ${ARG1} и ${ARG2}")
same => n,GotoIf($["${ARG1}" = "" | "${ARG2}" = ""]?end)
same => n,Set(DEVICE_STATE(Custom:conf${ARG2})=NOT_INUSE)
same => n(end),Return
; ################################
; ################################
; Включение/выключение микрофона в конференции
; ################################
[sub-conferention-blf]
exten => _ZXX.,1,NoOp("Изменение статуса номера ${EXTEN} и включение/выключение микрофона ${DEVICE_STATE(Custom:conf${EXTEN})}")
same => n,GotoIf($[${DEVICE_STATE(Custom:conf${EXTEN})} = BUSY]?conferention-mute-on,${EXTEN},1)
same => n,GotoIf($[${DEVICE_STATE(Custom:conf${EXTEN})} = ONHOLD]?conferention-mute-off,${EXTEN},1)
same => n,GotoIf($[${DEVICE_STATE(Custom:conf${EXTEN})} = NOT_INUSE]?conferention-add,${EXTEN},1)
same => n,GotoIf($[${DEVICE_STATE(Custom:conf${EXTEN})} = RINGING]?conferention-mute-on,${EXTEN},1)
; ################################
; ################################
; Выключение микрофона в конференции
; ################################
[conferention-mute-off]
exten => _ZXX.,1,NoOp("Изменение статуса номера ${EXTEN} и ВЫКЛЮЧЕНИЕ микрофона ${DEVICE_STATE(Custom:conf${EXTEN})}")
same => n,Set(DEVICE_STATE(Custom:conf${EXTEN})=BUSY)
same => n,System(asterisk -rx "confbridge mute 8787 Local/${EXTEN}")
; ################################
; ################################
; Включение микрофона в конференции
; ################################
[conferention-mute-on]
exten => _ZXX.,1,NoOp("Изменение статуса номера ${EXTEN} и ВКЛЮЧЕНИЕ микрофона ${DEVICE_STATE(Custom:conf${EXTEN})}")
same => n,Set(DEVICE_STATE(Custom:conf${EXTEN})=ONHOLD)
same => n,System(asterisk -rx "confbridge unmute 8787 Local/${EXTEN}")
; ################################
; ################################
; Подача голоса в конференции
; ################################
[conferention-alert]
exten => s,1,NoOp("Желает голос ${CHANNEL:6:4} канал ${CHANNEL}")
same => n,System(/var/lib/asterisk/sounds/vympel/golos2.sh "${CHANNEL:6:4}")
[conferention-add]
exten => _ZXXX,1,NoOp("Вызывается в оперативку ${EXTEN}, значения аргументов ${ARG1}")
same => n,System(echo "Channel: Local/${EXTEN}@conferention-caller/nb\nCallerID: "Оперативка" <2770>\nMaxRetries: 0\nRetryTime: 5\nWaitTime: 20\nContext: redirectconferention\nExtension: ${EXTEN}\nPriority: 1\n" > /tmp/${UNIQUEID}.call)
same => n,System(mv /tmp/${UNIQUEID}.call /var/spool/asterisk/outgoing/)
; ################################
; Контекст конференции
; ################################
[conferention-regcontext]
exten => _ZXXX,1,NoOp(Перенаправляем в конференцию номер ${EXTEN}, вызов пришел с номера ${CALLERID(num)}
same => n,Set(DEVICE_STATE(Custom:conf8787)=BUSY)
same => n,Set(CHANNEL(hangup_handler_push)=sub-call-from-cid-ended,s,1(${CALLERID(num)},8787))
; ################################
Согласен, но "старая школа" требует привычный функционал на новых рельсах.ded писал(а):Подход к решению управлением конференцией через кнопки BLF напоминает т.н. "системные" телефоны на станциях Panasonic, через кото рыепрограммировалась станция, перенаправления, и пр.
Думаю, что любое вэб-приложение для управления конференцией даст 100 очков вперёд кнопкам EXP50.
Оттокнуться можно вполне от Web Meetme, открытый код, дополнять - сколько нужно!