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

Re: Запрос голоса в конференции

Добавлено: 13 янв 2017, 15:25
trscod
И я отчитаюсь о решении своей задачи:

https://www.youtube.com/watch?v=Xoz8dvsMvMM

Re: Запрос голоса в конференции

Добавлено: 13 янв 2017, 16:05
tol_iwan
trscod писал(а):И я отчитаюсь о решении своей задачи:
Что-то мне подсказывает, что мой вопрос сегодня на форуме hello asterisk и ваш ответ не просто совпадение ))) хотя темы разные...
Вы разработчик сего чуда? ))

Re: Запрос голоса в конференции

Добавлено: 13 янв 2017, 16:09
trscod
Архитектор :)

Re: Запрос голоса в конференции

Добавлено: 05 июл 2018, 13:49
olegsenin
Поделюсь своим, почти работающим решением.
Дано:
Телефон Yealink с панелью расширения EXP50
Зарание известный список участников конференции.
Основные настройки confbridge
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[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)	;Павел
extensions.conf:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

; ################################
; Генерация 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))
; ################################
На EXP50 есть кнопка "Сбор", при ее нажатии идет вызов на номер 9002, далее создаются Call files для массового обзвона номеров участников конференции.
Далее организатор переходит в конференцию администратором (жмет 8ку) и далее может управлять участниками конференции.
При нажатии клавишь на EXP50 в зависимости от состояния (UNKNOWN | NOT_INUSE | INUSE | BUSY | RINGINUSE | ONHOLD) микрофон может включаться, выключаться и если абонент не в конференции, повторно может быть вызван через CallFile.
При этом отображается цветной статус BLF.
НО, есть проблема, пока клавиша не отмигала (после нажатия 1) то при попытке изменить статус на Yealink идет новый вызов. Пока не знаю как это убрать.
Если статус абонента BUSY телефон набирает DTMF, если статус не BUSY и не NOT_INUSE - начинает новый вызов. Вот такая засада ((

Re: Запрос голоса в конференции

Добавлено: 05 июл 2018, 15:46
ded
Подход к решению управлением конференцией через кнопки BLF напоминает т.н. "системные" телефоны на станциях Panasonic, через кото рыепрограммировалась станция, перенаправления, и пр.
Думаю, что любое вэб-приложение для управления конференцией даст 100 очков вперёд кнопкам EXP50.
Оттокнуться можно вполне от Web Meetme, открытый код, дополнять - сколько нужно!

Re: Запрос голоса в конференции

Добавлено: 05 июл 2018, 17:03
olegsenin
ded писал(а):Подход к решению управлением конференцией через кнопки BLF напоминает т.н. "системные" телефоны на станциях Panasonic, через кото рыепрограммировалась станция, перенаправления, и пр.
Думаю, что любое вэб-приложение для управления конференцией даст 100 очков вперёд кнопкам EXP50.
Оттокнуться можно вполне от Web Meetme, открытый код, дополнять - сколько нужно!
Согласен, но "старая школа" требует привычный функционал на новых рельсах.
Дед, посоветуй как выкрутиться из той "ошибки"?
Написал в Yealink, они вроде как озадачились, но сколько они будут "думать"... :?:

Re: Запрос голоса в конференции

Добавлено: 05 июл 2018, 18:03
ded
Зачем процитировали полностью предыдущее сообщение?