Настройка SPA8800 для FreePBX (Asterisk, Trixbox)

Настраивая голосовой шлюз SPA8800 для своего FreePBX Distro столкнулся с тем что информации по настройке этого девайса в интернете в целом нет, есть разные куски на разных сайтах, при чём находятся в поиске только после того как доходишь до определённого пункта, что не очень удобно и довольно трудоёмко, так родилась эта инструкция, и что бы самому не забыть и другим в настройке помочь. Здесь будет описана настройка Cisco SPA8800, хотя для Linksys SPA8800 настройки аналогичные (это по сути одна модель) с начала и до конца, но только для портов FXO, для портов FXS можно воспользоваться инструкцией по SPA8000  – настройки аналогичные.

Начальный этап – сетевые настройки.
Настройка SIP.
Настройка взаимодействия с городской линией ТФОП (PSTN).

Я буду настраивать на FreePBX но эти настройки с таким же успехом можно применять и на TrixBox, Elastix и на других решениях построенных на Asterisk.

Начальный этап – сетевые настройки

Внимание! Данный класс устройств не предназначен для того что бы их выставляли в интернет! Заранее позаботьтесь о том что бы доступ к этому устройству имел только ограниченный круг лиц. В идеальном случае никто кроме администраторов и самого астериска доступа к устройству иметь не должен. В противном случае вы рискуете тем что злоумышленник сможет звонить через ваш SPA за ваши деньги.

При подключении к сети шлюз сам получает IP адрес по DHCP, поэтому если у вас поднят DCHP в сети просто посмотрите какой адрес получил ваш SPA. Далее через обычный браузер (желательно IE) заходите по адресу http://ip_адрес_вашего_spa/admin/advanced у вас откроется окно настроек, по умолчанию пароли не установлены и шлюз их спрашивать не будет. Если у вас в сети нет DHCP то адрес по умолчанию для шлюза – 192.168.0.1 что бы подключиться к нему нужно будет соответствующим образом настроить свою сетевую карту, и убедиться что у вас в сети нет устройств с таким адресом (а ещё лучше на прямую к ПК подключить, а не в сеть).

spa8800 advanced logon

Переходим на вкладку Wan Status и меняем настройки если нужно, в моём случае остаётся DHCP, если хотите настроить IP адреса вручную выбирайте Static IP.

spa8800 network settings

Если вносили изменения не забываем нажать кнопку Submit All Changes.

Далее идём в Voice – System и устанавливаем пароль, пароль желательно ставить и для user и для admin, логины соответственно такие же user и admin.

spa8800 change password

Нажимаем кнопку Submit All Changes.

прошивка

После того как эти настройки выполнены рекомендую поставить свежую прошивку, для этого идём на сайт производителяи скачиваем нужный нам Voice Gateway Firmware. Это будет архив, распаковываем его и запускаем upg-spa8800-*-*-*-GW.exe

Вводим IP адрес шлюза, выбираем сетевую карту (если их несколько) с нужными настройками жмём Ок. Дальше будет окошко с запросом пароля для Admin вводим пароль снова Ок, в появившемся окошке останется нажать Upgrade и в течении буквально 5 минут новая прошивка будет залита, весь процесс довольно прост.

spa8800 firmware upgrade

В завершении процесса устройство перезагрузится, что бы убедиться что мы всё нормально прошили заходим в Voice – Info и смотрим строку Software Version.

spa8800 software version

На этом пожалуй начальный этап завершён.

Настройка SIP SPA8800

Переходим к настройке шлюза для астериска, выбираем Voice – Line1.

В поле Proxy вводим адрес нашего Asterisk, Make Call Without Reg и Ans Call Without Reg выставляем в Yes.

spa8800 fxo port settings

Запоминаем SIP Port. Нажимаем кнопку Submit All Changes.

Небольшое пояснение по настройкам:

Proxy – адрес для регистрации линии FXO и осуществления исходящих и приёма входящих звонков на сервере PBX;
Outbound Proxy – необязательный параметр, адрес сервера для исходящих звонков, используется помимо основного Proxy для резервирования;
Register – для регистрации на сервере PBX;
Make Call Without Reg – для возможности исходящих звонков без регистрации на PBX;
Ans Call Without Reg – для возможности ответа на входящие звонки без регистрации на PBX;

Переходим к блоку Subscriber Information, заполняем поля Display NameUser IDPassword так как мы их потом будем заполнять в астериске,  User ID – имя пользователя, Password – соответственно пароль, эта информация нужна чтобы шлюз мог зарегистрироваться на астериске. В моём случае логин – spa8k8line1, пароль Sw0rdfish.  Display Name – я заполнил как номер входящей линии, так проще будет отслеживать звонки в отчётах.

spa8800 fxo sip auth settings

Нажимаем кнопку Submit All Changes.

астериск

Приступаем к настройке Asterisk, выбираем раздел Trunks (Транки). Добавляем транк Add Trunk.

Trunk Name – имя транка, то как вы его хотите видеть, не на что в общем-то особо не влияет .
Outbound CallerID – номер телефона который вы будете видеть в отчёте при исходящих звонках.
Dialed Number Manipulation Rules – сопоставление набранных номеров с шаблоном, можно не заполнять. Подробнее о правилах и шаблонах набора номера можно здесь прочитать.
Trunk Name – Несмотря на то что поле называется имя транка, здесь необходим внести Имя пользователя, иначе SPA не сможет зарегистрироваться на астериске, а значит ничего работать не будет.
PEER Details – самая интересная часть, здесь прописываются основные настройки.

username=spa8k8line1	;Имя пользователя для порта, то что мы указывали в User ID на шлюзе
type=friend		;Позволяет и принимать и отправлять вызовы
secret=Sw0rdfish	;Пароль
qualify=yes		;Разрешает серверу определять доступность VoIP шлюза
port=5061		;SIP порт VoIP шлюза, параметр который указан шлюзе, на разных
			Line портах разные порты, будьте внимательны!
nat=never		;Обязательный параметр, Cisco с другими параметрами может не работать!
host=dynamic		;Для работы VoIP шлюз должен зарегистрироваться
dtmfmode=info		;Режим который мы выставили на SPA
context=from-pstn	;Контекст указывает обработчик входящих вызовов
canreinvite=no		;Запрещает передачу медиатрафика минуя астериск

spa8800 asterisk trunk

Сохраняем настройки кнопкой Submit Changes и применяем их кнопкой Apply.

исходящие настройки астериск

Переходим в раздел исходящей маршрутизации (Outbound Routes) и добавим направление через наш шлюз Add Route. Тут всё просто, достаточно указать имя маршрута и заполнить шаблоны, шаблоны заполняются аналогично транку, те же prepend и prefix значение которых я уже объяснил выше, только если в транке их можно не заполнять, тут их надо заполнять обязательно, по этим шаблонам Астериск ищет через какой же транк ему пустить вызов. В моём случае шаблоны заполнены так что бы номер уходил на транк в формате 79181234567 делаю я это для унификации, большинство VoIP провайдеров принимают номер именно в таком формате, мне проще на определённом транке потом вывернуть из 7918 в 8918 или не делать этого в зависимости от поставщика услуг.

spa8800 asterisk

С астериском почти всё, осталось добавить маршрут для входящих звонков.

настройки входящих звонков астериск

идём в раздел Входящая маршрутизация (Inbound Routes) и добавляем маршрут, в самом просто случае достаточно указать DID (это идентификатор который нужен для того что бы астериск знал куда направить входящий вызов). Такой же DID мы позже укажем в настройках шлюза, у меня это будет 1234567, а так же указать назначение маршрута т.е. куда звонок уйдёт, можно выбирать почти всё, приветствия, внутренние номера, очереди, голосовую почту, IVR итп, указывается в поле Установить направление (Set Destination) в моём случае это будет внутренний номер 161, который я конечно заранее создал. Жмём Submit – Apply, с астериском закончили.

asterisk incoming DID

Далее будем настраивать Dial Plan, DTMF и настройки входящих – исходящих вызовов на шлюзе.

