Сага
"DVG-4032s,2032s и Trixbox"
Эпиграф.
Жила была АТС гибридная. 10 внешних линий, 32 внутренних и 10 ЦИФРОВЫХ. 10 цифровых линий были чудом иноземным, поэтому подключить к ним можно было только специальные телефоны, которые стоили 100 долларов и работали только с этой АТС.
Жила она долго и счастливо (года 4). Но однажды пришел Админ новый телефон к ней подключить и озадачился - некуда. А АТС ту отапгрейдить можно было. И позвонил Админ Дилеру. И был послан Админ Дилером нафиг:
Не выпускается больше барахло ваше! - молвил дилер – Но есть у нас АТС новая-кленовая, полностью цифровая для вас всего 3 штуки зелени!
И осерчал тут админ. Ножкой топнул, поматерился всласть и решил он на VoIP переходить. Уж больно гибким решение казалось, да и по понятней будет (пойди разберись, чем там гибридная АТС от цифровой отличалась)
Подбил Админ бабки, порылся по прайсам и решил он D-link купить – дешевле чем АТС выходило. Ну а сервер конечно халявный и для ленивых – Trixbox (ну просто полный GUI везде).
И был бой. Три дня и три ночи (ну ночи действительно три, а вот дней на неделю набралось). И победил Админ. О чем и будет рассказ ниже.
В общем, хочу рассказать, как возводил АТС у себя на работе. К сожалению, при этом очень не хватало информации - т.е. читал про Asterisk, читал руководство по D-link, но нигде не находил описания нюансов при стыковке этих монстров. А на них (нюансах) все геморои и строились. Поэтому хочу поделиться находками с окружающими – может поможет кому. Кроме того ответов на все вопросы я не нашел, поэтому кто что сможет разъяснить – буду благодарен.
Итак. Все смонтировали, скроссировали и подключили. Разводили все на плинты Krone, поэтому потребовалась распайка разъемов на этих девайсах. Она оказалась примитивной:
50 контактные разъемы сзади устройств это 50 пиновый centronics.
Распайка простая, у обоих устройств она одинаковая:
1-26, 2-27, 3-28, ... , 16-41 (всего 16 пар)
остальные не используются.
для 4032s в каждом разъеме -- первые 8 -- fxs, следующие 8 – fxo.
В Trixbox подобавляли SIP extention со стандартными настройками. На железках проставили для портов нужные номера и пароли. Все порты после этого зарегистрировались на Trixbox.
Создали группу 500 с FXS номерами секретаря и прописали ее в хотлайн для FXO, чтобы звонящие попадали на секретаря.
Создали группу 9, и поместили в нее нужные FXO в нужном порядке для выхода в город. Таким образом получился two stage dialing, как на старой АТС. Т.е. 9-гудок-набор_номера
Все работало... пока не настал понедельник и люди не начали звонить.
День 1
Приблизительно раз в час железки начинали перерегистрировать порты на сервере. И продолжалось это по 5 мин. Звонить при этом никуда не получалось.
День пережили, наступил долгий вечер.
Обновили ПО (ДЕЛАЙТЕ ЭТО СРАЗУ!). Не помогло.
Плясали, трясли бубном.
На исходе решили повесится, но все как-то заработало. Итогом стало следующее – железки к серверу надо подключать через WAN порты (через LAN все, то работало, то не работало. Выяснять почему надоело).
Настроить на работу без регистрации на прокси не удалось. Прописали вместо host=dynamic ай-пи железки, поснимали галки register на Dlink. Звонки с D-link проходят нормально. Звонки же на D-link попадают на первую свободную линию, а не на адресата. Т.е. железка работает как trunk.
Ночью, покопавшись в логах, осознал, что порты отваливаются из-за того, то не проходят qualify на сервере. Причем время ответа на запрос может достигать 4 сек. В триксбоксе по-умолчанию ставится qualify=yes (т.е. 2 сек). Мораль:
У всех поставить qualify=no. Время регистрации на сервере при перезагрузке упало с 5 мин до 1. Все зафурычило.
День 2
Железки перерегистрировались 2 раза за день по 1 мин. Терпимо, но уныло. Позвонили в тех поддержку. Посланы не были, но были снабжены программулиной умеющей мониторить эти девайсы. Классная штука, жаль нет в общем доступе.
Обнаружилось следующее: процесс перерегистрации происходит постоянно с интервалом указанным в
TTL (Registration interval) [10 - 7200 s]
Причем в процессе работы все перерегистрируется успешно. При перезагрузке девайсов возникают таймауты при регистрации некоторых портов, поэтому регистрация длится дольше.
Самое интересное – проблемы с 5 минутной перерегистрацией возникают когда наступает Invite timeout. Т.е. кто-то набрал 9, Asterisk не нашел свободной линии в группе за Invite timeout и начинается катавасия. Железка думает, что потеряла регистрацию и решает перерегестрироваться, сначала одним портом, потом еще несколькими. Trixbox видимо клинит, и идут сплошные таймауты регистрации. Кто виноват – железка или сервер, до конца не понятно, но не суть. Мораль такая – время вызова для группы должно быть меньше на 2-3 сек чем Invite timeout в железке. И TTL (Registration interval) нужно ставить побольше.
День 3
Работает. Перевели дух, начали разбираться с фичами.
Перевод звонков.
Если выставлен Enable Hook Flash Event, то перевод звонка по Flash работает без Asterisk (должно быть еще включено Call Hold и Call Transfer для линии в железке). При этом не происходит сопровождение звонка. Т.е. переведенный звонок, если вы повесили трубку до того, как ее взял адресат, обратно не вернется. Так и будет звонить до усеру телефон адресата, которого нет на месте.
Нормальный сопровождаемый трансфер работает через Asterisk. Комбинация клавиш для это прописывается ручками (да-да, не через веб), в features.conf. Можно пользоваться Trixbox config edit. Называется atxfer. Но в версии Asterisk 1.2.18 это не работает. Говорят починят в 1.2.19.
Обязательно проверте Asterisk Dial Command options в секции general во FreePBX. По умолчанию там невменяемое tr, а надо Tt (читайте доку к команде Dial в Asterisk). Из-за r при наборе 9 сначала следует гудок от Asteriska, а потом из линии, т.е. их два (иногда и больше, если все FXO заняты) – всех смущает.
Не ставте Call Waiting у портов, пока не научите людей переводить звонки Asterisk'ом (не Flash). Иначе секретарь получит на трубке двух звонящих, которых можно будет переключать Flash'ем, но нельзя будет перевести. Глаза у секретарш при этом очень большие...
Эхо.
Геморой обострился после перепрошивки. Это не беда D-link, это беда VoIP. Побороть ее в Asterisk нельзя! Давить эхо надо в зародыше, т.е. в железках. Само-собой включаем Echo Cancellation (работает хорошо, требуется пару секунд разговора на обучение). Уменьшаем Speaking Volume для FXO (у меня -4), и соответственно увеличиваем Listening Volume для FXS. Эхо осталось, но жалобы прекратились. Т.е. стало очень даже ничего.
Факсы.
Отключаем T.38 в железках (disable) – факсы ходят. В астериске т38 то ли не сделан, то ли не работает, то ли работает но факсы не идут. В общем темный лес...
Flash
Как не крутили, на трех телефонах в офисе flash не заработал. Очень уж он у них короткий. Ну и фиг с ними.
Digit map
Очень правильная феня. Например если все внутренние телефоны имеют вид 1ХХ тогда ставим в верхней строчке галку, в Scan Code пишем 1, в User Dial Length – 3. В результате дозвон по внутренним номерам начинается сразу после набора номера, без ожидания Inter Digits Timeout. Так же ускоряется выход на 9 – SC=9, UDL=1. Ну и так далее.
Загадочный Enable Pound Key ' # ' Function позволяет сообщить железяке, что ввод номера закончен нажатием решетки на телефоне. При этом сама решетка не будет передана вызываемому узлу. Нафиг не нужен при настроеном Digit map
День четвертый.
Писец. Поступили жалобы, что часто ошибаются номером при звонках через 9 (у нас набор происходит через DTFM, DTFM предается с помощью rfc2833). Позвонил домой. Много раз. В половине случаев попал не туда.
Позвонил на АТС. Попал туда. Сказали, что задваиваются цифры.
Посмотрел логи. Железяки правильно понимают и проигрывают номера.
Послушал, что же они проигрывают - при проигрывании иногда слышен треск, видимо это и клинит криво настроенное МГТСовское оборудование. Бяка короче. Переключил в пульс, вообще бяка какая-то. Плюнул на все.
День пятый.
Надо что-то делать. Попробовал настроить one stage dialing. Это типа без всяких гудков. Философия более правильная, т.к. можно роутить звонок в зависимости от набранного номера. В общем одни плюсы.
Получилось. Т.е. мне показалось, что получилось, на самом деле – нифига.
Я создал custom trunk в FreePBX. В Custom dial string написал SIP/702/$OUTNUM$@702.
Сделал outgouing route. И вроде все зазвонило. Но оказалось, что звонит через первый свободный FXO а не через 702 FXO.
Выходные
Половину выходных бился над правильным Custom dial string. Узнал много про SIP, перечитал кучу RFC. Нифига. Пока не прочел еще раз руководство к D-link. Правильным оказалось SIP/702$OUTNUM$@702. Должны быть выставлены галки:
Enable FXO / Trunk Extension Number
Pick up Line by Dialing Extension Number
Invite with ID / Account для каждой линии.
Причем выставлены они должны быть полюбому, если мы работаем через прокси. Т.е. стоять они должны ВСЕГДА.
Также, чтобы транки работали надо закомментировать строки в
extensions.conf -> macro-dialout-trunk
exten => s-BUSY,1,NoOp(Dial failed due to trunk reporting BUSY - giving up)
exten => s-BUSY,2,Busy(20)
exten => s-NOANSWER,1,NoOp(Dial failed due to trunk reporting NOANSWER - giving up)
exten => s-NOANSWER,2,Playtones(congestion)
exten => s-NOANSWER,3,Congestion(20)
exten => s-CANCEL,1,NoOp(Dial failed due to trunk reporting CANCEL - giving up)
exten => s-CANCEL,2,Playtones(congestion)
exten => s-CANCEL,3,Congestion(20)
День шестой.
Настроил и обучил всех one stage dialing. Зашибись – ошибки при дозвонах пропали.
Решил побороть железку окончательно и заставить работать без регистрации на прокси.
Как выяснилось, изначальное фиаско было вызвано следующим:
Asterisk вызывает линию через username экстеншена.
При регистрации username сообщает железка. И все чики-пуки.
Если же регистрация в железке отключена, то Asterisk не знает username и вызывает железку просто по ай-пи, т.е. как транк.
Выход: прописать username в свойствах экстеншена.
Засада: Во freePBX username не посчитали важным и у экстеншена его просто нет.
Пришлось править freePBX. Подсказка: надо искать внутри файлов /var/www/html/admin текст, например, canreinvite. Найдется php файлик и в нем по образу и подобию canreinvite добавить строчку username.
Все работает.
Еще фенька. Не работал донабор DTFM после набора основного номера. Увеличил Minimum DTMF ON Length до 200 – заработал. Но вот вопрос – minimum? И когда бывает максимум? Это же просто время, которое проигрывается DTMF сигналы в линию.
Эпилог
В начале, когда все глючило, отчаяние настигло меня и я решил развести начальство на какой-нибудь другой шлюз FXO, получше. Поискал и понял – не судьба. Другие шлюзы на 16 портов FXO стоят в ТРИ раза дороже D-link.
Когда же все заработало, осмотрел я стойку свою серверную и прифигел. Там один D-link. И все это работает и работает хорошо. И дома у меня в сети тоже оказался D-link один. Я не специально...
Короче: D-link форева! Дешево и сердито. Глюки? Чаще всего это кривые руки. Как у меня...
Прошивка, о которой я тут распинался – 1.2.36.9
Да помогут вам:
voip.rus.net и voip-info.org. Ну и google конечно.
С нетерпением жду дополнений, комментариев и исправлений.
А хотите развести меня на флейм? Тогда знайте: trixbox рулез, dlink-foreva, а вы идите в ж#пу.
|