Cisco SPA8800
Подключение аналоговой АТС к Asterisk при помощи шлюза SPA8800
Phone1…Phone4 - 4 FXS порта
Line1…Line4 - 4 FXO порта
Подключите порты с сигналом (FXS) к портам внешних линий АТС (СО)
Подключите порты без сигнала (FXO) к портам внутренних линий АТС (SLT)
Asterisk ATC внутренняя нумерация 3XX 1XX 4XX 2XX SPA8800 ATC логика подключения FXS CO Phone1 <--------------------------- CO(1) Phone2 <--------------------------- CO(2) Phone3 <--------------------------- CO(3) Phone4 <--------------------------- CO(4) FXO SLT Line1 ---------------------------> SLT(123) Line2 ---------------------------> SLT(124) Line3 ---------------------------> SLT(125) Line4 ---------------------------> SLT(126)
Таким образом абоненты АТС смогут набирать абонентов Asterisk и номера через внешние линии подключенные к Asterisk.
Абоненты Asterisk смогут набирать абонентов АТС и номера через внешние линии подключенные к АТС.
Конфигурация FXS порта (Phone)
FXS порты шлюза подключаются к внешним линиям АТС и служат для набора номеров абонентами АТС в сторону Asterisk.
Настройки для FXS со стороны Asterisk
Если используется FreePBX, создайте екстеншен <fs large>Application > Extensions > Add Extension > Generic CHAN SIP Device</fs>
И задайте:
User Extension,
Display Name
и
Password,
в принципе этого достаточно.
Для конфигурационного файла, это будет выглядеть примерно так:
/etc/asterisk/sip_custom.conf
[601] deny=0.0.0.0/0.0.0.0 secret=very_strong_password dtmfmode=rfc2833 canreinvite=no context=from-internal host=dynamic trustrpid=yes sendrpid=no type=peer nat=no port=5060 qualify=yes qualifyfreq=60 transport=udp dial=SIP/601 permit=192.168.0.0/255.255.255.0 callerid=phone1 <601> callcounter=yes
Номер данного екстеншена не имеет значения, т.к. екстеншен будет осуществлять только исходящие вызовы.
Рассмотрим основные параметры:
host=dynamic - разрешать подключатся с любого IP
permit=192.168.0.0/255.255.255.0 - разрешать подключатся только из подсети 192.168.0.0
port=5060 - порт сигнализации SIP на удаленном устройстве (SPA8800).
SPA8800 использует для каждого из FXS/FXO уникальный порт сигнализации:
- Phone1=5060
- Phone2=5160
- Phone3=5260
- Phone4=5360
Соответственно укажите для каждого екстеншена уникальный порт соответствующий настройкам шлюза. Впрочем, если этого не сделать, все равно будет работать.
context=from-internal - контекст из которого будут вызываться номера набранные абонентами АТС.
Если, что наиболее вероятно, вы используете FreePBX, from-internal стандартный контекст, из которого, по умолчанию, разрешен набор всех номеров сконфигурированных в веб-интерфейсе.
Ваш собственный контекст мог бы выглядеть так:
[from-panasonic] exten => _[34]XX,1,Dial(SIP/${EXTEN},180,tr) exten => _XXXXXXX,1,Dial(SIP/sipprovider/${EXTEN},180,) exten => _8[90]XXXXXXXXX,1,Dial(Dongle/dongle0/${EXTEN},,) exten => _810.,1,Playback(tt-monkeys)
Создайте четыре екстеншена с уникальными именами и портами SIP соответствующими портам на стороне шлюза.
Настройки FXS со стороны шлюза
Задайте необходимые параметры для каждого из четырех FXS портов в соответствии с настройками созданных в Asterisk екстеншенов:
- Proxy - IP Адрес сервера Asterisk
- Display Name - Имя екткншена
- User ID - Номер естеншена
- Password - Пароль (secret)
- Use Auth ID - Yes - Использовать Authorisation ID
- Auth ID - Задайте ID аналогичный User ID
FXS Dial Plan
Каждый порт FXS может иметь уникальный план набора.
Dial Plan определяет разрешенные к набору номера при помощи шаблонов (pattern) основанный на регулярных выражения (RegEx).
В данном примере задано три шаблона, разделенных вертикальной чертой:
(*xx|[34]xx|xxxxxxxxxxxx.)
- *xx - набор абонентских кодов, где «x» любая цифра от 0-9.
- [34]xx - набор трехзначных внутренних номеров Asterisk, 3XX и 4XX.
- xxxxxxxxxxxx. - набор номеров любой длины, где «x» любая цифра от 0-9, а точка это элемент повторения последнего знака шаблона, сколько угодно раз.
Казалось бы последнее правило включает в себя и второе. Да это так, за исключением того, что в последнем правиле, после набора номера, будет задействован таймаут, т.к. длина номера не определена:
<fs medium>Regional > Control Timer Values (sec) - Interdigit Long Timer: 10 (секунд. по умолчанию)</fs>
Шаблон полностью совпадающий по длине с набранным номером наберет номер сразу, после ввода последней цифры.
Настройка FXO порта (line)
Через FXO порты шлюза абоненты Asterisk смогут набирать абонентов АТС и номера чрез внешние линии подключенные к АТС.
Настройки для FXO со стороны Asterisk
Если вы используете FreePBX создайте SIP транк в Connectivity > Trunks
И и настройте Peer Details соответствии с настройками шлюза:
[line1] host=dynamic defaultip=192.168.0.111 username=line1 secret=password type=friend qualify=yes insecure=port,invite port=5061 permit=192.168.0.0/255.255.255.0 nat=no
Создайте четыре транка с уникальными именами и портами SIP соответствующими портам на стороне шлюза.
Отстаётся только направить настроить маршрутизацию через созданные транки. В нашем примере внутренние номера АТС трехзначные 1ХХ и 2ХХ.
Во FreePBX это будет выглядеть так:
<fs medium>Connectivity > Outbound Routes</fs>
Или настройте в /etc/asterisk/extensions_custom.conf
[from-asterisk] exten => _[12]XX,1,Dial(SIP/line1/${EXTEN},180,) same => n,(SIP/line2/${EXTEN},180,) same => n,(SIP/line3/${EXTEN},180,) same => n,(SIP/line4/${EXTEN},180,)
<spoiler|Macro spa8800 fxo>
[spa8800_1] exten => _X.,1,Set(_TRK=SIP/fxo) exten => _X.,n,Set(__RECSTATUSON=always) exten => _X.,n,Set(__RECSTATUSOFF=dontcare) exten => _X.,n,Macro(spa8800,${EXTEN}) [macro-spa8800] exten => s,1,Noop() exten => s,n,Set(CDR(did)=${ARG1}) exten => s,n,Set(CDR(userfield)=${ARG1}) exten => s,n,Gosub(sub-record-check,s,1(out,${ARG1},${RECSTATUSOFF})) exten => s,n,Dial(${TRK}1/${ARG1},60,e) exten => s,n,NoOp( Dial Status: ${DIALSTATUS}) exten => s,n,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Hangup exten => s-CONGESTION,1,Dial(${TRK}2/${ARG1},60,) exten => s-CONGESTION,n,Dial(${TRK}3/${ARG1},60,) exten => s-CONGESTION,n,Dial(${TRK}4/${ARG1},60,) exten => s-CONGESTION,n,Congestion exten => s-CANCEL,1,Hangup exten => s-BUSY,1,Busy exten => s-CHANUNAVAIL,1,Dial(${TRK}2/${ARG1},60,) exten => s-CHANUNAVAIL,n,Dial(${TRK}3/${ARG1},60,) exten => s-CHANUNAVAIL,n,Dial(${TRK}4/${ARG1},60,) exten => s-CHANUNAVAIL,n,Hangup
</spoiler>
Настройки FXO шлюза
Задайте необходимые параметры для каждого из четырех FXO портов в соответствии с настройками созданных в Asterisk транков:
Конфигурация Line мало чем отличается от настройки Phone Задайте необходимые параметры:
- Proxy - IP Адрес сервера Asterisk
- Display Name - Имя екстеншена
- Password - Пароль (secret)
- User ID - Номер екстеншена
- Use Auth ID - No - Не использовать Authorisation ID
- Auth ID - не требуется.
SIP порты FXO
- Line1=5061
- Line2=5161
- Line3=5261
- Line4=5361
<spoiler>
Dial Plans
Где Dial Plan 1: (S0<:1111111>) - DID для входящего вызова в Asterisk.
или без регистрации: (S0<:111111><:@192.168.1.7:5060>)
A VoIP-To-PSTN Gateway Setup
FXS VoIP Caller DP: 2 (xx.) - шаблон для исходящего вызова (любой номер) </spoiler>
Line-In-Use Voltage
Порт FXO измеряет напряжение подключенной к нему линии. По умолчанию задан порог в 30V, но у многих АТС напряжение на внутренней линии меньше 30V. если напряжение будет меньше заданного порога, регистрация со стороны шлюза провалится.
PSTN Line 2 Status Hook State: On Line Voltage: -24 (V) Loop Current: 0.0 (mA) Registration State: Registered Last Registration At: 11/11/2014 11:11:12 Next Registration In: 2329 s Last Called VoIP Number: Last Called PSTN Number: Last VoIP Caller: Last PSTN Caller: Last PSTN Disconnect Reason: PSTN Activity Timer: 30000 (ms) Mapped SIP Port: Call Type:
Проверим статус пиров в Asterisk:
Aster*CLI> sip show peers Name/username Host Dyn Forcerport Comedia ACL Port Status Description 601/601 192.168.0.111 D No No A 5060 OK (10 ms) 602/602 192.168.0.111 D No No A 5160 OK (8 ms) 603/603 192.168.0.111 D No No A 5260 OK (10 ms) 604/604 192.168.0.111 D No No A 5360 OK (9 ms) line1/line1 192.168.0.111 D No No A 5061 OK (10 ms) line2/line2 192.168.0.111 D No No A 5161 OK (9 ms) line3/line3 192.168.0.111 D No No A 5261 OK (10 ms) line4/line4 192.168.0.111 D No No A 5361 OK (10 ms)
И статус регистрации на шлюзе:
FXS
и FXO
Reboot
http://spa-ip-addr/admin/reboot
The ATA device reboots only when it is idle.
Dialplan
Digit Sequence | Function |
---|---|
0 1 2 3 4 5 6 7 8 9 0 * # | Enter any of these characters to represent a key that the user must press on the phone keypad. |
x | Enter x to represent any character on the phone keypad. |
[sequence] | Enter characters within square brackets to create |
a list of accepted key presses. The user can press | |
any one of the keys in the list. | |
• Numeric range | |
For example, you would enter [2-9] to allow the | |
user to press any one digit from 2 through 9. | |
• Numeric range with other characters | |
For example, you would enter [35-8*] to allow | |
the user to press 3, 5, 6, 7, 8, or *. |
. (period) Enter a period for element repetition. The dial plan accepts 0 or more entries of the digit. For example, 01. allows users to enter 0, 01, 011, 0111, and so on. <dialed:substituted> Use this format to indicate that certain dialed digits are replaced by other characters when the sequence is transmitted. The dialed digits can be zero or more characters. EXAMPLE 1: <8:1650>xxxxxxx When the user presses 8 followed by a sevendigit number, the system automatically replaces the dialed 8 with 1650. If the user dials 85550112, the system transmits 16505550112. EXAMPLE 2: <:1>xxxxxxxxxx In this example, no digits are replaced. When the user enters a 10-digit string of numbers, the number 1 is added at the beginning of the sequence. If the user dials 9725550112, the system transmits 19725550112