Парковка вызовов в Asterisk


По умолчанию, екстеншен с номером 700 используется для парковки вызовов. Для этого, в процессе разговора, нажмите # для начала процедуры переадресации вызова, потом наберите номер 700. Сервер Asterisk сообщит Вам номер екстеншена, на который будет запаркован вызов, обычно это номер 701 или 702. Теперь положите трубку - вызывающий абонент будет поставлен на удержание на сообщенный Вам номер экстеншена. Теперь идем к другому телефонному аппарату и набираем сообщенный номер, например 701, и voilá - продолжаем разговор с нашим абонентом. Если абонент находился в состоянии "парковки" дольше, чем тот промежуток времени, который Вы определили в конфигурации, тогда сервер Asterisk снова будет вызывать первоначально набранный абонентом номер екстеншена.

Для использования в простом плане набора сначала отредактируйте файл features.conf согласно Вашим требованиям, потом внесите следующую строку в Ваш файл extensions.conf:

include => parkedcalls

Если Вы используете более сложный план набора и хотите иметь возможность использовать команду Goto() для создания более сложного обработчика 'парковки вызовов', тогда Вам необходимо создать обработчик для стандартного екстеншена 'i', который будет обрабатывать вызовы на неиспользуемые парковочные лоты (parkinglot), а так же для стандартного екстеншена 's', куда будет передано управление, для абонента, который вышел из запаркованного состояния по истечении таймаута, например:
 ...
 exten => somecontext,3,Goto(parkinglot,${ARG1},1)
 ...

 [parkinglot]
 exten => s,1,NoOp(сюда будет передано управление, для вызова, который "выпал" из парковочного лота по таймауту)
 ...
 include => parkedcalls
 exten => i,1,Playback(pbx-invalidpark)
 exten => i,2,Hangup


Замечания

  • Сервер не будет показывать екстеншены, используемые для парковки вызовов, при использовании CLI команды 'show dialplan'.
  • Вам необходимо 'перезапустить' сервер Asterisk после внесения изменений в файл - features.conf, использование CLI команды 'reload' недостаточно.
  • Для пользователей необходимо разрешить функцию перевода вызова, чтобы они могли воспользоваться функцией парковки вызова, следовательно, проверьте наличие параметров 't' и 'T' в команде Dial().
  • Переадресация вызовов средствами Asterisk работает только в том случае, когда сервер находиться на пути следования медиаданных (Этого можно гарантированно добиться, например, указав для пользователей параметр: "canreinvite=no" в файле конфигурации: sip.conf.)

Существует одна проблема с использованием этой функции для предоставления услуг в коммерческой среде. Она заключается в том, что для парковки вызовов используется только один номер. Следовательно, при предоставлении VOIP услуг различным клиентам, может возникнуть ситуация, когда Ваш клиент 'A' паркует вызов и получает сообщение, что вызов был запаркован на номер 701, то в это время Клиент 'B' может набрать 701 и соединиться с абонентом, которого запарковал клиент 'A'. На данный момент не существует способов, чтобы отличить один запаркованный вызов от другова и определить, кто может "снять" запаркованный вызов, а кто - нет. Также в плане набора нет средств, чтобы определить, на какой экстеншен был запаркован вызов (701, 702 и т.д.). Если бы была доступна эта информация в плане набора, которую можно было бы использовать для своих целей (обратите внимание, что при парковке вызова, выполнение команд плана набора приостанавливается на команде с текущим приоритетом), то можно было бы где-нибудь сохранить код доступа клиента и в, написанном отдельно фильтре, отсеивать тех, кто не может "снять" этот вызов и пропускать тех - кто может.

Конечно, оптимальным решением была бы возможность использования контекстов для вызовов, который Вы могли бы указать в плане набора при его парковки и "снятии" (picked up) (различные парковочные лоты - "parking lots" ). В качестве альтернативного решения могло бы быть использование команды ParkAndAnnounce, которая бы устанавливала некоторую переменную (например, ${PARKED_CHANNEL} или что-то подобное), когда она отправляет вызов с анонсом. (Flobi)


Ссылки по теме: