VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Аватара пользователя
trscod
Сообщения: 358
Зарегистрирован: 30 авг 2010, 17:34

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

Сообщение trscod »

И я отчитаюсь о решении своей задачи:

https://www.youtube.com/watch?v=Xoz8dvsMvMM
Аватара пользователя
tol_iwan
Сообщения: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск
Контактная информация:

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

Сообщение tol_iwan »

trscod писал(а):И я отчитаюсь о решении своей задачи:
Что-то мне подсказывает, что мой вопрос сегодня на форуме hello asterisk и ваш ответ не просто совпадение ))) хотя темы разные...
Вы разработчик сего чуда? ))
Аватара пользователя
trscod
Сообщения: 358
Зарегистрирован: 30 авг 2010, 17:34

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

Сообщение trscod »

Архитектор :)
Аватара пользователя
olegsenin
Сообщения: 91
Зарегистрирован: 30 мар 2015, 10:29

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

Сообщение 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 - начинает новый вызов. Вот такая засада ((
ded
Сообщения: 15619
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

Подход к решению управлением конференцией через кнопки BLF напоминает т.н. "системные" телефоны на станциях Panasonic, через кото рыепрограммировалась станция, перенаправления, и пр.
Думаю, что любое вэб-приложение для управления конференцией даст 100 очков вперёд кнопкам EXP50.
Оттокнуться можно вполне от Web Meetme, открытый код, дополнять - сколько нужно!
Аватара пользователя
olegsenin
Сообщения: 91
Зарегистрирован: 30 мар 2015, 10:29

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

Сообщение olegsenin »

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

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

Сообщение ded »

Зачем процитировали полностью предыдущее сообщение?
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH