Есть один клиент, с которого начались мои эксперименты (не безуспешные) с астериском. К сегодняшнему моменту у него была установлена система на базе Astlinux, настроенная вручную, используя конфигурационные файлы. Система уже старая, установлен астериск 1.2, который не удовлетворяет уже многим требованиям, к тому же ведет себя система непредсказуемо и периодически зависает.
Было решено заменить систему на дистрибутив Askozia, который так же как Astlinux можно штатно установить на Disk on Module, а так же поддерживает из коробки ISDN BRI адаптеры на базе HFC чипа.
Вся операция заняла около часа. Дольше всего занял бэкап DoM на компьютере с Windows, для чего заранее подготовленные утилиты не подошли, был найден и использован аналог утилиты dd для windows.
Запись образа с помощью physdiskwriter и запуск системы прошел без проблем. Приятно что DAHDI работает с платами на HFC чипе штатно, а Askozia не подвела и настроила плату двумя кликами. Все настройки понятны и вопросов не вызывают.
Одна особенность настройки, однако, присутствовала. При входящем вызове клиенту должно зачитываться сообщение после нескольких попыток вызова на телефон оператора. В качестве приложения был использован примерно следующий диал план:
1, Dial (SIP/101&SIP/102,8,t)
2,Answer ()
3,Playback (welcome)
4,Goto (internal,200,1)
Где 200 — номер группы вызова, настроенной внутри askozia. Однако в такой ситуации происходило странное — если оператор принимал вызов до проигрывания приветствия, то после того как трубка была положена вызов от этого номера приходил снова.
Причина оказалась проста, на основе написанного в вебе диалплана, в диалплане создавалась запись вида:
_[a-zA-z0-9],1, Dial (SIP/101&SIP/102,8,t)
При завершении вызова происходил переход на h экстенжен, который не определен отдельно, а подпадает под определенный шаблон, поэтому вызов повторно возвращался в определенный диалплан. После того как проблема найдена её просто исправить добавлением одной строки в начало определенного уже приложения:
1, ExecIf ($["${EXTEN}" = "h"]?Hangup ())