Asterisk 1.6: нововведения

25 октября 2008, 20:07

Представляю вашему вниманию переведённый и частично доосмысленный список изменений Asterisk 1.6. Я выделил наиболее заметные и важные изменения (на мой взгляд) отдельно. Кое-что поменялось местами, кое-что удалено. Для тех, кто ещё самостоятельно не прочитал английский вариант - будет пожалуй полезно. Вкратце asterisk 1.6 это:

  • Экспериментальная поддержка TCP/TLS (экспериментальная) и таймеров сессий в SIP. А так же улучшенная поддержка NAT и внедрение STUN протокола
  • Поддержка ОКС-7 в DAHDi
  • Факс-приложения “из-коробки” с возможностью терминации Т.38
  • Улучшенная поддержка для HD звуковых кодеков
  • Множество новых модулей, существенно расширяющих сферу применения Asterisk: app_jack, res_phoneprov, res_config_ldap и другие

Большое количество изменений (а не нововведений) описано в UPGRADE.txt, который так же очень рекомендуется к прочтению (пока без перевода). Частичный перевод обоих документов также доступен на wiki

Ключевые нововведения в 1.6.0:

  • AMI: Интерфейс менеджера претерпел множественные изменения и версия увеличена до 1.1. Полный список изменений в doc/manager_1_1.txt. Основная масса изменений касается унификации вывода команд и уменьшения общего количества различных событий и действий
  • AMI: Поддержка TLS для AMI и HTTP сервера
  • SIP: Поддержка таймеров SIP сессий. Эта возможность позволяет корректно обнаруживать и удалять сессии, которые не были корректно завершены из-за неполадок сети или сбоев другой стороны
  • SIP: Добавлена экспериментальная поддержка TCP и TLS транспорта для SIP сигнализации. Подробности об использовании в siptls.txt и sip.conf.sample
  • SIP: Улучшенная поддержка NAT и STUN. В опциях bindaddr, externip и externhost теперь могут быть использованы номера портов, так же как и STUN сервер для обнаружения портов для этих SIP сокетов. Подробнее в sip.conf.sample, секция ‘NAT’
  • SIP: Добавлена поддержка T.140 стандарта передачи текста в SIP/RTP
  • DAHDI: Поддержка системы сигнализации SS7, она же ОКС-7 (с использованием библиотеки libss7)
  • Module: Добавлен новый кодек - codec_resample, который служит для изменения частоты дискретизации между 8 kHz и 16 kHz для улучшения поддержки широкополосных кодеков
  • Module: Добавлен новый модуль - res_phoneprov. Он позволяет автоматически настраивать телефоны с помощью шаблонов, с использованием синтаксиса переменных Астериска. Теоретически возможно подготовить шаблоны настроек для большинства телефонов, настраиваемых по HTTP, возможна настройка одной линии на телефон, приложены примеры для настройки телефонов Polycom
  • Module: Новый модуль - app_jack, предоставляющий интерфейс для JACK (JackAudio Connection Kit). Позволяет передавать аудио-поток для анализа или модификации во внешние приложения двумя различными способами: терминируя потоки на JACK или предоставлять возможность внешней программе модифицировать звук перед передачей слушателю. Подробнее уже писалось.
  • APP: Приложения ReceiveFAX() и SendFAX() с возможностью терминировать T.38
  • APP: В GoSub исправлены все проблемы, ранее присущие Maсro. Кроме того это приложение теперь может работать с параметрами, что позволило в AEL использовать его вместо Macro

Полный список изменений:

AMI (TCP/TLS/HTTP)

  • Новое действие ‘CoreShowChannels’ для просмотра существующих в текущий момент каналов и некоторых данных о них
  • Действие ‘SIPshowregistry’ для просмотра списка SIP регистраций
  • cdr_manager использует для событий уровень “cdr” вместо уже очень нагруженного уровня “call”
  • Пользователи, настроенные в managers.conf теперь хранятся в памяти, при изменении этого файла требуется перезазгрузка конфигурации
  • Добавлена переадресация URI для встроенного HTTP сервера
  • Добавлено поле ‘Strategy’ в событие QueueParam, которое отображает используемую стратегию работы очереди
  • Добавлена поддержка https для встроенного веб-сервера. Детали настройки в http.conf.sample
  • Новое действие - GetConfigJSON, которое позволяет получить значения конфигурационного файла в JSON формате, что позволяет упростить и ускорить работу AJAX приложений
  • Действие ‘Bridge’, позволяющее соединить любые два канала, активные в данный момент в системе
  • Команда ‘ListAllVoicemailUsers’ позволяющая получить листинг всех пользователей голосовой почты
  • Команды ‘DBDel’ и ‘DBDelTree’
  • Новое событие Masquerade
  • Существенно обновлены все действия для работы с конфигурационными файлами и категориями и параметрами внутри них
  • Новое событие JitterBufStats для IAX2 каналов

Изменения CLI

  • Добавлен штатный способ выполнения последовательности CLI команд при старте Астриска. Команды перечисленные в секции startup_commands файла cli.conf будут выполнены при старте
  • Возможность устанавливать уровень отладки (debug и verbose) для отдельных файлов исходного кода
  • Команда ‘devstate change’, позволяющая задать состояние “Custom:” устройства, поддерживаемого через func_devstate, из CLI
  • Новая команда ‘core show hint’, отображающая подробности статуса указанного экстенжна
  • Новая команда  ‘core show settings’, отображает настройки asterisk.conf
  • Новая команда  ‘core show channels count’
  • Команды ‘queue pause member’ и ‘queue unpause member’
  • Возможность установки ограничений (”ulimit”) без перезапуска Asterisk
  • Улучшенная ‘agi debug’ для упрощения отладки при высокой нагрузки системы
  • Добавлена команда ‘dialplan set extenpatternmatching true/false’
  • Добавлена команда ‘manager reload’ для чтения конфигурации AMI в случае её изменения
  • Возможность отображения командой ‘voicemail show users’ так же и пользователей, описанных через ARA (реалтайм)
  • Новая команда ‘core set chanvar’ для установки переменных в канале через CLI
  • Команда ‘features reload’ для применения конфигурации из файла features.conf
  • В вывод команды ‘dialplan show’ добавлена информация о зависимости выполнения диалплана по CallerID
  • Добавлена команда ‘dahdi show version’
  • Добавлены команды CLI: ’skinny show device’, ’skinny show line’ и ’skinny show settings’

Изменения AGI

  • Добавлена команда SPEECH для интеграции распознавания голоса в AGI приложения
  • Если загружен app_stack, GOSUB родная AGI команда, позволяющая задействовать “подпрограммы” диалплана. EXEC с приложением Gosub не будет работать в данном случае
  • Совмещены приложения AGI и DeadAGI, с устареванием последней

Изменения в SIP

  • Новый реалтайм класс “sipregs”, позволяющий в реальном времени хранить динамические данные в отдельной таблице БД. “sippeers” будет использована как и прежде для статических данных
  • По-умолчанию SIP будет указывать версию Астериска в передаваемой строке имени клиента
  • SIP добавляет дополнительный заголовок к CANCEL который сообщает о том, что звонок был принят где-то в другом месте, если в Dial() было указано несколько адресатов
  • Новая опция ‘match_auth_username’ в sip.conf, изменяющая порядок поиска пользователя при входящем INVITE с наличием авторизационных данных. Опция экспериментальная
  • Новая опция “busylevel” для определения кол-ва каналов, при которых устройство считается занятым. Так же это значение добавлено в функцию SIP_PEER()
  • Функция SIPPEER добавлены новые параметры для получения номера порта, параметров callgroup и pickupgroup
  • Опция “checkmwi” удалена из sip.conf, в связи с изменением механизма работы MWI, подробности в описании опций “pollmailboxes” и “pollfreq” в voicemail.conf
  • Добавлена опция rtpdest в функцию CHANNEL(), отображающая адрес RTP удалённой системы
  • Добавлены переменные SIPREFERRINGCONTEXT, SIPREFERREDBYHDR которые устанавливаются если имел место перевод вызова с использованием REFER
  • Теперь 100 Trying не отправляется по-умолчанию в ответ на REGISTER, так как RFC не требует этого. Однако, для телефонов которые требуют такого поведения добавлена опция “registertrying”, возвращающая прежнее поведение
  • Новая опция ‘callcounter’ (глобальный уровень и уровень настроек устройства) добавлена для лучшей поддержки статуса абонентов, вместо call-limit
  • Опции для установки T1 и B таймеров на глобальном и уровне устройства. Изменение этих параметров поможет уменьшить таймауты для медленных SIP серверов. Эта настройка предназначена для опытных пользователей, изменяйте её только если понимаете что делаете
  • Синтаксис строки вызова для SIP изменён, чтобы добавить возможность указывать в поле To: произвольное значение
  • Новая опция ‘qualifyfreq’ (глобальная и на уровне устройства), которая позволяет указать частоту отправки qualify пакетов
  • Добавлена опция t38pt_usertpsource. Подробности в sip.conf.sample

Новое в IAX2

  • Добавлена опция trunkmaxsize для управления предельным количеством линий в пределах одного транка
  • Добавлена опция srvlookup в iax.conf для использования DNS SRV записей
  • Добавлена поддержка OSP. Значение токена может быть получено и установлено с помощью функции CHANNEL()

Изменения Local канала

  • Функциональность статуса устройства в драйвере канала Local была улучшена для правильного отображения состояний INUSE или NOT_INUSE, когда используется канал типа Local, вместо состояния UNKNOWN, для существующего экстенжена
  • Поддержка джиттер-буфера. Это позволит использовать существующую реализацию джиттер буфера при входящих звонках на приложения Asterisk вроде Voicemail или MeetMe

Изменения в DAHDI канале

  • В Индии некоторые операторы передают CallerID через dtmf. Опция cidstart=polarity_IN позволяет указать тип передачи, при котором номер звонящего передаётся через dtmf после переполюсовки
  • Добавлена поддержка установки автоматических переменных для каналов, заданных в chan_dahdi.conf
  • Добавлены две опции: “mwimonitor” и “mwimonitornotify”, которые разрешают мониторинг индикации голосовой почты на FXO портах. При смене состояния MWI вызывается скрипт, указанный в mwimonitornotify
  • Добавлен тип сигнализации ‘auto’, который делает попытку использовать тип сигнализации, указанный в DAHDI. Это значение теперь используется по-умолчанию
  • Команда CLI ‘dahdi set dnd’ позволяющая управлять режимом линии “не беспокоить” из командной строки

Другие каналы

  • Добавлена экспериментальная поддержка отправки и получения видео в chan_oss. Для работы требуется SDL и ffmpeg/avcodec, плюс к этому Video4Linux или X11 для захвата видео потока из соответствующего источника
  • Добавлено пропускание G729 кодека в chan_phone для карт Sigma Designs
  • Исправлена поддержка кодеков в chan_skinny
  • Добавлена опция bindaddr в gtalk.conf
  • В H.323 добавлено оповещение о удержании вызова противоположной стороной диалога
  • Поддержка установки бита приоритезации для VLAN трафика (802.1p). Более подробная информация в документации и файлах конфигурации каналов

Новые каналы

  • Новый канал - chan_unistim. новый канал позволяет использовать с Asterisk телефоны Nortel i2002, i2004 и софтфон i2050. Подробности в doc/unistim.txt и configs/unistim.conf.sample
  • Новый канал - chan_console, использующий кросс-платформенный аудио интерфейс portaudio. Работает с Mac CoreAudio, так же поддерживает другие интерфейсы

Изменения DUNDi

  • Возможность указывать аргументы для приложения Dial() при использовании вложений DUNDi в диалплане
  • Возможность динамически указывать веса для результатов запроса. реализовано с помощью установки глобальной переменной или функции диалплана. Используя функцию SHELL() возможно выполнить внешний скрипт, устанавливающий значимость каждого результата
  • Две новые функции, DUNDIQUERY() и DUNDIRESULT(). Функции позволяют создать запрос к DUNDi из диалплана, получить количество результатов и организовать доступ к ним

Изменения голосовой почты

  • Добавлена возможность настройки некоторых сообщений проигрываемых в Voicemail, настраивается в voicemail.conf
  • Внутренняя поддержка MWI сильно переработана в Asterisk. Приложение Voicemail теперь будет само оповещать модули, подписанные на получение такой информации, о появлении новых писем в ящиках голосовой почты. Это так же означает, что изменения файлов (или IMAP папок) голосовой почты извне нужно регулярно проверять, для чего добавлены опции poolmailboxes и poolfreq в voicemail.conf
  • Добавлено хранение приветствия на IMAP сервере
  • Возможность перенастроить клавиши forward, reverse, stop, and pause для управления прослушиванием сообщения
  • Включение SMDI в голосовой почте производится опцией smdienable
  • Опция “lockmode” добавлена в asterisk.conf, для указаня метода блокировки файлов voicemail, а так же потенциально каких-либо других в будующем. По-умолчанию используется старый метод, доступен метод “flock”, который нужно использовать, например, на смонтированных SMB/CIFS разделах
  • Добавлена возможность сохранять удалённые сообщения, для того чтобы их было возможно восстановить при удалении по неосторожности
  • Переработан SMDI интерфейс в Asterisk. Новый способ доступа к SMDI информации через функции SMDI_MSG_RETRIEVE() и SMDI_MSG(). В файле smdi.conf можно указать соответствие ID SMDI станции и ящика голосовой почты Asterisk. Так же изменён механизм сообщения об изменении в MWI

Изменения в очередях вызовов

  • Глобальная опция ’shared_lastcall’, предназначенная для работы wrapuptime сразу для всех очередей, в которых участвует агент
  • Добавлена функция QUEUE_VARIABLES() для установки переменных в очередях. Добавлены опции setqueuevar и setqueueentryvar для каждой очереди, подробности в queues.conf.sample
  • Опция keepstats в queues.conf, позволяющая сохранять статистику во время перегрузки модуля
  • Опция setinterfacevar в queues.conf теперь так же устанавливает переменную MEMBERNAME, которая содержит имя агента, принявшего вызов
  • Добавлена возможность запускать макрос в момент соединения агента очереди и звонящего клиента, подробности в queues.conf.sample
  • Опция min-announce-frequency в queues.conf, которая регулирует минимальное время между оповещениями позиции звонящего, для того случая если позиция меняется достаточно часто
  • Добавлена дополнительная информация в события EXITWITHTIMEOUT и EXITWITHKEYв queue_log
  • Добавлена возможность queues настроенным в queue.conf (не-реалтайм) содержать агентов, описание которых содержится в реалтайм хранилище
  • Добавлены стратегии “linear” (линейная) и “wrandom” (случайный выбор с весом)
  • Добавлены переменные диал-плана QUEUE_MAX_PENALTY и QUEUE_MIN_PENALTY, которые так же могут изменяться во время вызова с помощью правил в queuerules.conf
  • Новый параметр в настройке участника очереди - state_interface. Может быть использован, когда вызов агента идёт через один канал (например Local), а о реальном состоянии агента можно судить по другому каналу (например, SIP)

Изменения в приложении конференций

  • Опция ‘o’ (talk optimization) удалена и теперь действует всегда
  • При создании конференции UNIQUE канала, вызвавшего создание комнаты, сохраняется. Затем, на каждом из каналов, участвующих в конференции устанавливается переменная MEETMEUNIQUEID равная сохранённому ID
  • Новое приложение MeetMeChannelAdmin(), которое похоже на MeetMeAdmin(), за исключением того, что для настройки указывается имя канала, а не номер конференции. Очень полезно при использовании совместно с опцией ‘X’ в ChanSpy()
  • Добавлена опция ‘C’ в Meetme позволяющая продолжить выполнение диал-плана после исключения участника из конференции
  • Добавлена функциональность планирования конференций в реальном времени через ARA. возможно задать временные рамки конференции и проигрывать сообщение о невозможности присоединиться к конференции раньше срока. Возможно указать предельное количество участников.
  • Добавлены опции S() и L() для приложения MeetMe(). По действию аналогичны таким же опциям приложения Dial(). Позволяют предупреждать участника конференции об истечении лимита времени присутствия в комнате и отключать по истечению времени
  • Добавлена возможность указывать класс музыки, проигрываемый во время нахождения единственного участника в конференции при использовании опции ‘M’

