Неожиданно столкнулся с такой проблемой: при трансляции сигнала отбоя от одной АТС Asterisk до другой АТС Asterisk по протоколу IAX2 значение причины разъединения меняется на другое. В результате городской абонент, позвонивший моему локальному абоненту (из города) вместо сигнала разъединения Busy вдруг получает сигнал разъединения Unanswer ! Схему организации звонка прикрепил (*.pdf). Долго не мог поверить вообще в эту проблему, пока сам не проверил: взял городской стационарный телефон и позвонил на свой локальный телефон. Перед этим занял свой локальный телефон общением с автоответчиком (добился разговорного состояния). И поскольку на моём локальном телефоне всего одна линия, то при звонке на него из города я ожидал услышать занято (Busy). Но нет - услышал специальный трёхтональный сигнал "у-лю-лю" (Unanswer). Сильно удивился. Поставил трассировку по диалплану на своей городской АТС и на своей локальной АТС. И повторил этот же проверочный звонок. Локальная АТС честно показала причину разъединения Hangup(17) "Busy". В тот же самый момент вышестоящая городская АТС Asterisk показала Hangup(18) "Unanswer" ! Без объяснения причин. Проверил навскидку ещё несколько входящих звонков на локальных абонентов. Локальная АТС при этом каждый раз выдавала корректную причину отбоя. Однако вышестоящая городская АТС несколько раз ошиблась в выдаче причины разъединения. Такое никуда не годится. Подскажите пож. - как бы можно было бы влоб (или обходными путями) помочь локальной станции Asterisk-Local передать вышестоящей станции Asterisk-City корректную причину разъединения ? А соответственно бы городскому Астериску вставить полученную корректную причину разъединения в контекст выдачи причины разъединения.
Забыл указать, оба Астериска (городской и локальный) имеют версии 16. Правда один - голый Астериск (локальный), другой - ванильный (городской - Issabel). Оба обновлял, перезагружал, перепроверял файрволлы, даже игрался параметром qualify=yes or no - одинаково всё плохо. Точнее качество звука близко к идеальному, скорость дозвона молниеносная, разговорное состояние - стабильное. А вот городской Астериск получает от локального Астериска через IAX2 некорректную причину разъединения ! И это никуда не годится. Перейти с IAX2 на SIP (в котором сигнал отбоя точно передаётся без искажений) я не могу, т.к. между Asterisk-Local и Asterisk-City располагаются чужие сети с NAT, с которыми у SIP бывают проблемы. Зато IAX2 соединяет оба моих Астериска идеально. Остаётся придумать - как бы научить эти 2 Астериска обмениваться точной причиной разъединения ... В голову приходит постоянно идея примонтировать к Asterisk-Local RAM-disc, создать в нём файл, в который заставить Asterisk-Local на автомате при окончании каждого соединения записывать корректную причину разъединения. Затем сделать папку с файлом причин разъединения на Asterisk-Local доступной для Asterisk-City. И в контексте Астериска-City прописать обязанность автоматически импортировать этот файлик из общей папки Астериска-Local и вы'grep'ать из неё корректную причину разъединения и подставлять её в городскому абоненту ... Любая критика/подсказки приветствуются ... Возможно создать что-л. проще ...
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !
Запустите на двух астерисках sngrep и iax debug, проведите тест.
Выпишите, кто кому что отвечает: что приходит от телефона, когда он якобы занят, что уходит в IAX транк, что приходит на второй астериск, что уходит дальше.
Только без "у-лю-лю", а конкретные SIP коды и IAX сообщения.
Сразу должно стать попонятнее, что да как. Например, сейчас я три раза прочитал - так и не понял, что происходит.
взял городской стационарный телефон и позвонил на свой локальный телефон. Перед этим занял свой локальный телефон общением с автоответчиком (добился разговорного состояния). И поскольку на моём локальном телефоне всего одна линия, то при звонке на него из города я ожидал услышать занято (Busy).
Думаю, что вопрос к оператору связи, через которого заведён транк на Астериск.
На вашей стороне (раз ваш Астериск честно отправляет Busy) всё работает как надо.
как бы можно было бы влоб (или обходными путями) помочь локальной станции Asterisk-Local передать вышестоящей станции Asterisk-City корректную причину разъединения ?
строго говоря - передача сигнализации Busy - это не разъединение.
Но как указано было выше - смотрите передаваемые коды сигнализации.
Спасибо большое за внимание к моему вопросу. Я 1000-кратно извиняюсь, но пока моя проблема поставлена на паузу. Поскольку оба (2) Астериска находятся под моим управлением, то я таки построил новый костыль - новый канал связи только и только для обмена информацией о причине разъединения ($HANGUPCAUSE). Городская АТС предъявляла мне претензии о некорректности причин разъединения. В ответ я развернул на Asterisk-Local некую samba-шару (/Asterisk/share), построил эту шару сразу на базе RAM-disc, чтобы перезаписывать причину разъединения в файле можно было бы бесчисленное кол-во раз, молниеносно и чтобы это совсем не отнимало ресурсов). И примонтировал эту samba-папку на Asterisk-City (mount). Естественно, силами iptables ограничил доступ посторонним серверам к этой папке. И сделал на Asterisk-city в Dial-Plan запрос причины разъединения в файл на шаре и принудительную подстановку опять же силами Dial-Plan этой причины разъединения для городских проверяющих. Итого поимел реализацию мгновенной выдачи истинной причины разъединения в город. Протестировал несколько сот раз - работает идеально. Пригласил городских проверяющих. Они автономно проверяют, возможно когда-н. выкатят мне претензию. Но пока всё ровно и красиво. Если претензий не будет - внедрю точно такой же костыль для выдачи истинной причины разъединения моим локальным абонентам, зафиксированную на Asterisk-city. Костыль - ДА. Но, работает удивительно ровно и красиво. Ни одной ошибки. Куда дальше заведёт меня фантазия разработчиков Астерисков - неизвестно, всё равно будут яркие решения и буду обновлять Астериски. Но этот костыль позволит переходить от версии к версии Астерисков, не вдаваясь глубоко в суть обмена сигналами разъединения между промежуточными Астерисками. Также костыль позволит внедрять в промежуток между Asterisk-city и Asterisk-Local кучу промежуточных/вспомогательных Астерисков (делать уведомления, собирать телеконференции, делать оповещения городских или локальных абонентов и проч.) и при этом кидать при каждом звонке истинную причину разъединения из конца в конец всей цепочки Астерисков, не вдаваясь в длину этой цепочки Астерисков, типа сигнализаций Астерисков и версий Астерисков ... Да, времени и сил потрачено немало, в том ч. и на вылизывание деталей. Но работает безупречно и не ест (почти) ресурсов.
Уж лучше колымить в Гондурасе, чем гондурасить на Колыме !