Как известно, в телефонии существует два основных вида перевода (или трансфера - transfer) входящих звонков, это:
Attendant Transfer/ consultative transfer - Перевод звонка, при котором оператор, получив информацию от звонящего, ставит звонок на удержание, затем инициирует второй вызов третьей стороне (абоненту, с которым хочет соединиться звонящий), уведомляет о входящем вызове и лишь после разрешения третьей стороны, соединяет с вызывающим абонентом. После этого, оператор кладет трубку и больше никак не влияет на переведенный вызов. Таким образом, оператор остается уверенным в том, что звонящий соединен с нужным абонентом. В случае, если у оператора не получается дозвониться до вызываемого абонента или он сообщает, что не может в данный момент принять звонок, оператор снимает звонящего с удержания и просит его перезвонить позднее.
Blind Transfer - Даже из названия становится понятно, что данный вид перевода является “слепым”, т.е оператор переводит звонок, не уведомляя третью сторону в входящем вызове. Не трудно догадаться, что если вызываемый абонент занят или не отвечает, то вызов попросту обрывается.
Согласитесь, ситуация крайне нежелательная, клиентам приходится заново набирать номер, общаться с оператором, объяснять, что разговора не состоялось и т.д. Теряется время, лояльность клиентов и интерес.
В IP телефонии на базе Asterisk с данной проблемой познакомились, когда начали осуществлять миграцию с аналоговых АТС. Дело в том, что аналоговые АТС по умолчанию поддерживают так называемый Transfer Recall. Данный функционал заставляет АТС перезванивать оператору, если звонок между вызывающим и вызываемым абонентами, по каким то причинам не состоялся. Оператор, в свою очередь, просил вызывающего абонента перезвонить.
Проблема с потерянными вызовами после “слепого” перевода имела место быть вплоть до Asterisk версии 1.6, когда в файл feature.conf в Attended Transfer (atxfer) не был введен дополнительный функционал atxferdropcall , со значениями yes и no
atxferdropcall = yes - Звонок не будет возобновлен после неудачного перевода
atxferdropcall = no – Звонок будет возобновлен после неудачного перевода
По умолчанию в Asterisk данная переменная имеет значение yes. Таким образом, чтобы решить проблемы с потерянными вызовами при переводе, нужно просто изменить файл feature.conf следующим образом:
[general] parkext => *700 parkpos => 701-720 context => parkedcalls parkedcalltransfers = caller transferdigittimeout => 1 xfersound = beep xferfailsound = beeperr atxfernoanswertimeout = 15 atxferdropcall = no atxferloopdelay = 10 atxfercallbackretries = 2 [featuremap] blindxfer => * atxfer => #
Где,
atxfernoanswertimeout - Время, которое необходимо для дозвона обратно;
atxfercallbackretries - Количество попыток повторного дозвона