Asterisk Dialplan:Стандартные расширения
Расширение диалплана Asterisk (екстеншен) представляет из себя идентификатор,
числовое или буквенное выражение, которое вызывается в контексте диалплана.
Расширением может быть, как номер набираемый абонентом,
так и уникальный идентификатор, для обозначения шагов диалплана.
Стандартные расширения диалплана Asterisk предопределены заранее
и выполняются, обычно, в связи с какими-либо событиями:
- a: Вызывается, когда пользователь нажимает '*' во время проигрывания приветствия системы голосовой почты.
- h: Вызывается, по завершению вызова(hangup).
- i: Вызывается, при попытке вызова неизвестного екстеншена (invalid).
- o: Расширение оператора, используется для обработки нажатия нуля в системе голосовой почты.
- s: Стартовое расширение в контексте. Очень часто используется, просто как символ расширения.
- t: Вызывается, при наступлении состояния таймаута.
- T: Вызывается, при наступлении состояния абсолютного таймаута, заданного функцией AbsoluteTimeout(absolute).
- e: Перехват расширений i,t и T для обработки ошибки в едином месте. Для выяснения типа ошибки может быть использована функция function 'EXCEPTION'()
- failed: Используется, если auto-dial out вызов завершился неудачно (который имеет определённый контекст, приоритет и расширение).
- fax: Используется для определения факса на DAHDI каналах.
- talk: Используется совместно с BackgroundDetect.
Краткая расшифровка назначения.
- s: (Start) – Старт. В основном, используется в плане набора когда в контекст поступает вызов, не содержащий конкретной информации о вызываемом екстеншене. По примеру обычной телефонной линии: когда поступает вызов, мы слышим, что телефон звонит, и больше ничего не можем сказать об этом вызове и кому он адресован. Даже если мы знаем номер звонящего, у нас должна быть точка в контексте, с которой мы бы могли начать обработку этого вызова. Также, можно представить екстеншен s, как список команд плана набора, которые будут выполнены по умолчанию для абонентов, попавших в какой-либо контекст.
- t: (Timeout) – Тайм-аут. Команды этого экстеншена будут выполнены, если вызывающий абонент не произвел никаких действий в течение заданного времени после того, как ему было проиграно сообщение или по истечению таймаута команды WaitExten, наример. Также используется для отключения бездействующих линий.
- T: (AbsolutTimeout) – Абсолютный Таймаут. Используется для вызовов, которые были завершены из-за ограничения продолжительности вызовов, установленной функцией AbsoluteTimeout(absolute). Например, для проигрывания голосового уведомления приложением Asterisk app: Playback.
- h: (Hangup) – Отбой. Используется при завершении вызова. По завершению вызова, если задано стандартное расширение h, оно будет выполнено. Таким образом можно выполнить какое-либо действие, сохранить или передать данные о вызове и тд.
- i: (Invalid) Используется, если в контексте вызывается неизвестный екстеншен или получен неопределенный в контексте DTMF ввод в голосовом меню.
Замечание.
Использование этих екстеншенов может изменить содержание ваших CDR записей, что может Вам совсем не понравиться, например: Поле dst больше не будет содержать набранный номер! Как обходной маневр, Вы можете исследовать команду Dial() с опцией 'g' («go on in context») и обдумать использование ResetCDR(w) и/или NoCdr().
Стандартные приоритеты
- hint: Приоритет 'hint' используется для ассоциации екстеншена с Астериск каналом, для того, чтобы можно было мониторить состояние этого канала, как состояние екстеншена (телефон не может обращаться к каналам, а только к экстеншенам).
В Asterisk, канал (технология/устройство) может иметь несколько состояний (недоступен, в использовании, занято, посылка вызова, и т.д.), но расширение – это только метка для последовательности приложений. Как бы то ни было, когда сообщая состояние канала к внешнему устройству, типа receptionist консоли, вы не можете использовать внутренние названия каналов Астериска, но должны использовать имя внешнего опознаваемого ресурса, обычно номер расширения.
~~socialite~~