Итак пор порядку сверху вниз у нас идёт Audio Configuration, тут мы настраиваем используемый шлюзом кодеки и DTMF сигналы, кодеки я не изменял меня устраивают настройки по умолчанию, а вот DTMF сигналы надо будет выставить в INFO т.к. мы подобную настройку использовали в транке на Астериске.

spa8800 dtmf method

Dial Plan

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

Мой шаблон для исходящих выглядит так (2xxxxxxS0|89xxxxxxxxxS0|8xxxxxxxxxxS0|9xxxxxxS0|0[1-4]S0)  т.е. шлюз пропустит в городе номера типа 2123456, 89123456789, 81234567891, 9123456, ну и номера экстренных служб 01,02,03,04. Теперь более подробно о том как самому составить диал план.

  • * – любой символ;
  • . – любое количество символов;
  • x – цифры от 0 до 9;
  • S0 – задержка 0 секунд;
  • x-y – диапазон цифр от x до x, в моём примере 1-4 это цифры от 1 до 4.

Например *9S0 – означает, что при наборе любого символа и девятки набор происходит мгновенно без задержек. P6<:7777> – по истечении 6 секунд, если ничего не было набрано, происходит автоматический набор номера 7777. Перед посылкой цифр на сервер PBX или в PSTN, голосовой шлюз сверяет набранные на аппарате цифры с диалпланом и делает соответствующие корректировки с задержками или заменой цифр и т.д перед посылкой.

Шаблон для входящих звонков (<: 1234567@192.168.254.22>S0) в данном случае 1234567 это DID который мы указали на астериске, 192.168.254.22 – адрес астериска.

spa8800 dialplan

Нажимаем кнопку Submit All Changes. Подключаем нашу городскую линию к порту Line1 шлюза.

Где-то здесь надо добавить, что у шлюза есть интересная особенность. Когда на шлюз не поступает питание он соединяет напрямую порт Phone1 с портом Line1 и т.п. порты 2,3,4. Имейте это ввиду когда будете кроссировать внутренние телефоны! На SPA8800 лучше вешать тех сотрудников кто в основном и принимает входящие звонки.

После сохранения настроек на вкладке Voice – Info мы должны увидеть примерно следующую картинку.

spa8800 pstn status

Обращаем внимание на строку Registration State – должно быть Registered. Запоминаем Line Voltage.

 Настройка взаимодействия с городской линией ТФОП (PSTN).

Идём дальше, и настраиваем поведение шлюза при входящих и исходящих вызовах.

VoIP-To-PSTN Gateway Setup здесь мы настраиваем какой Dial Plan (DP) мы будем использовать при звонках с астериска в телефонную сеть, у меня это первая строка поэтому я выбрал 1 в параметре VoIP Caller Default DP.

PSTN-To-VoIP Gateway Setup тут наоборот указываем какой диал план мы используем при входящих звонках из города, в моём случае это 8 в параметре PSTN Caller Default DP. PSTN CID For VoIP CID – передавать или нет CID из города на астериск, оставляем по умолчанию. PSTN CID Name Prefix  и STN CID Number Prefix – добавить префикс к имени или к номеру CID полученного из города.

FXO Timer Values (sec) раздел посвящённый временным интервалам, все параметры задаются в секундах.

PSTN Answer Delay – задержка перед ответом на входящий звонок из города. Если вы используете Caller ID от оператора ставьте 3-4 может больше может меньше, подбирайте экспериментально. Можно поставить больше значение и уменьшать его до тех пор пока номер будет определятся, если же Caller ID на вашей линии не подключён ставьте 0.
VoIP-To-PSTN Call Max Dur – максимальная продолжительность разговора из Астериска в город, 0 – без ограничения.
PSTN Ring Timeout – сколько будет “звонить” город пока шлюз не положит трубку, если у вас с астериском всё в порядке то этот параметр нас не интересует.
PSTN Dial Digit Len – длина тонового сигнала в секундах – .1 это соответственно 100мс, если номер не набирается можно попробовать увеличить этот параметр.
PSTN-To-VoIP Call Max Dur – максимальная продолжительность разговора из города на Астериск, 0 – без ограничения.
PSTN Dialing Delay – задержка перед набором номера. Если ставить меньше одного то городская атс может протупить и вы будете слышать постоянно занято.

PSTN Disconnect Detection

раздел который задаёт настройки определения шлюзом завершения разговора.

Detect CPC – (Calling Party Control) сигнал посылаемый современными ГАТС в линию (PSTN) для уведомления абонента об “отбое”. Проще говоря, данный параметр используется для детектирования сигналов отбоя приходящих в линию PSTN. Данный тип сигнала “отбоя” принципиально отличается от DTMF-сигналов и работает по принципу установления нулевого напряжения в линии продолжительностью 250 – 500 миллисекунд, т.е. с частотой 2 – 4 Герц.(Если интерфейс FXO (PSTN) подключен к устаревшей городской линии, возможно следует отключить данный параметр).

Detect PSTN Long Silence – разрыв связи при тишине в линии больше времени заданного в PSTN Long Silence Duration. По умолчанию выключено, оставил без изменений.

Detect VoIP Long Silence – аналогичный выше описанному параметр, только тут тишина по VoIP каналу определяется, также не включал.

Detect Disconnect Tone – определять или нет короткие гудки, конечно yes.

Disconnect Tone – шаблон коротких гудков, то что настроено по умолчанию вам скорее всего не подойдёт. Нужно записать короткие гудки Астериском и проанализровать их для того что бы правильно написать шаблон, дело в общем не сложное. Для анализа я использовал Audacity (бесплатный ауидоредактор).

audacity Disconnect Tone

Открываем записанный файл, выделяем нужный нам отрезок короткого гудка и выбираем Анализ – Построить график спектра

audacity spectre

Наводим курсор на пик и видим что у нас написано Пик: 426 гц-26,6дб. В данном случае сигнал одночастотный (а бывают и двухчастотные, для них будет два пика).

Дальше смотрим длительность между гудками и длительность самих гудков.

audacity Disconnect Tone

в моём случае это 256 мс, округлим до 250. Итак исходные данные мы собрали, теперь пишем шаблон:

Формула выглядит так:

X@-30,X@-30;Y(A/B/1+2)

где:

  • X – частота (у меня 426 Герца);
  • Y – количество гудков, которые будет слушать Linksys и оператор перед тем как положить трубку (я задал 3);
  • A – период сигнала гудка (0.250 с);
  • B – период тишины (0.250 с)

получаем 426@-30,426@-30;3(.25/.25/1+2).

International Control

здесь нам нужно изменить пару параметров.

FXO Port Impedance – входное сопротивление по умолчанию 600ом, для России цифра такая же, оставляем без изменений.

SPA To PSTN Gain – уровень громкости от шлюза в город. Т.е. если нас плохо слышат мы можем увеличить громкость если наоборот какая-то линия слишком чувствительна громкость можно уменьшить, допустимый диапазон от -15 до 12. Не забываем что чем больше мы ставим значение тем больше риск появления эха.

PSTN To SPA Gain  – аналогичный параметр только от города к шлюзу. Т.е. если мы плохо слышим увеличиваем громкость или уменьшаем, чем больше мы ставим значение тем больше риск появления эха.

Line-In-Use Voltage – минимальный уровень напряжения в линии, мы смотрели напряжение в нашей линии на странице  Voice – Info, лучше поставить меньше, т.е. у меня 21 показывает, я выставил 20, если не получается совершить исходящий звонок, а шлюз зарегистрирован и диалплан указан верно, попробуйте уменьшить значение.

spa8800 disconnect tone

Нажимаем кнопку Submit All Changes. Аналогично настраиваем оставшиеся порты, собственно всё.

Шлюз довольно качественный, качество звука на высоте. Настроек тоже достаточно, даже слишком их много, что несколько затрудняет настройку, но цена в соответствии с полученным результатом не может не радовать. По ценнику  SPA на рынке продаются D-link с похожими характеристиками, но он уступает практически по всем параметрам. Несколько огорчает отсутствие импульсного набора, но в наше время довольно сложно встретить АТС которая не поддерживает тоновый набор.

  • Илья

    Сделал все по инструкции,но работает тока line 1.Подскажите может это быть из за того что сеть у меня 192.168.0.1
    ,а cisco дает line 2 192.168.1.2
    Как исправить ?

    • Алексей

      Давайте подробнее что куда к чему, потому что пока из Вашего вопроса я не понял ровным счётом ничего )

  • Илья

    Схема,такая.исходящие мне не нужны с pstn.Входящие настроины тока для line 1,для line 2 транк не региться вообще.Все делаю точно так же как у вас

    • Алексей

      тогда что означала ваша фраза “а cisco дает line 2 192.168.1.2”?
      Что пишет шлюз в статусе линии (Voice-Info)?

      • Илья

        Not Registered.ну первая линия без регистрации работает,а вторую и так и так побывал.
        меня вот эта строка смущает.и не как ее не поменять.

        • Алексей

          Это нормально, главное что бы справа на этой же странице current ip был правильным.
          И чтобы нормально входящие отрабатывали шлюз должен быть регнут, по крайней мере у меня если нет регистрации – входящих тоже нет. Есть ещё момент в астере в outgoing settings параметр trunk name должен совпадать с именем пользователя на шлюзе, забыл этот момент дописать, а так в целом инструкция норм.

          • Илья

            а в Inbound Routes???исходящие меня не интересуют

          • Алексей

            в Inbound указываете DID который ставите в DIalPlan8 на циске.

  • Dmitry Moskvenkov

    Отличная статья! Спасибо!

    Есть 2 вопроса!!!!
    Конфа такая:
    2 аналоговые линии для входящих/исходящих
    1 транк в центральный офис на samsung officeserv7400 для звонков по внутренним номерам.
    Транки для Line1 и Line2 на астериске зарегены, экстеншны зарегены.
    Elastix 2.4, spa8800

    Вопрос 1:
    при звонке с аналогового телефона звонок обрабатывается циской так, что samsung думает, что звонят из города, а не по внутренним номерам и я попадаю не на того, кому звоню, а на секретаря (делал на астере force trunk CID с внутренним номером – не помогло.)

    Вопрос 2:
    Цифровой телефон по внутренним номерам через астер звонит отлично, на внешку через цифру 7 звонит 15 секунд и обрывает звонок

    Вопрос 3:
    Line 1 и Line 2 зарегистрированы.
    Все данные заполнил, как у вас в примере
    Не могу позвонить в город с аналогового телефона, слышу сигнал занято.
    Диалплан настроил примерно так же, как и у вас

    В циске:
    (2xxxxxxS0|89xxxxxxxxxS0|8xxxxxxxxxS0|0[1-4]S0)

    в Астериске, в extention_custom.conf:
    [fxsgroup]
    ; 7 на город
    exten => _7.,1,Dial(SIP/${EXTEN:1}@pstn2,60,r)
    exten => _7.,2,Dial(SIP/${EXTEN:1}@pstn3,60,r)
    ; 013 в транк
    exten => _013.,1,Dial(SIP/${EXTEN:1}@donec_out,60,r)
    exten => 201,n,Dial(SIP/201,60,rT)
    exten => 202,n,Dial(SIP/202,60,rT)
    ;входящие из города
    [pstn2]
    exten => 201,1,Dial(SIP/201,60,rt)
    [pstn3]
    exten => 202,1,Dial(SIP/202,60,rt)

    Также добавлен outbounf route
    8473 prefix 2XXXXXX
    (хотя, как только не извращался – нет звонка)

    Да, и в транках на шлюз указан user-context: from-pstn
    type=friend
    insecure=very
    context=from-pstn

    TrunkName в астере и User ID в циске совпадают

    При этом оба телефона подцеплены к астериску как экстеншны, звонят друг другу и принимают звонки из города…

    Хэлп) Бьюсь уже несколько дней.

    • http://vk.com/id3942838 Алексей Варич

      Давайте по порядку, потому что некоторые вопросы я не понял.
      1. к самсунгу у Вас что FXO циски подключён?
      2. Диал план, при чём как на самом телефоне, так и на циске может вызывать задержку.
      3. Напряжение проверяли? Я писал об этом в статье. Тут может и не в этом беда, потому что я не понимаю что у Вас делает экстешн_кастом, я не люблю в конфиге что-то писать, возможностей freepbx мне за глаза хватает.

      • Dmitry Moskvenkov

        Отвечаю по порядку:
        1. К самсунгу подключен астериск транком
        диалплан в астериске гласит, что все звонки с префиксом 013 и номером 2ХХ уходят в транк
        2. Была бы задержка – было бы просто, а тут я успеваю услышать внешнего абонента и тут же hangup. Ровно 15 секунд идёт вызов.
        3. С напряжением всё ок – 60 на одной и -66 на другой (перепутана полярность, но в циске соответствующая галка стоит)

        Вот по поводу средств настройки FreePBX и экстеншн_кастом – я брал инфу из цискиного руководства по настройке Asterisk+SPA8800, с IP телефонией сталкиваюсь, можно сказать, первый раз.

        Может скрины выложить какие? Просто ip-телефон подключне для выявления проблемного места.
        Из того, что я написал выше – проблемное место циска.. Куда копать?)))

        • Алексей

          в свойствах маршрута можно поставить галку “внутренний маршрут”
          http://prntscr.com/45sqe6
          Но если звонок на секретаря приходит то скорее всего косяк с самсунгом.
          по напряжению я имел ввиду на циске выставлено напряжение в линии или нет? У меня по началу исходящие не проходили именно из-за того что на циске напряжение неверное стояло.
          Но лучше бы конечно лог звонка увидеть.
          по 15 секундам
          VoIP-To-PSTN Call Max Dur:
          PSTN-To-VoIP Call Max Dur:
          Detect PSTN Long Silence:
          Detect VoIP Long Silence:
          В этих параметрах что стоит?

          • Dmitry Moskvenkov

            Так, посмотрел, я. Вот значения:
            VoIP-To-PSTN Call Max Dur: 600
            PSTN-To-VoIP Call Max Dur: 600
            Detect PSTN Long Silence: yes
            Detect VoIP Long Silence:yes

            Проблема именно в циске, т.к. VOIP телефон отлично звонит по внутренним номерам и звонит не на первый свободный, а на тот, который набираешь)
            И на внешние через 7 звонит тоже великолепно..
            Сегодня последний день! В пн меня казнят)) Давайте подумаем вместе..
            justcat.dmitry at gmail.com – hangouts

          • Алексей

            а как Вы на первый свободный звонки то делаете? Я сделал так что бы астериск сам выбирал через какой порт звонить и в инструкции у меня всё так.
            http://trustore.ru/article/asterisk/211-dial-patterns-and-dial-rules-in-freepbx
            а параметрам которые я спрашивал у вас там всё хорошо, 15 секунда нигде не вижу ))

  • valentin883 .

    Настроил все как написано. Но исходящие вызовы работают со второго раза (первый раз набираешь городской телефон звонит но голоса не слышно) может знает кто как это решается?

    • Алексей

      если не слышно голоса то проблема либо в кодеках либо в нате

      • valentin883 .

        и nat пробовал и кодеки менял, проблема в том что второй раз звонишь и все в полном порядке, все слышно

        • http://vk.com/id3942838 Алексей Варич

          для начала можно логи на астериске посмотреть, потом лог с линксиса глянуть, затем если просветления не пришло вайршарком или тспдампом дамп трафика снять и посмотреть что мешает.

          • valentin883 .

            Нашел, оказалось косяк шлюза, первый порт через раз трубку поднимал(или чтото в этом роде), отключил его и все как по маслу пошло.

          • Алексей

            напряжение проверьте, ниже вероятнее всего значение поставить надо.

          • valentin883 .

            Отправил в сервис. Напряжение на всех портах одинаковое стояло 20 при напряжении линии 60 (изначально) + пробовал с разными линиями, результат один и тот же.