Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒Voice(Asterisk\Cisco)⇒

⇐CISCO
⇐Microsoft
⇐Powershell
⇐Python
⇐SQL\T-SQL
⇐FreeBSD and Nix
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA

Телефония на CCM 4 и маршрутизаторах 28ХХ серии


Дано, небольшой офис, есть две железки 2811 и 2821, которые ведут к провайдерам. CCM 4, который держит собственно инфраструктуру.

2821 ведет по Е1 к местному провайдеру с «халявной Москвой»2811 ведет на несколько SIP провайдеров выбранных из-за дешевизны звонков по направлениям.

Плюс есть ASTERISK, через который проходят звонки в целях записи разговоров сотрудников и отрабатывает голосовое меню для входящих звонков.

Итак, поехали сам ССМ 4:
ccm1

Тут мы создали Partitions, кто из них за что отвечает:
ccm2

incoming — Для входящих звонков
Pt_emer — Для звонков на экстренные номера
Pt_inter — Для звонков на международные
Pt_LD — Для звонков на межгород
Pt_local — Для локальных «на Москву»
Pt_Phones — Для локальных телефонов

Теперь CSS:
ccm3

incoming — Для входящих звонков
Phones — Для локальных телефонов
Phones_local — Для локальных «на Москву»
Ph_loc_LD — Для звонков на межгород
Ph_local_LD_inter — Для звонков на международные

Далее Translation Pattern(исторически создавались для разграничения с пртишанами):
ccm4

49578***** — Для входящих звонков
8.XXXXXXXXXX Pt_LD — Междугородние исходящие
810.[1-9]! Pt_Inter — Международные исходящие

Наши телефончики по умолчанию находятся в партицииPt_Phones и при включении имеют только локальную возможность звонить, мы их добавимCSS_Phones_Local_LD_Inter, для возможности звонить и на межгородмеждународкуМоскву.

Идем настраивать телефон и линию:
1. Находим нужный телефон
ccm5

2. Добавляем CSS для возможности звонить во вне
ccm6

3.Настраиваем линию (кнопка слева в прошлом шаге):
ccm7

Теперь наш телефон готов звонить.

Имеем следующую схему:
Входящие звонки:

Наш номер 49578*****, который передает по Е1 нам провайдер на2821,
(Конфиг 2821, разбираем контроллер Е1mgcpfallback(на случай падения ССМ):
!
controller E1 1/0
pri-group timeslots 1-31 service mgcp
!
!
interface GigabitEthernet0/0.1
encapsulation dot1Q 41
ip address 192.168.43.1 255.255.255.0
!
!
interface Serial1/0:15
bandwidth 2048
no ip address
encapsulation hdlc
isdn switch-type primary-net5
isdn timer T310 10000
isdn incoming-voice voice
isdn bind-l3 ccm-manager
isdn send-alerting
no cdp enable
!
!
voice-port 1/0:15
disc_pi_off
cptone RU
bearer-cap Speech
!

ccm-manager switchback immediate
ccm-manager fallback-mgcp
ccm-manager mgcp
no ccm-manager fax protocol cisco
ccm-manager music-on-hold
ccm-manager config server 192.168.43.2
ccm-manager config
!
mgcp
mgcp call-agent 192.168.43.2 2427 service-type mgcp version 0.1
mgcp dtmf-relay voip codec all mode out-of-band
mgcp rtp unreachable timeout 1000 action notify
mgcp package-capability rtp-package
mgcp package-capability sst-package
mgcp package-capability pre-package
no mgcp package-capability res-package
no mgcp package-capability fxr-package
no mgcp timer receive-rtcp
mgcp sdp simple
mgcp fax rate 9600
mgcp fax t38 inhibit
mgcp rtp payload-type g726r16 static
mgcp bind control source-interface GigabitEthernet0/0
mgcp bind media source-interface GigabitEthernet0/0
!
mgcp profile default
!
!
dial-peer voice 1 pots
tone ringback alert-no-PI
service mgcpapp
destination-pattern [0-9]T
incoming called-number ^78*****$
no digit-strip
direct-inward-dial
port 1/0:15
forward-digits all
!
!
call-manager-fallback
max-conferences 16 gain -6
transfer-system full-consult
user-locale RU
limit-dn 7940 2
timeouts interdigit 5
ip source-address 192.168.43.1 port 2000
max-ephones 52
max-dn 60
alias 1 78807XX to 100 preference 1 cfw 104 timeout 30
alias 2 78807XX to 399 huntstop
moh music-on-hold.au
time-format 24
date-format dd-mm-yy
!
Настройка mgcp мной рассматривалась в другой статье отдельно, еще отметим, что в настройке mgcp-gatewaya`адобаляется префикс «495″ ко входящему номеру «78*****» и уже в формате «49578*****» приходит на ССМ4
ccm9
)
которая пересылает его CCM 4
ССМ 4 преобразует его в «12345″
ccm8
и передает Asterisk для передачи в голосовое меню и дальнейшей маршрутизации:

sip.conf
[ccm]
type=friend
host=192.168.43.2
nat=no
port=5060,5062
transport=udp
context=fromccm
qualify=yes
t38_updtl=yes
dtmfmode=rfc2833
disallow=all
allow=all
insecure=port,invite
cancallforward=yes
canreinvite=yes

extensions.conf
[default]
exten => _X.,1,Hangup()
[fromccm]
;;;;;;;;;;;;;;;;INCOMING;;;;;;;;;;;;;;
exten => 12345,1,Goto(ivrtrickru,${EXTEN},1) ;Все входящие с коллменеджера преобразуются в 12345
exten => 12345,n,Hangup()
[ivrtrickru]
exten => 12345,1,Set(CALLFILENAME=${CALLERID(num)}-${ARG1}-${STRFTIME(${EPOCH},,%d%m%Y-%H%M%S)}-${EXTEN})
exten => 12345,n,Set(DIRNAME=${STRFTIME(${EPOCH},,%d%m%Y)})
exten => 12345,n,Answer()
exten => 12345,n,Playback(/var/lib/asterisk/sounds/ru/intro) ;Музло…
exten => 12345,n,Background(/var/lib/asterisk/sounds/ru/Net_main_menu_new) ;Здрасьте….
exten => 12345,n(dial),Background(/var/lib/asterisk/sounds/ru/dial-exten-tone) ;Наберите добавочный…. метка dial
exten => 12345,n,WaitExten(8)
exten => 0,1,Goto(ivrtrickru,t,1) ;Переход на секретарей
exten => 0,n,Hangup()
exten => _1XX,1,GotoIf($[$[${EXTEN}=100] || $[${EXTEN}=104] || $[${EXTEN}=111] || $[${EXTEN}=140] || $[${EXTEN}=132] || $[${EXTEN}=133] || $[${EXTEN}=134] || $[${EXTEN}=113] || $[${EXTEN}=115] || $[${EXTEN}=117] || $[${EXTEN}=118] || $[${EXTEN}=120] || $[${EXTEN}=121] || $[${EXTEN}=122] || $[${EXTEN}=123] || $[${EXTEN}=124] || $[${EXTEN}=125] || $[${EXTEN}=126] || $[${EXTEN}=127] || $[${EXTEN}=128] || $[${EXTEN}=129] || $[${EXTEN}=130] || $[${EXTEN}=131] || $[${EXTEN}=135] || $[${EXTEN}=136] || $[${EXTEN}=137] || $[${EXTEN}=138] || $[${EXTEN}=139] || $[${EXTEN}=142] || $[${EXTEN}=144] || $[${EXTEN}=145] || $[${EXTEN}=146] || $[${EXTEN}=150] || $[${EXTEN}=152] || $[${EXTEN}=153] || $[${EXTEN}=162] || $[${EXTEN}=169]]?:invalid)
exten => _1XX,n,System(mkdir -p /records_Net/incoming/${DIRNAME})
exten => _1XX,n,MixMonitor(/records_Net/incoming/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _1XX,n,Playback(/var/lib/asterisk/sounds/ru/ozhidajte-soedinenija)
exten => _1XX,n,SayNumber(${EXTEN})
exten => _1XX,n,Dial(SIP/ccm/${EXTEN},30)
exten => _1XX,n,GotoIf($["${DIALSTATUS}"="BUSY"]?busy) ;если занято, идем на Метку busy
exten => _1XX,n,Playback(/var/lib/asterisk/sounds/ru/number-ne-otvechaet)
exten => _1XX,n,Goto(ivrtrickru,12345,dial) ;Возвращение на метку dial в случае не ответа
exten => _1XX,n(busy),System(mkdir -p /records_Net/incoming/${DIRNAME}) ;Метка busy
exten => _1XX,n,MixMonitor(/records_Net/incoming/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _1XX,n,Playback(/var/lib/asterisk/sounds/ru/number-zanjat)
exten => _1XX,n,Dial(SIP/ccm/100)
exten => _1XX,n(invalid),Playback(/var/lib/asterisk/sounds/ru/invalid) ;Метка инвалид в случае если доб номера не существует
exten => _1XX,n,Goto(ivrtrickru,12345,dial)
exten => _1XX,n,Hangup()
exten => 3,1,Playback(/var/lib/asterisk/sounds/ru/ozhidajte-soedinenija)
exten => 3,n,Dial(SIP/ccm/399) ;Факс
exten => 3,n,GotoIf($["${DAILSTATUS}"="BUSY"]?busy)
exten => 3,n,Hangup()
exten => t,1,System(mkdir -p /records_Net/incoming/${DIRNAME})
exten => t,n,MixMonitor(/records_Net/incoming/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => t,n,Playback(/var/lib/asterisk/sounds/ru/queue-callswaiting)
exten => t,n,Dial(SIP/ccm/100)
exten => t,n,Hangup()
exten => i,1,Playback(/var/lib/asterisk/sounds/ru/invalid)
exten => i,n,Goto(ivrtrickru,12345,dial)
exten => i,n,Hangup()

;;;;;;;;;;;;;;automation;;;;;;;;;;;
exten => _X!,n,GotoIf($[$[${CALLERID(num)} = 121] || $[${CALLERID(num)} = 162]]?automation,${CALLED},1)

Исходящие звонки:
(Тут сразу оговорка ССМ и Астериск при обмене звонками «на Москву» обмениваются префиксами «555″ и «666″)

Asterisk:
sip.conf
[c2811]
type=peer
host=192.168.43.3
context=frompstn
qualify=yes
t38_updtl=yes
dtmfmode=rfc2833
disallow=all
allow=g729
nat=no
transport=udp
insecure=port,invite
cancallforward=yes
canreinvite=yes

extensions.conf
[local]
exten => _1XX,1,NoOp()
exten => _1XX,n,Dial(SIP/ccm/${EXTEN},30)
exten => _1xx,n,Hangup()

[automation]
;;;;;;;;;;;;;;;Emefgency calls (through Comstar);;;;;;;;;;;;;;;;;;
exten => _0[1-49],1,System(mkdir -p /records_Net/automation_department/outgoing/${DIRNAME})
exten => _0[1-49],n,MixMonitor(/records_Net/automation_department/outgoing/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _0[1-49],n,Dial(SIP/ccm/555${EXTEN})
exten => _0[1-49],n,Hangup()

;;;;;;;;;;;Calls to Moscow;;;;;;;;;;;;;;;;;
exten => _849[589]!,1,System(mkdir -p /records_Net/automation_department/outgoing/${DIRNAME})
exten => _849[589]!,n,MixMonitor(/records_Net/automation_department/outgoing/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _849[589]!,n,Dial(SIP/ccm/555${EXTEN})
exten => _849[589]!,n,Hangup()

;;;;Calls to long Moscow’ in (495/499/498) area and other numbers begins from 8 (through Comstar);;;;
exten => _666!,1,System(mkdir -p /records_Net/automation_department/outgoing/${DIRNAME})
exten => _666!,n,MixMonitor(/records_Net/automation_department/outgoing/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _666!,n,Dial(SIP/ccm/555${EXTEN:3})
exten => _666!,n,Hangup()

;;;;;;;;;;;Calls to mobile, national and international numbers (through Nauka-net);;;;;;;;;;
exten => _X!,1,System(mkdir -p /records_Net/automation_department/outgoing/${DIRNAME})
exten => _X!,n,MixMonitor(/records_Net/automation_department/outgoing/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _X!,n,Dial(SIP/c2811/${EXTEN})
exten => _X!,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy)
exten => _X!,n(busy),Playback(/var/lib/asterisk/sounds/ru/busy-tone)
exten => _X!,n,Hangup()

В нашем случае разберем несколько примеров Исходящих звонков(конфиг с исходящими звонками проходящими через Астериск выше, конфиг 2821 «на Москву» выше, тут конфиг только ССМ 4):

Для начала немного логики:

Звонок попадая на ССМ проходит через Translation Pattern -> Совпадаетне совпадает -> Если совпал, то идет в CSSЕсли нет, идет в Route Pattern -> Точка маршрутизации

CSS — объединяет Partitions
Partition может быть привязан к времени

Примеры исходящих вызовов:

Если наш сотрудник набирает из офиса:
910-111-22-33 или 812-333-22-11 («Мобила» без «8″ или «Питер» без «8″)


1.
Телефон -> ССМ
Добавляется префикс «7″ из Роут-паттерна:
ccm10

2.
ССМ -> Астериск
Совпадает с секцией:
[Automation]
;;;;;;;;;;;Calls to mobile, national and international numbers (through Nauka-net);;;;;;;;;;
exten => _X!,1,System(mkdir -p /records_Net/automation_department/outgoing/${DIRNAME})
exten => _X!,n,MixMonitor(/records_Net/automation_department/outgoing/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _X!,n,Dial(SIP/c2811/${EXTEN})
exten => _X!,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy)
exten => _X!,n(busy),Playback(/var/lib/asterisk/sounds/ru/busy-tone)
exten => _X!,n,Hangup()

3.
Астериск -> 2811(Работает во вне по н323 протоколу)
Мобильные уходят на провайдера «1″ и провайдера «2″
!
voice service voip
allow-connections sip to h323
fax protocol pass-through g711ulaw
h323
no call service stop
sip
bind control source-interface FastEthernet0/0.1
bind media source-interface FastEthernet0/0.1
no call service stop
!
voice class codec 1
codec preference 1 g729r8 bytes 10
codec preference 2 g729br8 bytes 10
codec preference 3 g723r63
codec preference 4 g723ar63
codec preference 5 g723r53
codec preference 6 g723ar53
!
!
interface FastEthernet0/0.1
encapsulation dot1Q 41
ip address 192.168.43.3 255.255.255.0
!
dial-peer voice 39 voip
description ==1 Russia Piter==
huntstop
service session
destination-pattern ^812*******$
voice-class codec 1
session target ipv4:111.222.333.444
dtmf-relay rtp-nte
fax-relay ecm disable
fax rate 9600
fax protocol pass-through g711ulaw
clid network-number 749578*****
no vad
!

clid network-number — АОН
session target ipv4: — Адрес SIP провайдера

show dialplan number 8123332211 команда для проверки совпадения номера с диалпиром на 2811

В итоге получилась схема:
исх

Если наш сотрудник набирает из офиса:
8-906-111-22-33 или 8-3822-11-22-33 («Мобила» с «8″ или «Томск» с «8″)

Вызов с телефона приходит на ССМ, обрабатываетсяTranslation Pattern «[8.XXXXXXXXXX]«, который отрезает «8″ и заменяет на «7″,
TP8-7
после Route Pattern
RP8-7
отправляет звоночек в Астериск, где он совпадает с шаблоном«_X!» и уходит 2811, где уже в зависимости от диалплана уходит к нужному оператору.

Билайн и Томск с 8

Вариант «На Москву» через mgcp-gateway:

Три самых частых варианта набора пользователями городских номеров на Москву:

1. 111-22-33 Route Pattern [1-79]XXXXXX Добавляет префикс «8495″
m1

2. 8-495-111-22-33 Route Pattern 849[589][1-79]XXXXXX Пропускает без изменений
m2

3. 495-111-22-33 Route Pattern 49[589][1-79]XXXXXX Добавляет «8″
m3

В астериск в секции видим:
[automation]
;;;;;;;;;;;Calls to Moscow;;;;;;;;;;;;;;;;;
exten => _849[589]!,1,System(mkdir -p /records_Net/automation_department/outgoing/${DIRNAME})
exten => _849[589]!,n,MixMonitor(/records_Net/automation_department/outgoing/${DIRNAME}/${CALLFILENAME}.wav,b)
exten => _849[589]!,n,Dial(SIP/ccm/555${EXTEN})
exten => _849[589]!,n,Hangup()

Route Pattern «555!» на ССМ
m4

Gateway на CCM отрезающий «555 приходящие от Астериска»
m5

Конфиг 2821 с mgcp был рассмотрен выше в статье

Телефон -> CCM(Сверяетс с Route Pattern) -> Asterisk(Как видно из конфига добавляет префикс «555″ и начинает запись звонка) -> CCM(Сверяем с Route Pattern «555!») -> 2821(Вырезает 555 в секции Gateway CCM) -> Free Moscow Provider

Получилось следующее:
MSKKOM

Входящая телефония:
Провайдер пересылает на 2821 номер из семи цифр без кода и «восьмерки», 2821 пересылает номер на ССМ, который добавляет префикс «495″ и в Translation Pattern превращает номер в «12345″Rote Pattern отправляет «12345″ на Астериск, который направляет звонок на голосовое меню.

mp1

mp2

mp3

Конфиг Астериска был рассмотрен в статье выше.

В итоге получаем схему:
mp4

Т.К. Городские номера идут через «халявную Москву», а «Межгород» и «Международка» с «мобилами» идут через ip провайдеров ввиду дешевизны звонков по направлениям, создается проблема. В случае падения провайдера нужен «аварийный» вариант выхода по эти направлениям.

Организуем «аварийную» связь через «9″:

Например офисмэн набирает вместо «8-903-111-22-33″ при отвале оператора номер «9-8-903-111-22-33″Route Pattern [9.8XXXXXXXXXX], опция Predot вырезает «9″, и добавляет«666″, отправляем на Asterisk, где сопоставляется номер с шаблоном «_666!», вырезаем «666″ и заменяем на «555″, отправляем на ССМ, который вырезает «555″ и отправляет на2821 и далее провайдера «халявной Москвы».

pp1

Схема с «9″:
pp2


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru