Asterisk 1.6: нововведения
Представляю вашему вниманию переведённый и частично доосмысленный список изменений 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). Служит для отладки диалплана
