Страница 3 из 4
Re: Что значит, расширить конференцию? *5
Добавлено: 12 янв 2016, 11:42
Wapo
Да я в курсе насчет устаревания и хороших возможностей AMI - просто клиентура ХОЧЕТ видеть вэб-морду состояния на одном экране в фоп2-лайк варианте.
Re: Что значит, расширить конференцию? *5
Добавлено: 12 янв 2016, 12:15
Aven
У меня состояния тоже через веб самописный отображаются.
Код: Выделить всё
stick*CLI> manager show event Confbridge
ConfbridgeEnd ConfbridgeJoin ConfbridgeLeave ConfbridgeMute ConfbridgeRecord ConfbridgeStart ConfbridgeTalking ConfbridgeUnmute ConfbridgeStopRecord
Re: Что значит, расширить конференцию? *5
Добавлено: 13 янв 2016, 08:43
postscripter
Новый способ обрушить астериск: пользователь заходит в конференцию, вызывает из меню конференции dial_exec, в котором этого же пользователя отправляют (ChannelRedirect) в эту же конференцию снова. После 3-4 таких попыток имеем segfault, более того, уже после первого раза этот канал нельзя будет кикнуть никакими скриптами.
Re: Что значит, расширить конференцию? *5
Добавлено: 13 янв 2016, 09:06
postscripter
Ну, и может кому пригодится -- способ выбросить пользователя из конфы прямо из диалплана
;; удаление участника
[macro-my-leaveconf]
exten => s,1,Noop(Ubiraem iz razgovora)
exten => s,n,Set(CM=import telnetlib,time\; tn=telnetlib.Telnet('127.0.0.1',5038)\; tn.write(')
exten => s,n,Set(CM=${CM}Action: Login\\r\\nUsername: themanager\\r\\nSecret: niktoneuznaet\\r\\nEvents: no\\r\\n\\r\\n)
exten => s,n,Set(CM=${CM}Action: Confbridgekick\\r\\nConference: ${ARG1}\\r\\nChannel: ${ARG2}\\r\\n\\r\\n)
exten => s,n,Set(CM=${CM}')\;)
exten => s,n,System(python -c "${CM}")
;;uncomment to debug
;exten => s,n,Set(CM=${CM}time.sleep(2)\; print tn.read_very_eager()\;)
;exten => s,n,System(python -c "${CM}" > /tmp/123 2>&1)
;exten => s,n,wait(3)
;exten => s,n,Set(foo=${FILE(/tmp/123)})
exten => s,n,MacroExit()
Вызывать так
exten => _X.,n,Macro(my-leaveconf,${conf_nomer},${chan_nomer})
Re: Что значит, расширить конференцию? *5
Добавлено: 13 янв 2016, 12:38
Aven
Проще тогда через CLI команды:
Код: Выделить всё
CLI> confbridge kick
Usage: confbridge kick <conference> <channel>
Kicks a channel out of the conference bridge.
Re: Что значит, расширить конференцию? *5
Добавлено: 14 янв 2016, 08:40
postscripter
А почему в ConfBridge-меню не с первого раза команда может срабатывать? Звонок с софтофона phoner lite.
На цифре пять стандартно висит выход из конференции и продолжение диалплана. Первый раз всегда выходит нормально, затем в диалплане у меня некоторые манипуляции, которые занимают много времени (dial), и после него опять возвращение в ту же конфу:
ConfBridge(${EXTEN},my_mybridge,my_myadmin,my_myadminmenu)
И как-то совершенно рандомно после возвращения отваливается меню. Чтобы оно заработало, нужно просто подождать минутку, нормализуется само. Иногда после 3-4 нажатий наконец срабатывает... В логах на максимальном уровне отладки видно прохождение dtmf, но и всё на этом:
[2016-01-14 11:09:23] DEBUG[844][C-00000017]: bridging.c:769 bridge_channel_join_multithreaded: Going into a multithreaded waitfor for bridge channel 0xb4df6a6c of bridge 0xb504cbfc
[2016-01-14 11:09:23] DEBUG[844][C-00000017]: bridging.c:769 bridge_channel_join_multithreaded: Going into a multithreaded waitfor for bridge channel 0xb4df6a6c of bridge 0xb504cbfc
[2016-01-14 11:09:23] DEBUG[7754]: manager.c:4856 match_filter: Examining event:
Event: RTCPSent
Privilege: reporting,all
To: 10.220.0.20:5063
OurSSRC: 972299122
SentNTP: 1452748163.1589010432
SentRTP: 3637784
SentPackets: 22443
SentOctets: 3590880
ReportBlock:
FractionLost: 0
CumulativeLoss: 0
IAJitter: 0.0004
TheirLastSR: 2884698978
DLSR: 9.4310 (sec)
[2016-01-14 11:09:23] DEBUG[2030][C-00000017]: bridging.c:769 bridge_channel_join_multithreaded: Going into a multithreaded waitfor for bridge channel 0xb44883f4 of bridge 0xb504cbfc
[2016-01-14 11:09:23] DEBUG[844][C-00000017]: bridging.c:769 bridge_channel_join_multithreaded: Going into a multithreaded waitfor for bridge channel 0xb4df6a6c of bridge 0xb504cbfc
[2016-01-14 11:09:23] DEBUG[2030][C-00000017]: bridging.c:769 bridge_channel_join_multithreaded: Going into a multithreaded waitfor for bridge channel 0xb44883f4 of bridge 0xb504cbfc
Re: Что значит, расширить конференцию? *5
Добавлено: 14 янв 2016, 09:42
Aven
где тут DTMF?
Версия * какая?
Re: Что значит, расширить конференцию? *5
Добавлено: 14 янв 2016, 12:15
postscripter
Вот это событие, RTCPSent, приходит каждый раз по нажатию кнопки. Больше ничего, и это при debug level 10 + verbose по максимуму.
Asterisk 11.16.0 / PBX 12.0.76
Re: Что значит, расширить конференцию? *5
Добавлено: 15 янв 2016, 06:02
postscripter
Закончил свой вариант n-way-conf, зацените. Может, какие-то мысли появятся по вышеописанной проблеме? Хотя я подозреваю phonerLite.
;; Сочетание *0 включает режим конференции
[macro-MyFeature1]
exten => s,1,Noop(Perevod v konfu)
exten => s,n,Set(confno=${CALLERID(num)})
exten => s,n,Noop(Perevod sobesed)
exten => s,n,ChannelRedirect(${BRIDGEPEER},my-addtoconf,${confno},asuser)
exten => s,n,Noop(Perevod sebya)
exten => s,n,ChannelRedirect(${CHANNEL},my-addtoconf,${confno},asadmin)
exten => s,n,Hangup
exten => s,n,MacroExit()
;; Редирект канала в конференцию $EXTEN
[my-addtoconf]
exten => _X.,1(asadmin),Noop(...as ADMIN)
exten => _X.,n,ConfBridge(${EXTEN},my_mybridge,my_myadmin,my_myadminmenu)
exten => _X.,n,Read(dst,speed-enternumber)
exten => _X.,n,Set(devinfo_context=${ODBC_CHECK_CONTEXT(${EXTEN})})
exten => _X.,n,Dial(LOCAL/${dst}@${devinfo_context},10,gG(my-addtoconf^${EXTEN}^redir))
exten => _X.,n,GotoIF($[${DIALSTATUS} = NOANSWER]?noansw)
exten => _X.,n,GotoIF($[${DIALSTATUS} = BUSY]?zanjat)
exten => _X.,n(wrongnum),Playback(pbx-invalid)
exten => _X.,n,GoTo(asadmin)
exten => _X.,n(noansw),Playback(ne-otvechaet&poprobujte-eshhe-raz)
exten => _X.,n,GoTo(asadmin)
exten => _X.,n(zanjat),Playback(extension&zanjat)
exten => _X.,n,GoTo(asadmin)
exten => _X.,n(redir),GoTo(asadmin)
exten => _X.,n(asuser),Noop(...as USER)
exten => _X.,n,ConfBridge(${EXTEN},my_mybridge,my_myuser,user_menu)
exten => _X.,n,Hangup
Функция ODBC_CHECK_CONTEXT описана так
Код: Выделить всё
[CHECK_CONTEXT]
dsn=asterisk_db
readsql=(SELECT data FROM sip WHERE id=${ARG1} AND keyword='context' LIMIT 1)
UNION
(SELECT data FROM dahdi WHERE id=${ARG1} AND keyword='context' LIMIT 1)
Собеседники добавляются кнопкой, назначенной на выход из конференции, обычно *5, у меня *0.
Re: Что значит, расширить конференцию? *5
Добавлено: 15 янв 2016, 09:00
postscripter
К сожалению, не вижу никакой (тривиальной) возможности завершить конференцию по выходу администратора. kick all появилась только в 12-м астериске. 12-й астер есть, кажется, в комплекте с 13-м FreePBX, но PBX я трогать не хочу, 13-я версия глючная насквозь. Насколько сложно, и вообще, возможно ли обновиться с 11.6 на 12, не трогая FreePBX?
В качестве workaround добавил RAND() при создании конференции, в старой участники могут продолжать общаться. В принципе, тоже неплохо, если в Dial поставить ограничение по времени типа L(3600000:600000).