/ #linux 

IP-телефонія на базі Asterisk. Частина 6.1: Додаткові функції Asterisk. Паркування дзвінка.

Цикл статей по розгортанню IP-телефонії на базі Asterisk. Фактично це моя проектна робота на отримання відповідного сертифікату одного з навчальних центрів. Робота була захищена, сертифікат отриманий, все написане тестувалось і є повтінстю робочою реалізацією. Інформація в статті і версії програмного забезбечення актуальні на 2017 рік.

6. Додаткові функції Asterisk.

6.1 Паркування дзвінка.

Паркування виклику - це перенаправлення дзвінка абонента в спеціальний слот. Кожен слот має свій номер. Якщо перейти на інший телефон та набрати відповідний номер слота, то можна продовжити розмову з абонентом. В процесі очікування абонент ставитися на утримання і прослуховує музику.

Додаємо можливість паркувати дзвінки. Використаємо номер за замовчуванням - 700, тобто, якщо в процесі розмови набрати # 700, то почуємо номер слоту, який потім треба буде набрати з іншого телефоного апарату для з'єднання з “запаркованим” абонентом.

[manager]
include => call-local-manager
include => call-local
include => call-out-world
include => parkedcalls
 
[sales]
include => call-local-manager
include => call-local
include => call-out-ua
include => parkedcalls
 
[buyings]
include => call-local-manager
include => call-local
include => call-out-ua
include => parkedcalls
 
[warehouse]
include => call-local-manager
include => call-local
include => parkedcalls
 
[it]
include => call-local
include => parkedcalls

[reception]
include => call-local-manager
include => call-local
include => call-out-ua
include => parkedcalls

Для користувачів слід дозволити функцію переводу виклику, щоб вони могли скористатись функцією паркування, відповідно необхідно додати у виклики Dial() параметр t:

;внутрішні лінії за виключенням manager
[call-local]
exten => _[2-6],1,Set(RECORDING=0)
exten => _[2-6],n,Macro(recording,${CALLERID(num)},${EXTEN})
exten => _[2-6]XX,n,Dial(SIP/${EXTEN},20,t)
exten => _[2-6],n,Hangup()

Перевіряємо паркування викликів:

asterisk-centos*CLI> 
  == Using SIP RTP CoS mark 5
    -- Executing [740648@call-in:1] Set("SIP/zadarma-0000001c", "RECORDING=1") in new stack
    -- Executing [740648@call-in:2] Goto("SIP/zadarma-0000001c", "ivr-mainmenu,s,1") in new stack
    -- Goto (ivr-mainmenu,s,1)
    -- Executing [s@ivr-mainmenu:1] Answer("SIP/zadarma-0000001c", "") in new stack
    -- Executing [s@ivr-mainmenu:2] BackGround("SIP/zadarma-0000001c", "ivr/welcome") in new stack
    -- <SIP/zadarma-0000001c> Playing 'ivr/welcome.slin' (language 'ru')
       > 0x8da8a40 -- Probation passed - setting RTP source address to 185.45.152.162:19710
    -- Executing [s@ivr-mainmenu:3] GotoIfTime("SIP/zadarma-0000001c", "19:00-9:00|mon-fri|*|*?ivr-holiday,s,1") in new stack
    -- Executing [s@ivr-mainmenu:4] GotoIfTime("SIP/zadarma-0000001c", "*|sat-sun|*|*?ivr-holiday,s,1") in new stack
    -- Executing [s@ivr-mainmenu:5] BackGround("SIP/zadarma-0000001c", "ivr/mainmenu") in new stack
    -- <SIP/zadarma-0000001c> Playing 'ivr/mainmenu.slin' (language 'ru')
    -- Executing [2@ivr-mainmenu:1] Goto("SIP/zadarma-0000001c", "ivr-buying-1,s,1") in new stack
    -- Goto (ivr-buying-1,s,1)
    -- Executing [s@ivr-buying-1:1] BackGround("SIP/zadarma-0000001c", "ivr/buyingmenu-1") in new stack
    -- <SIP/zadarma-0000001c> Playing 'ivr/buyingmenu-1.slin' (language 'ru')
    -- Executing [1@ivr-buying-1:1] Goto("SIP/zadarma-0000001c", "ivr-buying-2,s,1") in new stack
    -- Goto (ivr-buying-2,s,1)
    -- Executing [s@ivr-buying-2:1] BackGround("SIP/zadarma-0000001c", "ivr/buyingmenu-2") in new stack
    -- <SIP/zadarma-0000001c> Playing 'ivr/buyingmenu-2.slin' (language 'ru')
    -- Executing [301@ivr-buying-2:1] Dial("SIP/zadarma-0000001c", "SIP/301,20,t") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/301
    -- SIP/301-0000001d is ringing
    -- SIP/301-0000001d answered SIP/zadarma-0000001c
    -- Channel SIP/301-0000001d joined 'simple_bridge' basic-bridge <27b52abb-6f09-4e56-8a80-8ca3202ff2a4>
       > 0x919b4f8 -- Probation passed - setting RTP source address to 192.168.1.100:7078
    -- Channel SIP/zadarma-0000001c joined 'simple_bridge' basic-bridge <27b52abb-6f09-4e56-8a80-8ca3202ff2a4>
    -- <SIP/301-0000001d> Playing 'pbx-transfer.slin' (language 'ru')
    -- Started music on hold, class 'default', on channel 'SIP/zadarma-0000001c'
    -- Stopped music on hold on SIP/zadarma-0000001c
    -- Channel SIP/zadarma-0000001c left 'simple_bridge' basic-bridge <27b52abb-6f09-4e56-8a80-8ca3202ff2a4>
    -- Parking 'SIP/zadarma-0000001c' in 'default' at space 701
    -- Channel SIP/zadarma-0000001c joined 'holding_bridge' parking-bridge <e26ea0d2-a288-40da-92e2-e45e8bf1dc5e>
    -- Started music on hold, class 'default', on channel 'SIP/zadarma-0000001c'
    -- <SIP/301-0000001d> Playing 'digits/7.slin' (language 'ru')
    -- <SIP/301-0000001d> Playing 'digits/0.slin' (language 'ru')
    -- <SIP/301-0000001d> Playing 'digits/1.slin' (language 'ru')
    -- Channel SIP/301-0000001d left 'simple_bridge' basic-bridge <27b52abb-6f09-4e56-8a80-8ca3202ff2a4>
    -- Executing [701@manager:1] ParkedCall("SIP/102-0000001e", "default,701") in new stack
    -- Channel SIP/zadarma-0000001c left 'holding_bridge' parking-bridge <e26ea0d2-a288-40da-92e2-e45e8bf1dc5e>
    -- Stopped music on hold on SIP/zadarma-0000001c
    -- Channel SIP/zadarma-0000001c joined 'simple_bridge' basic-bridge <8787ac45-0b13-4760-b15f-7ad2d5f57f19>
    -- Channel SIP/102-0000001e joined 'simple_bridge' basic-bridge <8787ac45-0b13-4760-b15f-7ad2d5f57f19>
       > Bridge 8787ac45-0b13-4760-b15f-7ad2d5f57f19: switching from simple_bridge technology to native_rtp
       > Locally RTP bridged 'SIP/102-0000001e' and 'SIP/zadarma-0000001c' in stack
       > Locally RTP bridged 'SIP/102-0000001e' and 'SIP/zadarma-0000001c' in stack
       > 0x919b4f8 -- Probation passed - setting RTP source address to 192.168.1.103:7078
    -- Channel SIP/102-0000001e left 'native_rtp' basic-bridge <8787ac45-0b13-4760-b15f-7ad2d5f57f19>
  == Spawn extension (manager, 701, 1) exited non-zero on 'SIP/102-0000001e'
    -- Channel SIP/zadarma-0000001c left 'native_rtp' basic-bridge <8787ac45-0b13-4760-b15f-7ad2d5f57f19>
  == Spawn extension (ivr-buying-2, 301, 1) exited non-zero on 'SIP/zadarma-0000001c'

В наступній статті поговоримо про переадресацію дзвінків в Asterisk.

Author

Олександр Бобилєв

Залишаю собі право використовувати ненормативну (але інформативну) лексику там, де звичайні слова втрачають сенс і не відображають всієї палітри почуттів, від споглядання навколишньої дійсності.