Стандартные расширения


  • a: Вызывается, когда пользователь нажимает '*' во время проигрывания приветствия системы голосовой почты.
  • h: Вызывается, по завершению вызова.
  • i: Вызывается, при попытке вызова неизвестного екстеншена.
  • o: Расширение оператора, используется для обработки нажатия нуля в системе голосовой почты.
  • s: Стартовое расширение в контексте.
  • t: Вызывается, при наступлении состояния таймаута.
  • T: Вызывается, при наступлении состояния абсолютного таймаута, заданного функцией AbsolutTimeout.
  • e: Перехват расширений i,t и T для обработки ошибки в едином месте. Для выяснения типа ошибки может быть использована функция EXCEPTION()
  • failed: Используется, если auto-dial out вызов завершился неудачно (который имеет определённый контекст, приоритет и расширение).
  • fax: Используется для определения факса на Zap каналах.
  • talk: Используется в конъюнкции с BackgroundDetect.


Краткая расшифровка назначения.


  • s: Start – Старт. В основном, используется в плане набора когда в контекст поступает вызов, не содержащий конкретной информации о вызываемом екстеншене. По примеру обычной телефонной линии: когда поступает вызов, мы слышим, что телефон звонит, и больше ничего не можем сказать об этом вызове и кому он адресован. Даже если мы знаем номер звонящего, у нас должна быть точка в контексте, с которой мы бы могли начать обработку этого вызова. Также, можно представить екстеншен s, как список команд плана набора, которые будут выполнены по умолчанию для абонентов, попавших в какой-либо контекст.

  • t: Timeout – Тайм-аут. Команды этого экстеншена будут выполнены, если вызывающий абонент не произвел никаких действий в течение заданного времени после того, как ему было проиграно приглашение. Также используется для отключения бездействующих линий.

  • T: AbsolutTimeout – Абсолютный Таймаут. Используется для вызовов, которые были завершены из-за ограничения продолжительности вызовов, установленной функцией ((Asterisk cmd AbsoluteTimeout|AbsoluteTimeout)(). Например, для проигрывания голосового уведомления функцией Playback().

  • h: Hangup – Отбой. Используется при завершении вызова. Может использоваться для проигрыша прощального сообщения перед окончанием вызова. Также, по-видимому, используется в "карточных системах" для фиксации времени окончания вызова для биллинга. Не будет работать для запаркованных вызовов. More...

  • i: Используется, когда в контексте вызывается неизвестный екстеншен или получен неизвестный ввод в голосовом меню.

Замечание.


Использование этих екстеншенов может изменить содержание ваших CDR записей, что может Вам совсем не понравиться, например: Поле dst больше не будет содержать набранный номер! Как обходной маневр, Вы можете исследовать команду Dial() с опцией 'g' ("go on in context") и обдумать использование ResetCDR(w) и/или NoCdr().

Стандартные приоритеты


  • hint: Приоритет 'hint' используется для ассоциации екстеншена с Астериск каналом, для того, чтобы можно было мониторить состояние этого канала, как состояние екстеншена (телефон не может обращаться к каналам, а только к экстеншенам).

В Астериске, канал (технология/устройство) может иметь несколько состояний (недоступен, в использовании, занято, посылка вызова, и т.д.), но расширение – это только метка для последовательности приложений. Как бы то ни было, когда сообщая состояние канала к внешнему устройству, типа receptionist консоли, вы не можете использовать внутренние названия каналов Астериска, но должны использовать имя внешнего опознаваемого ресурса, обычно номер расширения.

A device would then subscribe to the state of the extension of interest and receive status notifications from the supporting technology channel. This is used in the SIP channel (implemented via the SUBSCRIBE/NOTIFY mechanism of RFC-3265) to light up the status lamps on SIP phones.
This is supported in SNOM phones (see also) with their programmable keys set to type "destination", as well as in Polycom (500/600), Aastra ( 480i, 9133i ), and Sayson phones.

Privacy considerations: In sip.conf you can define a subscribecontext= value that determines in which context Asterisk should search for the matching extension when a subscribe request is receved from the phone; however, if the extension doesn't exist in that context Asterisk is going to look for it in the default context! In other words: Everyone can subscribe to a "hinted" extension that is defined in the default context. By the way, specifying an empty subscribecontext is also fine if the phone should not at all subscribe to _any_ context.

Patch/bug 5779 adds hint support for the Local channel construct which allows for monitoring of the parking lot/ parked calls (by checking for existence of a dialplan extension). Will that also work for SIP peers with "regcontext=xxx"?

Likewise bug/patch 5515 (post Asterisk 1.2.0) adds devstate support also for MGCP (so far SIP, IAX and ZAP are supported; "show channeltypes" tell you which channels in your Asterisk support device status notification). Question: Does this patch only show a device which is unavailable (e.g. disconnected), or does it also show "busy"? Answer: Also "busy" (in use).

Also chan_capi-cm v0.6.2 and later comes with basic hint support. It appears, however, that the dynamic naming of CAPI channels that includes the called number makes monitoring of a CAPI line for outgoing calls practically impossible - at least for now.

Note: the 3rd party bristuff patches come with app_devstate that permits state manipulation through the dialplan.

Пример


exten => 200,hint,SIP/phone1 ; this is case sensitive (!) in 1.0.9 and 1.2.0
exten => 200,1,Macro(stdexten,SIP/phone1)

Замечание: As of Nov. '05 there is a bug 5856 describing that in Asterisk 1.0.9 and 1.2.0 the hint argument is case sensitive. So you must use 'SIP' or 'Zap' instead of e.g. 'sip' or 'ZAP'.

Если вы хотите контролировать состояние многоканальных телефонов, используя ускоренный набор, можете сделать так:

exten => 200,hint,SIP/201&SIP/202&SIP/203

Note: This mapping is statically defined at load time and cannot be changed on the fly. The definition must use only constant strings. A variable such as ${EXTEN} or anything else that gets dynamically assigned, therefore makes no sense here.
Udate for v1.2.2: Apparently this limitation has been lifted, see this 1.2.2 ChangeLog entry:

2005-12-07 20:46 +0000 r7382 Kevin P. Fleming
pbx.c: ensure that hints are allowed to use global variable references

Asterisk seems to provide syntax for allowing more than one channel to be mapped to any particular extension with the hint system.

Useful CLI commands for debugging are "SIP show subscriptions", "show hints", "show channeltypes" and "SIP show inuse".
Update Aug. 2005 (for Asterisk 1.2.0)
After months in the bug tracker (bug 3644), we've finally committed a lot of changes to the SIP Subscribe subsystem in Asterisk cvs head:
It now works even if you reload the dial plan
It does not accept subscriptions to extensions without hints
It will terminate subscriptions if the hint does not exist after a dialplan reload

To get this to work properly, you
Add a hint to the dialplan for the extension
Optional: Configure incominglimit for the device (renamed to "call-limit" in Asterisk v.1.2)
Optional: Enable "notifyringing = yes" if you'd also like to see the RINGING state to be notified

Now, you will see if the device is online, if it is occupied in a call or just available for a call. This is confirmed to work with Polycom phones, SNOM phones and Eye-Beam. On e.g. a SNOM you'll get a blinking LED for a ringing call on an extension monitored thru "hint".

Please note that Asterisk will signal "busy" through hint only if the set call-limit (aka incominglimit) value has been reached! This is sub-optimal as soon as you want to a allow only 2 active calls per phone ("line appearances"), however already signal "busy" through NOTIFY/SUBSCRIBE when 1 line is active (Dec. '05). Maybe we'll have another "xxx-limit" setting in the near future to address this.
So, if you don't need to enforce a call-limit on the Asterisk side, then you are probably better of to not set call-limit at all.