Изменения в других приложениях диал-плана

  • Добавлена поддержка аргументов функции Gosub()
  • новая опция в Dial() для указания не отмечать вызов пропущенным, если вызов был принят на одном из нескольких вызываемых IP телефонов
  • Увеличена точность, с которой возможно указать таймауты в приложениях:
    • Wait(), WaitExten(), Congestion(), Busy(), Read(), WaitForRing() - все перечисленные функции в качестве таймаута принимают значение с плавающей точкой
    • SpeechBackground() - уточнение в документации, что таймаут - целое количество секунд
  • Добавлена опция ’s’ в приложение Page()
  • Добавлены команды ‘E’ и ‘V’  ExternalIVR()
  • Добавлены опции ‘o’ и ‘X’ в Chanspy()
  • Новое приложение - Bridge(), позволяющее соединить канал вызывающего с произвольным активным каналом в системе
  • Добавлена опция ‘n’ в приложение SpeechBackground(), указывающее производить или нет ответ на канале, если он ещё сделан не был
  • Добавлена возможность прослушивания музыки вместо сигнала вызова при работе приложения SLATrunk()
  • Приложение Read() больше не выходит из диалплана при возникновении ошибки, вместо этого переменная READSTATUS устанавливается равной ERROR
  • Добавлена опция ‘m’ в приложение Directory(), которая позволяет выводить по 8 имён, не спрашивая после каждого подтверждения
  • Новая опция в приложении AMD() для указания максимальной длительности одного слова. См. команду консоли “show application AMD”для получения подробного описания
  • GotoIfTime() может осуществлять переход в случае не срабатывания условия, как приложение GoTo()
  • Приложение ChannelRedirect() больше не выходит из диал-плана если канал назначения не существует. Теперь переменная CHANNELREDIRECT_STATUS будет иметь значение SUCCESS при удачном выполнении или NOCHANNEL если канал не найден
  • Серия новых параметров приложения ForkCDR(), устанавливающие порядок работы с полями CDR записи. Подробнее в CLI описании команды

Функции диал-плана

  • Добавлена функция DEVICE_STATE(), позволяющая получить состояние любого устройства в диал-плане и создавать Custom: устройства и управлять их состоянием из диалплана
  • В функцию CALLERID() добавлены параметры “pres” и “ton”
  • Добавлены функции: LOCK(), TRYLOCK(), и UNLOCK(), которые предоставляют одноуровневый доступ к мьютексу (блокировке) плана набора. При этом невозможны взаимные блокировки (deadlock), команда LOCK() позволяет выполнить только одну блокировку для любого заданного канала. Также, блокировка автоматически снимается, когда канал освобождается.
  • Функция HINT(), которая позволяет узнать информацию о имени или списке устройств, сопоставленных экстенжену для отображения его состояния
  • Функция EXTENSION_STATE() позволяет получить состояние любого эктенжена
  • Функция SYSINFO() для получения системной информации
  • Функция DIALPLAN_EXISTS(), которая позволяет проверить существование цели в диалплане до перехода
  • Функции TOUPPER() и TOLOWER(), приводящие строки к верхнему и нижнему регистру соответственно
  • Функции ENUMQUERY() и ENUMRESULT(). Первая позволяет сделать ENUM запрос из диалплана, результат будет помещён в кэш. Вторая функция позволяет получить результат без генерации серии DNS запросов
  • При соединении каналов, сервер Asterisk устанавливает BRIDGEPVTCALLID в значение “unique ID” драйвера канала для вызова (это не значение “Asterisk call ID” или “unique ID”), при условии, что драйвер канала это поддерживает. Для канала SIP, вы получаете “SIP call-ID” для соединенного канала, который Вы можете сохранить в CDR, как дополнительное поле (custom field)

Изменения MoH

  • Поддержка получения информации о классах MOH в реальном времени из ARA. В дополнении имеется настройка, позволяющая кешировать полученные из БД классы для уменьшения количества запросов
  • Новая опция “digit”, эта опция, определённая цифре для одного из класса позволяет переключиться на него, нажав заданную цифру при прослушивании MoH

AEL

  • AEL перестроен на использование GoSub вместо Macro, что должно решить проблему с ограничением величины стека. Для Macro возможно выполнение 7ми вложенных процедур, для GoSub эта величина ограничена только размером памяти (несколько тысяч не предел)
  • Новая утилита utils/conf2ael, позволяющая сделать первый шаг при переходе от extensions.conf на extensions.ael. Утилита не закончена до конца, поэтому после её работы полученный файл придётся доработать “напильником”

Изменения функций res_features

  • Встроенный метод осуществления перевода вызова с согласованием изменён, чтобы обеспечить возможность возврата вызова в случае неудачи. Регулируется опциями “atxferdropcall”, “atxferloopdelay” и “atxfercallbackretries” в features.conf
  • Модуль перемещён в главный исполняемый файл и как модуль более не существует
  • Добавлена переменная TOUCH_MONITOR_PREFIX, позволяющая задать имя файла для записей разговоров, активируемых пользователем
  • Добавлена опция parkedcalltransfers в features.conf
  • Поддержка различных именованных групп функций в features.conf. Функция может быть единожды описана, а затем записана в различные группы
  • Приложение ParkedCall() теперь позволяет иметь несколько зон парковки

Поддержка языков

  • Бразильский португальский (pt-BR) для голосовой почты и ядра системы (say.c)
  • Добавлена поддержка Венгерского языка для произношения чисел, даты и времени
  • Добавлена поддержка Тайваня (tw) в голосовой почте

Ведение логов

  • Набор новых опций в logger.conf, позволяющих организовать ротацию логов схожим с syslog образом
  • Опция exec_after_rotate в logger.conf, позволяющая запустить команду после очередной ротации лога
  • Поддержка записи лога работы очереди в ARA вместо тестового файла queue_log

Детализация вызовов

  • Модуль cdr_manager теперь имеет в конфигурации секцию [mappings], так же как и cdr_custom, что позволяет добавлять в AMI события значения дополнительных CDR переменных
  • Добавлен модуль cdr_adaptive_odbc, адаптирующийся к структуре клиентской БД
  • Модуль CDR для Postgres поддерживает некоторые функции адаптивности из модуля cdr_adaptive_odbc
  • Новая опция ‘e’ приложения ResetCDR(), которая разрешает ведение CDR записей, если ранее они были отключены приложением NoCDR()

Новые модули

  • Добавлен новый модуль CDR - cdr_sqlite3_custom
  • Добавлен новый модуль конфигурации реального времени - res_config_sqlite
  • Добавлен новый модуль - res_config_curl, который позволяет манипулировать с настройками реального времени на удалённом сервере с помощью HTTP POST запросов. Для работы требуется загруженный модуль func_curl
  • Добавлен новый модуль - res_config_ldap. Модуль позволяет использовать LDAP сервер как источник данных для конфигурации в реальном времени
  • Модуль pbx_lua, дающий возможность писать диал-планы на lua. Подробнее о написании диалплана таким образом в примере configs/extensions.lua.sample

Разное

  • Возможность устанавливать верхние биты ToS непривеллигированному пользователю в Linux, используя libcap . Если configure не может найти libcap, можно использовать опцию –with-cap для указания пути
  • Новая опция strictrtp в rtp.conf. Если включена, то RTP пакеты, приходящие с неизвестных адресов, будут игнорированы
  • Исходные коды iLBC более не входят в поставку в связи с лицензионными проблемами (более детальные инструкции в UPGRADE.txt)
  • Опция maxfiles в asterisk.conf, позволяющая указать максимальное количество файлов, которое может открыть Астериск при запуске
  • Добавлена опция jittertargetextra
  • Новый алгоритм для поиска соответствия экстенженов, основанный на деревьях. Включается опцией “extenpatternmatchingnew” в extensions.conf во время работы данный алгоритм может быть включен с помощью CLI команды ‘dialplan set extenpatternmatchingnew true/false’. По-умолчанию отключен в связи с неполным повторением работы предыдущего алгоритма
  • Новая опция -s при удалённом подключении к консоли астриска (rasterisk, asterisk -r) для указания какой именно сокет использовать для подключения
  • Добавлено создание лога к make update файле update.log
  • Новый флаг компиляции - CHANNEL_TRACE, который позволяет  производить трассировку каналов, доступную через функцию CHANNEL(trace). Служит для отладки диалплана