Ситуация:
- есть триксбокс (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'ов и не раздаются несколько звонков одновременно...
На этом идеи закончились, решил просить помощь клуба
Последний раз редактировалось: SolarW (Вт Сен 18, 2007 9:51 am)
Когда вызывается **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
| 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'а?
Только вот у меня появились сомнения будет ли описанное работать, может получиться что-то совсем неожиданное
Завтра сдам экзамен и если будут силы, то подумаю что можно сделать, скорее всего самому придется тоже решать аналогичную задачу.
_________________
OpenSUSE 10.3 / Asterisk-trunk / Celeron 1100 (512mb) / chan_misdn (HFC)
Linksys PAP2T / SPA941 / SPA3102 / SPA2102
http://igorg.ru
который
| Цитата: |
| ; 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
Вот тут народ над теми же проблемами голову ломает...
Насколько я понял вооружившись словарями однозначного решения проблемы пока не нашли.
Added after 11 minutes:
PS. Кстати экзамен сдал, осталось двас амых противных - и я аспирант. Буду делать информационную систему для местного ВУЗа (угадайте, на чем?)
_________________
OpenSUSE 10.3 / Asterisk-trunk / Celeron 1100 (512mb) / chan_misdn (HFC)
Linksys PAP2T / SPA941 / SPA3102 / SPA2102
http://igorg.ru
| IgorG писал(а): |
| Я беру таймаут до четверга =) В четверг-пятницу попробую собрать на стенде. Если не получится - сделаю патч. |
Ок, ждемс.
А то обидно понимаешь...
Такая удобная и фичастая железка - и при этом совсем небольших денег стоит...
| IgorG писал(а): |
| PS. Кстати экзамен сдал, осталось два самых противных - и я аспирант. Буду делать информационную систему для местного ВУЗа (угадайте, на чем?) |
Молодца. А насчет на чем - ну с первого раза даже не догадаться
Added after 27 minutes:
Посидев и подумав некоторое время...
А вот остальные телефоны у которых есть BLF (Aastra, Polycom, Linksys) каким макаром перехватывают звонки?
Кто пробовал / у кого есть в хозяйстве такие железки - можете рассказать?
А то обидно будет городить патч из-за одного грандстрима...
| Ded писал(а): |
| На Cisco 7940/7960 нет спецкнопки pick-up, и мы успешно перехватываем комбинацией, заложеной в features.conf. |
Про *8 мы в курсе...
Но, согласись, гораздо приятнее ткнуть в моргающую кнопку и сказать "алло" чем поднять трубку, набрать *8вызов.
По принципу - если возможность удобно работать есть то почему бы ее не использовать?
Сей топик - прямое продолжение топика мифический артефакт "системный телефон"
Кстати, ты вроде в том топике хвастался что вы собрали на стенде Snom телефоны с BLF.
Можешь посмотреть как у них с перехватом звонка идущего на ринг-группу?
Весь стенд в магазине, который хардвар торгует, телепоны тож. Мы тока мониторим издали и отвечаем на звонки, если какие вопросы. Но последнее время не звонят
Сконфигурить группу - не вопрос, но просить продавца пикапить!
И РоЕ свич NetGear ненужный завис, не продаёцца....
У меня вот другой вопос по GXP-2000: как так, красненьким показывается статус на кнопке если внутренний разговр, а если пришел в группу, и один из экстеншнов взял звонок и разговаривает, то его статус не отражается красным? В чем дело?
| Ded писал(а): |
| У меня вот другой вопос по GXP-2000: как так, красненьким показывается статус на кнопке если внутренний разговр, а если пришел в группу, и один из экстеншнов взял звонок и разговаривает, то его статус не отражается красным? В чем дело? |
И жаль у меня нет 2000 под рукой, уже вернули его. Есть только линксисы, но без пристяжной консоли.
Вообще *8 это не совсем то что нажатие кнопки... *8 поднимает первый звонок в ринггруппе, а нажатие кнопки поднимает конкретный телефон, но если звонок идет например в очередь (как я понял), то фиг. Я если честно вообще не видел как работает BLF с астериском, надо восполнить этот пробел.
_________________
OpenSUSE 10.3 / Asterisk-trunk / Celeron 1100 (512mb) / chan_misdn (HFC)
Linksys PAP2T / SPA941 / SPA3102 / SPA2102
http://igorg.ru
| Ded писал(а): |
| Эх, тягомотно! У меня вот другой вопос по GXP-2000: как так, красненьким показывается статус на кнопке если внутренний разговр, а если пришел в группу, и один из экстеншнов взял звонок и разговаривает, то его статус не отражается красным? В чем дело? |
Почему не отображается? Отображается вроде... чуть позже окажусь возле телефона - перепроверю.
Глупый вопрос - а ты прописал вручную в конфигах то, что в инструкции прописано? (про NOTIFY)
| Ded писал(а): |
Нет, не переписал, а там инструкция есть? Не читал-с ![]() |
Нуууу блииин....
У меня как я писал все 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
Где покопать, почему не показывается занятость линий при исходящих звонках? При входящих всё ок.
И про рингтоны: известно, что их там не много. Есть функция Custom ring tone , used if incoming caller ID, но к сожалению там можно повесить только один номер. Пробовал через запятую, точку с запятой - всё равно реагирует только на первый номер. А было бы удобно например занести всех внутренних абонентов на один сигнал, отдельных выбранных на другой и т.д.
Сразу извиняюсь за такой вопрос, просто у меня стоит FreePBX и в нём можно только отключить или включить эту функцию, если можно как-то руками прописать это- подскажите пожалуйста.
| Код: |
| exten => 777,4,Authenticate(3248|j) |
ps: наверное скоро придется новый раздел сделать - отдельно для всяких триксбоксов и asterisknow гуёв.... потому что кто не юзает гуи - лезут в топик по названию темы и жестоко обламываются.
_________________
Успехов!
| anest писал(а): |
| ps: наверное скоро придется новый раздел сделать - отдельно для всяких триксбоксов и asterisknow гуёв.... |
Поддерживаю
_________________
Trixbox 2.2.x (Asterisk 1.4.11) / FXO шлюзы (Dynamix, OvisLink, Planet, etc) / разные IP-телефоны (OvisLink, Grandstream, Dynamix, Nokia, Cisco ATA-186, etc)
После этого можно обращаться через вэб интерфейс по ИП адресу.
http://spiralbound.net/2007/06/20/quick-start-guide-for-asterisk/
Мы используем FreePBX.
Если ты всё сам находишь, зачем задавать вопросы на форуме? Сначала задал, потом нашёл ответ? Рациональней - наоборот.
| Ded писал(а): |
| Не знаю что такое GUI, описанный там. |
наверняка знаешь и видел
я так понял это гуй который есть в AsteriskNow и который можно отдельно скачать и поставить в любом дистре самому.
http://www.asteriskguru.com/tutorials/asterisk_gui.html
_________________
Успехов!
| anest писал(а): | ||
| Ded писал(а): |
| Не знаю что такое GUI, описанный там. |
наверняка знаешь и видел
я так понял это гуй который есть в AsteriskNow и который можно отдельно скачать и поставить в любом дистре самому.
http://www.asteriskguru.com/tutorials/asterisk_gui.html
Точно, он и есть это встроенный интерфейс в Asterisk, типа у него свой веб сервер, а что есть FreePBX.
поправить 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 и порты были штатно обновлены и если браузер на рабочей станции настроен-то все заработает-по другому и не может быть