Еще одна рабочая неделя, в этот раз шестидневная и еще один забавный аспект настройки PBX.
Хочется сказать админам нашего заведения спасибо за интернет, такой проводной интернет у меня впервые с 2004 года, когда у меня была безлимитка 4на4:)
Паркинг – парковка вызова, мы можем взять трубу в одном месте, поговорить, запарковать и перейти в другое и продолжить разговор.
Есть и пейджинг(для обычного офиса не очень нужная вещь, заменяет громкоговоритель ну или стук в стену типа “Галя тоби дзвонять”) как по мне проще перекинуть вызов сразу на номер Гали:))
За эти функции отвечает файл features.conf.
Многие функции работают с помощью DTMF и только из под Dial или Queue, опции K, k, H, h, T, t, W, w, X, x.
Сам телефон так же может делать трансфер в обход Asterisk.
Рассмотрим опции это файла подробнее:
[general]
Опция | Значение | Примечание |
parkext | 700 | Номер для парковки вызова |
parkpos | 701-720 | Номер куда будут запаркованы вызовы. Забрать с парковки можно, позвонив по соответствующему номеру |
context | parkedcalls | Контекст в котором создаются парковочные лоты и находиться номер для парковки |
parkinghints | no | Вкл/Выкл автосоздание хинтов для парковочного места, телефоны могут подписаться на состояние экстеншена, на парковке. |
parkingtime | 45 | Время ожидания на парковке. |
comebacktoorigin | yes | По истечению parkingtime отправляет вызов откуда его парковали |
courtesytone | beep | Сигнал который звучит припаркованному при снятии его с парковки |
parkedplay | caller | Кому играть courtesytone когда вызов снимается с парковки. Опции: callee, caller, both или no(по умолчанию). |
parkedcalltransfers | caller | Кто может сделать трансфер припаркованного вызова с помощью DTMF. Опции: callee, caller, both или no(по умолчанию). |
parkedcallreparking | caller | Кто может перепарковать, припаркованный вызов с помощью DTMF. Опции: callee, caller, both или no(по умолчанию). |
parkedcallhangup | caller | Кто может убить, припаркованный вызов с помощью DTMF. Опции: callee, caller, both или no(по умолчанию). |
parkedcallrecording | caller | Кто может инициировать запись, с помощью DTMF. Опции: callee, caller, both или no(по умолчанию). |
parkeddynamic | yes | Позволяет создавать динамические парковочные слоты в диалплане. Должны быть установлены переменные канала PARKINGDYNAMIC, PARKINGDYNCONTEXT, PARKINGDYNPOS |
adsipark | yes | Передает ADSI инфо о припаркованном вызове тому кто припарковал |
findslot | next | логика выбора парковочного слота |
parkedmusicclass | default | Класс музыки ожидания для припаркованного, класс установленный с помощью функции диалплана CHANNEL(musicclass) имеет больший приоритет |
transferdigittimeout | 3 | К-во секунд ожидания каждой цифры от звонящего при переводе(трансфере) |
xfersound | beep | Звук сигнализирующий о успешном завершении трансфера |
xferfailsound | beeperr | Звук сигнализирующий о не успешной попытке трансфера |
pickupexten | *8 | Номер для принятия звонка |
pickupsound | beep | Сигнал о успешном снятии звонка с парковки |
pickupfailsound | beeperr | Сигнал о не успешном снятии звонка с парковки |
featuredigittimeout | 1000 | Таймаут в мс, между нажатиями клавиш, при наборе features(какой то фишки типа *8) во время bridged(через Астериск) вызова с помощью DTMF |
atxfernoanswertimeout | 15 | Таймаут ожидания ответа при attended transfer(трансфере при котором вы сначала говорите с тем кому передаете |
atxferdropcall | no | Поведение attended transfer, когда передающий положил трубку до завершения передачи. По умолчанию no, и будет попытка перезвонить передающему. |
atxferloopdelay | 10 | Время между попытками обратного вызова если atxferdropcall=no. |
atxfercallbackretries | 2 | К-во попыток обратного звонка если atxferdropcall=no. |
Раздел
[featuremap]
Опция | Значение | Примечание | Dial()/Queue() Флаги |
blindxfer | #1 | Слепой трансфер | T, t |
disconnect | *0 | Бросить трубку | H, h |
automon | *1 | Начать/закончить запись разговора с помощью Monitor() | W, w |
atxfer | *2 | АвтоТрансфер | T, t |
parkcall | #72 | Парковка вызова | K, k |
automixmon | *3 | Начать/закончить запись разговора с помощью MixMonitor() | X, x |
Раздел
[applicationmap]
Позволяет привязать DTMF код к приложению диалплана, Звонящий на время выполнения приложения становится на ожидании
Синтаксис:
=> , [/ ], ([ ])[,MOH_Class]
1. Назначаем имя, сможем использовать в диалплане через переменную DYNAMIC_FEATURES.
2. Определяем DTMF код рекомендуется минимум 2 символа:)
3. Какой канал может использовать и какой канал может активировать(по умолчанию оба канала могут использовать/активировать “фишку”)
4. Указываем приложение и аргументы которые будут связаны с DTMF кодом.
5. Указываем класс music on hold (MOH), если не задать то будет тишина
agi_test => *6,self/callee,AGI(agi-test.agi),default
Как только начал выполняться код стороннего скрипта, мы больше не можем вызывать приложения которые переключают выполнение диалплана как Goto(), Macro(), Background(), итд.
Для того чтобы эта “штука” стала доступна из диалплана, ее нужно подключить установить значение DYNAMIC_FEATURES перед вызовом Dial.
exten => 101,n,Set(__DYNAMIC_FEATURES=agi_test) exten => 101,n,Dial(SIP/0002)
Если хотим подключить более одной специальной возможности, то при обьявлении следует их указывать через #
Set(__DYNAMIC_FEATURES=agi_test#my_other_map)
Переменная канала ассоциируется с каналом и обычно не наследуется, но это можно исправить, при задании переменной нужно использовать
_ – разрешает один трансфер значения переменной
__ – трансфер переменной на протяжении всей жизни канала
Читать значение переданной переменной без нижних подчеркиваний
Примеры:
;одноразовая передача exten => example,1,Set(_MyVariable=thisValue) ;передача на протяжении жизни канала exten => example,1,Set(__MyVariable=thisValue) Для чтения значения не использовать нижние подчеркивания: exten => example,1,Verbose(1,Value of MyVariable is: ${MyVariable})
Также можно группировать различные функции в группы и подключать их целыми группами
[shifteight] unpauseMonitor => *1 ; custom key mapping pauseMonitor => *2 ; custom key mapping agi_test => ; no custom key mapping
Вызов в диалплане
; использовать __ для того чтобы обе стороны вызова получили эти функции Set(__DYNAMIC_FEATURES=shifteight)
О пейджинге я свое мнение высказал в начале)
Работает пейджинг и через SIP,DAHDI,Multicast.
Вызывается с помощью Page(), есть всякие вкусные опции
Пример:
[global] MULTICAST=MulticastRTP/linksys/239.0.0.1:1234 ;MULTICAST=MulticastRTP/linksys/239.0.0.1:1234/239.0.0.1:6061 ; для SPA (Linksys/Cisco) BOGEN=SIP/777 ; PAGELIST=${MULTICAST}&${BOGEN} ; All of these variable names are arbitrary. [page_context] exten => *724,1,Page(${PAGELIST},i,120)
Если по честному, то я пользовался паркингом и пейджингом раза 2 в жизни, особо не пригодилось)