AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

FreeBSD + asterisk-gui

Asterisk GUI 26 сообщений -
#1

Продолжают возникать вопросы по использованию вышеуказанного телефона. Smile

Ситуация:
- есть триксбокс (asterisk 1.4.6)
- десяток ext'ов (3321....3330)
- Ring Group (3000) в которую входят несколько ext (3321, 3323, 3329)
- аналоговый шлюз с 4 FXO (входящие звонки отправляются на 3000)
- GXP-2000 настроенный на номер 3328
- боковые кнопки GXP-2000 настроены как Asterisk BLF на отображение семи ext'ов
- в конфигах произведены рекомендованные грендстримом изменения для реализации pickup call

Кнопки работают замечательно:
- отображают занятость, звонки
- позволяют вызывать абонента в одно касание
- перехватывают звонок на другой ext
Но есть одно маленькое но:
- не перехватываются звонки приходящие на Ring Group 3000

Стал разбираться в чем дело.
Попутно выяснил как работает Call Pickup.
Оказывается бывает два вида перехвата звонка:
- по *8 перехватывается звонок на соседний ext если вы с ним входите а одну pickup group
- по **EXT перехватывается звонок идущий на EXT

GXP-2000 осуществляет перехват по второму сценарию:
- кто-то звонит на EXT (3321)
- видим мигающую кнопочку (3321)
- давим ее
- GXP-2000 посылает астериску **3321
- происходит перехват звонка

Но что же происходит в случае если приходит звонок на ринг-группу 3000 (не важно, со шлюза или с какого-то внутреннего EXT)
- видим мигающую кнопочку (3321, поскольку он входит в ринг-группу 3000)
- давим ее
- GXP-2000 посылает астериску **3321
- получаем облом, со словами ошибка 503

А вот ежели вручную с GXP-2000 набрать **3000 то перехват срабатывает.

Стал читать как народ борется с подобной проблемой.
Единственное найденное решение выглядело так:
- засунуть все EXT в одну пикап-группу
- запрограммировать одну из клавиш на Speed Dial комбинации *8
- когда видишь звонок перехватывать его нажатием этой клавиши

Сие решение в принципе работает... пока в системе мало EXT'ов и не раздаются несколько звонков одновременно...

На этом идеи закончились, решил просить помощь клуба Smile


Последний раз редактировалось: SolarW (Вт Сен 18, 2007 9:51 am)
#2

Теоретически решение есть, правда тут есть несколько спорных моментов, не уверен что все будет работать так как в теории. Если не будет, то в принципе не сложно и подправить код. Идея в следующем:

Когда вызывается **3321, то работает приложение PickUp(). Смотрим помощь по этой команде:
Цитата:

-= Info about application 'Pickup' =-

[Synopsis]
Directed Call Pickup

[Description]
Pickup(extension[@context][&extension2@context...]): This application
can pickup any ringing channel
that is calling the specified extension. If no context is specified, the
current
context will be used. If you use the special string "PICKUPMARK" for the
context parameter, for example
10@PICKUPMARK, this application tries to find a channel which has define
d a channel variable with the same content
as "extension".


Скорее всего вызываемое приложение выглядит вроде этого: PickUp(${EXTEN:2}@default), меняем на PickUp(${EXTEN:2}@default&${EXTEN:2}@PICKUPMARK). Работать это будет только начиная с 1.4. Теперь прописываем sip устройству в конфиге
Код:
setvar= PICKUPMARK=3321


Как-то так.

_________________
OpenSUSE 10.3 / Asterisk-trunk / Celeron 1100 (512mb) / chan_misdn (HFC)
Linksys PAP2T / SPA941 / SPA3102 / SPA2102
http://igorg.ru
#3

IgorG писал(а):
Теоретически решение есть, правда тут есть несколько спорных моментов, не уверен что все будет работать так как в теории. Если не будет, то в принципе не сложно и подправить код. Идея в следующем:

Когда вызывается **3321, то работает приложение PickUp(). Смотрим помощь по этой команде:
Цитата:

-= Info about application 'Pickup' =-

[Synopsis]
Directed Call Pickup

[Description]
Pickup(extension[@context][&extension2@context...]): This application
can pickup any ringing channel
that is calling the specified extension. If no context is specified, the
current
context will be used. If you use the special string "PICKUPMARK" for the
context parameter, for example
10@PICKUPMARK, this application tries to find a channel which has define
d a channel variable with the same content
as "extension".


Скорее всего вызываемое приложение выглядит вроде этого: PickUp(${EXTEN:2}@default), меняем на PickUp(${EXTEN:2}@default&${EXTEN:2}@PICKUPMARK). Работать это будет только начиная с 1.4. Теперь прописываем sip устройству в конфиге
Код:
setvar= PICKUPMARK=3321


Как-то так.
Ок, завтра (вернее сегодня уже) попробую...
А это вот
Код:
setvar= PICKUPMARK=3321

так вот одной строкой и прописывается в sip.conf в секции соотв ext'а?
#4

Да, это так и прописывается.
Только вот у меня появились сомнения будет ли описанное работать, может получиться что-то совсем неожиданное Smile
Завтра сдам экзамен и если будут силы, то подумаю что можно сделать, скорее всего самому придется тоже решать аналогичную задачу.

_________________
OpenSUSE 10.3 / Asterisk-trunk / Celeron 1100 (512mb) / chan_misdn (HFC)
Linksys PAP2T / SPA941 / SPA3102 / SPA2102
http://igorg.ru
#5

Итак, в extensions_additional.conf
который
Цитата:
; do not edit this file, this is an auto-generated file by freepbx
; all modifications must be done from the web gui

нашлась вот такая конструкция
Код:
[app-pickup]
include => app-pickup-custom
exten => _**.,1,Noop(Attempt to Pickup ${EXTEN:2} by ${CALLERID(num)})
exten => _**.,n,Pickup(${EXTEN:2})

Заменил ее на
[app-pickup]
Код:
include => app-pickup-custom
exten => _**.,1,Noop(Attempt to Pickup ${EXTEN:2} by ${CALLERID(num)})
exten => _**.,n,Pickup(${EXTEN:2}&${EXTEN:2}@PICKUPMARK)

Дописал в sip_additional.conf
для каждого ext'a
setvar= PICKUPMARK=EXT
По sip show peer 3321 увидел что переменная назначилась.
Результат в принципе такой же как и был...
В консоль выводит такой лог:
Код:
-- AGI Script dialparties.agi completed, returning 0
-- Executing [s@macro-dial:20] NoOp("SIP/3330-b7d6d7a0", "Returned from dialparties with hunt groups to dial ") in new stack
-- Executing [s@macro-dial:21] Set("SIP/3330-b7d6d7a0", "HuntLoop=0") in new stack
-- Executing [s@macro-dial:22] GotoIf("SIP/3330-b7d6d7a0", "1?30 ") in new stack
-- Goto (macro-dial,s,30)
-- Executing [s@macro-dial:30] Set("SIP/3330-b7d6d7a0", "HuntMember=HuntMember0") in new stack
-- Executing [s@macro-dial:31] GotoIf("SIP/3330-b7d6d7a0", "0?32:35 ") in new stack
-- Goto (macro-dial,s,35)
-- Executing [s@macro-dial:35] GotoIf("SIP/3330-b7d6d7a0", "1?36:50 ") in new stack
-- Goto (macro-dial,s,36)
-- Executing [s@macro-dial:36] Set("SIP/3330-b7d6d7a0", "CTLoop=0") in new stack
-- Executing [s@macro-dial:37] GotoIf("SIP/3330-b7d6d7a0", "0?42 ") in new stack
-- Executing [s@macro-dial:38] Set("SIP/3330-b7d6d7a0", "CT_EXTEN=3321") in new stack
-- Executing [s@macro-dial:39] Set("SIP/3330-b7d6d7a0", "DB(CALLTRACE/3321)=3330") in new stack
-- Executing [s@macro-dial:40] Set("SIP/3330-b7d6d7a0", "CTLoop=1") in new stack
-- Executing [s@macro-dial:41] Goto("SIP/3330-b7d6d7a0", "s|37") in new stack
-- Goto (macro-dial,s,37)
-- Executing [s@macro-dial:37] GotoIf("SIP/3330-b7d6d7a0", "1?42 ") in new stack
-- Goto (macro-dial,s,42)
-- Executing [s@macro-dial:42] Dial("SIP/3330-b7d6d7a0", "SIP/3321|10|TtWwrM(auto-blkvm) ") in new stack
Extension Changed 3321 new state Ringing for Notify User 3328
-- Called 3321
-- SIP/3321-0967ecf0 is ringing
Extension Changed 3328 new state InUse for Notify User 3328
-- Executing [**3321@from-internal:1] NoOp("SIP/3328-b7d1f068", "Attempt to Pickup 3321 by 3328") in new stack
-- Executing [**3321@from-internal:2] Pickup("SIP/3328-b7d1f068", "3321&3321@PICKUPMARK") in new stack
-- Executing [**3321@from-internal:3] Wait("SIP/3328-b7d1f068", "1") in new stack
-- Executing [**3321@from-internal:4] Congestion("SIP/3328-b7d1f068", "20") in new stack
== Spawn extension (from-internal, **3321, 4) exited non-zero on 'SIP/3328-b7d1f068'
-- Executing [h@from-internal:1] Macro("SIP/3328-b7d1f068", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] ResetCDR("SIP/3328-b7d1f068", "w") in new stack
-- Executing [s@macro-hangupcall:2] NoCDR("SIP/3328-b7d1f068", "") in new stack
-- Executing [s@macro-hangupcall:3] GotoIf("SIP/3328-b7d1f068", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,6)
-- Executing [s@macro-hangupcall:6] GotoIf("SIP/3328-b7d1f068", "1?skipblkvm") in new stack
-- Goto (macro-hangupcall,s,9)
-- Executing [s@macro-hangupcall:9] GotoIf("SIP/3328-b7d1f068", "1?theend") in new stack
-- Goto (macro-hangupcall,s,11)
-- Executing [s@macro-hangupcall:11] Hangup("SIP/3328-b7d1f068", "") in new stack
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/3328-b7d1f068' in macro 'hangupcall'
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/3328-b7d1f068'
Extension Changed 3328 new state Idle for Notify User 3328
== Spawn extension (macro-dial, s, 42) exited non-zero on 'SIP/3330-b7d6d7a0' in macro 'dial'
== Spawn extension (macro-dial, s, 42) exited non-zero on 'SIP/3330-b7d6d7a0'
-- Executing [h@macro-dial:1] Macro("SIP/3330-b7d6d7a0", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] ResetCDR("SIP/3330-b7d6d7a0", "w") in new stack
-- Executing [s@macro-hangupcall:2] NoCDR("SIP/3330-b7d6d7a0", "") in new stack
-- Executing [s@macro-hangupcall:3] GotoIf("SIP/3330-b7d6d7a0", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,6)
-- Executing [s@macro-hangupcall:6] GotoIf("SIP/3330-b7d6d7a0", "0?skipblkvm") in new stack
-- Executing [s@macro-hangupcall:7] NoOp("SIP/3330-b7d6d7a0", "Cleaning Up Block VM Flag: BLKVM/3000/SIP/3330-b7d6d7a0") in new stack
-- Executing [s@macro-hangupcall:8] DBdel("SIP/3330-b7d6d7a0", "BLKVM/3000/SIP/3330-b7d6d7a0") in new stack
-- DBdel: family=BLKVM, key=3000/SIP/3330-b7d6d7a0
Extension Changed 3321 new state Idle for Notify User 3328
-- Executing [s@macro-hangupcall:9] GotoIf("SIP/3330-b7d6d7a0", "1?theend") in new stack
-- Goto (macro-hangupcall,s,11)
-- Executing [s@macro-hangupcall:11] Hangup("SIP/3330-b7d6d7a0", "") in new stack
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/3330-b7d6d7a0' in macro 'hangupcall'
== Spawn extension (macro-hangupcall, s, 11) exited non-zero on 'SIP/3330-b7d6d7a0'

Пояснения к логу.
- с 3330 набрал 3000
- зазвонил 3321 (первый в ринг-группе 3000)
- попробовал перехватить его с 3328
- нифига не вышло, reason code 503

Может как-то более подробный дебаг включить?

Added after 8 minutes:

Попробовал добавить @default как ты рекомендовал.
Перехват группового звонка не заработал, перестал работать перехват прямого звонка на ext

Added after 10 minutes:

http://www.trixbox.org/forums/trixbox-forums/help/call-pickup-and-ringgroups
http://www.trixbox.org/forums/trixbox-forums/help/call-pickup-2
http://www.trixbox.org/forums/trixbox-forums/help/call-pickup-1
Вот тут народ над теми же проблемами голову ломает...
Насколько я понял вооружившись словарями однозначного решения проблемы пока не нашли.
#6

Я беру таймаут до четверга =) В четверг-пятницу попробую собрать на стенде. Если не получится - сделаю патч.

Added after 11 minutes:

PS. Кстати экзамен сдал, осталось двас амых противных - и я аспирант. Буду делать информационную систему для местного ВУЗа (угадайте, на чем?)

_________________
OpenSUSE 10.3 / Asterisk-trunk / Celeron 1100 (512mb) / chan_misdn (HFC)
Linksys PAP2T / SPA941 / SPA3102 / SPA2102
http://igorg.ru
#7

IgorG писал(а):
Я беру таймаут до четверга =) В четверг-пятницу попробую собрать на стенде. Если не получится - сделаю патч.

Ок, ждемс.
А то обидно понимаешь...
Такая удобная и фичастая железка - и при этом совсем небольших денег стоит...
IgorG писал(а):
PS. Кстати экзамен сдал, осталось два самых противных - и я аспирант. Буду делать информационную систему для местного ВУЗа (угадайте, на чем?)

Молодца. А насчет на чем - ну с первого раза даже не догадаться Wink

Added after 27 minutes:

Посидев и подумав некоторое время...
А вот остальные телефоны у которых есть BLF (Aastra, Polycom, Linksys) каким макаром перехватывают звонки?
Кто пробовал / у кого есть в хозяйстве такие железки - можете рассказать?
А то обидно будет городить патч из-за одного грандстрима...
#8

На Cisco 7940/7960 нет спецкнопки pick-up, и мы успешно перехватываем комбинацией, заложеной в features.conf.
#9

Ded писал(а):
На Cisco 7940/7960 нет спецкнопки pick-up, и мы успешно перехватываем комбинацией, заложеной в features.conf.

Про *8 мы в курсе...
Но, согласись, гораздо приятнее ткнуть в моргающую кнопку и сказать "алло" чем поднять трубку, набрать *8вызов.
По принципу - если возможность удобно работать есть то почему бы ее не использовать?

Сей топик - прямое продолжение топика мифический артефакт "системный телефон" Very Happy

Кстати, ты вроде в том топике хвастался что вы собрали на стенде Snom телефоны с BLF.
Можешь посмотреть как у них с перехватом звонка идущего на ринг-группу?
#10

Эх, тягомотно!
Весь стенд в магазине, который хардвар торгует, телепоны тож. Мы тока мониторим издали и отвечаем на звонки, если какие вопросы. Но последнее время не звонят Sad
Сконфигурить группу - не вопрос, но просить продавца пикапить!
И РоЕ свич NetGear ненужный завис, не продаёцца....
У меня вот другой вопос по GXP-2000: как так, красненьким показывается статус на кнопке если внутренний разговр, а если пришел в группу, и один из экстеншнов взял звонок и разговаривает, то его статус не отражается красным? В чем дело?
#11

Ded писал(а):
У меня вот другой вопос по GXP-2000: как так, красненьким показывается статус на кнопке если внутренний разговр, а если пришел в группу, и один из экстеншнов взял звонок и разговаривает, то его статус не отражается красным? В чем дело?
Тут без отладки не обойтись... Надо посмотреть, отправляет ли Asterisk NOTIFY в случае принятия звонка в очереди. Вообще app_queue такая гадость, кто б её переписал заново.

И жаль у меня нет 2000 под рукой, уже вернули его. Есть только линксисы, но без пристяжной консоли.

Вообще *8 это не совсем то что нажатие кнопки... *8 поднимает первый звонок в ринггруппе, а нажатие кнопки поднимает конкретный телефон, но если звонок идет например в очередь (как я понял), то фиг. Я если честно вообще не видел как работает BLF с астериском, надо восполнить этот пробел.

_________________
OpenSUSE 10.3 / Asterisk-trunk / Celeron 1100 (512mb) / chan_misdn (HFC)
Linksys PAP2T / SPA941 / SPA3102 / SPA2102
http://igorg.ru
#12

Ded писал(а):
Эх, тягомотно!
У меня вот другой вопос по GXP-2000: как так, красненьким показывается статус на кнопке если внутренний разговр, а если пришел в группу, и один из экстеншнов взял звонок и разговаривает, то его статус не отражается красным? В чем дело?

Почему не отображается? Отображается вроде... чуть позже окажусь возле телефона - перепроверю.
Глупый вопрос - а ты прописал вручную в конфигах то, что в инструкции прописано? (про NOTIFY)
#13

Нет, не переписал, а там инструкция есть? Не читал-с BigGrin3
#14

Ded писал(а):
Нет, не переписал, а там инструкция есть? Не читал-с BigGrin3

Нуууу блииин.... Smile
У меня как я писал все ext'ы вписываются в 3XXX.
Правим в триксбоксе extensions_custom.conf
Код:
[BLF_group_pickup]
exten => _**3XXX,1,Pickup(${EXTEN:2})
exten => _**3XXX,2,Hangup

[BLF_Group_1]
exten => 3321,hint,SIP/3321
.........
exten => 3331,hint,SIP/3331

В sip_custom.conf
Код:

[3321](+)
subscribecontext=BLF_Group_1
.........
[3331](+)
subscribecontext=BLF_Group_1

Ну вот примерно так...
Это та часть инструкции где про пикап написано.
Еще там много чего про пейджинг и интерком есть, с этим я пока не разбирался.

to IgorG
Возвращаясь к теме перехвата.
А вот тут [BLF_group_pickup] я твой совет упустил применить...
Но судя по логу отрабатывает не эта часть а та что в extensions_additional.conf
#15

Прикупили несколько таких аппаратов в офис.
Где покопать, почему не показывается занятость линий при исходящих звонках? При входящих всё ок.

И про рингтоны: известно, что их там не много. Есть функция Custom ring tone , used if incoming caller ID, но к сожалению там можно повесить только один номер. Пробовал через запятую, точку с запятой - всё равно реагирует только на первый номер. А было бы удобно например занести всех внутренних абонентов на один сигнал, отдельных выбранных на другой и т.д.
#16

Привет всем! Вопрос такой: можно ли разрешить\запретить использование ChanSpy только определённым экстеншенам, а не всем сразу?
Сразу извиняюсь за такой вопрос, просто у меня стоит FreePBX и в нём можно только отключить или включить эту функцию, если можно как-то руками прописать это- подскажите пожалуйста.
#17

поставь пароль на экстеншин и не парься
Код:
exten => 777,4,Authenticate(3248|j)

ps: наверное скоро придется новый раздел сделать - отдельно для всяких триксбоксов и asterisknow гуёв.... потому что кто не юзает гуи - лезут в топик по названию темы и жестоко обламываются.

_________________
Успехов!
#18

anest писал(а):
ps: наверное скоро придется новый раздел сделать - отдельно для всяких триксбоксов и asterisknow гуёв....

Поддерживаю Smile

_________________
Trixbox 2.2.x (Asterisk 1.4.11) / FXO шлюзы (Dynamix, OvisLink, Planet, etc) / разные IP-телефоны (OvisLink, Grandstream, Dynamix, Nokia, Cisco ATA-186, etc)
#19

Как эта штука работает, а то ставится, а как стартануть не вкурю, подскажите дебилу...
#20

Надо установить поддержку MySQL - asterisk_addons, появятся новые модули типа app_mysql, подгрузиь их на ходу или рестартнуть Астериск. Убедиться, что * подключается к MySQL локально.
После этого можно обращаться через вэб интерфейс по ИП адресу.
#22

Не знаю что такое GUI, описанный там.
Мы используем FreePBX.
Если ты всё сам находишь, зачем задавать вопросы на форуме? Сначала задал, потом нашёл ответ? Рациональней - наоборот.
#23

Ded писал(а):
Не знаю что такое GUI, описанный там.

наверняка знаешь и видел Smile
я так понял это гуй который есть в AsteriskNow и который можно отдельно скачать и поставить в любом дистре самому.

http://www.asteriskguru.com/tutorials/asterisk_gui.html

_________________
Успехов!
#24

anest писал(а):
Ded писал(а):
Не знаю что такое GUI, описанный там.

наверняка знаешь и видел Smile
я так понял это гуй который есть в AsteriskNow и который можно отдельно скачать и поставить в любом дистре самому.

http://www.asteriskguru.com/tutorials/asterisk_gui.html

Точно, он и есть это встроенный интерфейс в Asterisk, типа у него свой веб сервер, а что есть FreePBX.
#25

Для того, чтобы asterisk-gui заработала под freebsd необходимо иметь системного пользователя, его прописать в mansger.conf,
поправить http.conf и перезапустиь астериск

Чтобы заработал встроенный в астериск веб –сервер, надо лезть в /usr/local/etc/asterisk/http.conf:
enabled=yes
bindaddr=адрес_сервера_астериска
enablestatic=yes
prefix=asterisk

/usr/local/etc/asterisk/manager.conf:
enabled=yes
webenabled=yes
port=5038
permit=адрес_рабочей_станции_с_которой_заходишь
[manager]
secret
read=…
write=…

на рабочей станции набираешь в браузере:
http://ip_asterisk_server:8088/asterisk/static/config/setup/install.html

если asterisk и asterisk-gui ставились из портов,как принято во freebsd и порты были штатно обновлены и если браузер на рабочей станции настроен-то все заработает-по другому и не может быть Very Happy
#26

Вот эту штуку я и спрашивал как настроить, но уже настроил всем спасибо!!!!!!!