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

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

Проблемы и их решения Asterisk как такового

Модератор: april22

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

Сообщение trscod » 13 янв 2017, 16:25

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

https://www.youtube.com/watch?v=Xoz8dvsMvMM
Аватар пользователя
trscod
 
Сообщений: 358
Зарегистрирован: 30 авг 2010, 17:34

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

Сообщение tol_iwan » 13 янв 2017, 17:05

trscod писал(а):И я отчитаюсь о решении своей задачи:

Что-то мне подсказывает, что мой вопрос сегодня на форуме hello asterisk и ваш ответ не просто совпадение ))) хотя темы разные...
Вы разработчик сего чуда? ))
Аватар пользователя
tol_iwan
 
Сообщений: 273
Зарегистрирован: 11 апр 2014, 11:29
Откуда: Брянск

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

Сообщение trscod » 13 янв 2017, 17:09

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

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

Сообщение olegsenin » 05 июл 2018, 14:49

Поделюсь своим, почти работающим решением.
Дано:
Телефон Yealink с панелью расширения EXP50
Зарание известный список участников конференции.
Основные настройки confbridge
[Показать] Спойлер:
Код: выделить все
[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:
[Показать] Спойлер:
Код: выделить все
; ################################
; Генерация 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 - начинает новый вызов. Вот такая засада ((
Аватар пользователя
olegsenin
 
Сообщений: 75
Зарегистрирован: 30 мар 2015, 11:29

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

Сообщение ded » 05 июл 2018, 16:46

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

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

Сообщение olegsenin » 05 июл 2018, 18:03

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

Согласен, но "старая школа" требует привычный функционал на новых рельсах.
Дед, посоветуй как выкрутиться из той "ошибки"?
Написал в Yealink, они вроде как озадачились, но сколько они будут "думать"... :?:
Аватар пользователя
olegsenin
 
Сообщений: 75
Зарегистрирован: 30 мар 2015, 11:29

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

Сообщение ded » 05 июл 2018, 19:03

Зачем процитировали полностью предыдущее сообщение?
ded
 
Сообщений: 13233
Зарегистрирован: 26 авг 2010, 19:00

Пред.

Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

© 2008 — 2018 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH