Вы не авторизованы

Вы можете читать сообщения. Если вы хотите создать новую тему или присоединиться к обсуждению, пройдите процедуру регистрации или авторизуйтесь.

RSS
Перевод звонка
 
Добрый день, коллеги

Разбираюсь с переводом звонков, не пойму что надо крутить.
Есть такой код в процедуре обработки события АТС:
Код
// Новая линия на АТС      
   ИначеЕсли Событие = "Newchannel" Тогда 
   
      СтруктураПолей = РазобратьОтветАстериска(Данные);
      НомерТелефона = СтруктураПолей.Получить("calleridnum");
      ЭтоВнутреннийПеревод = (СтруктураПолей.Получить("context") = "from-internal");

      Канал = СтруктураПолей.Получить("channel");
      
      Если СтрНайти(Канал, "129") > 0 Тогда
         ПеревестиЗвонок(Канал, "89993335566");
      КонецЕсли;

И далее процедура непосредственно перевода:
Код
&НаКлиенте
Процедура ПеревестиЗвонок(Канал, НомерТелефона)

   Channel      =   Канал;                      // Channel - Название канала, для которого производиться перевод вызова (обязательный параметр)
   Context      =   "from-internal";            //   Context - Название контекста в плане набора, куда переводиться вызов (обязательный параметр)
   Exten      =   НомерТелефона;                //   Exten -Название екстеншена в плане набора, куда переводиться вызов (обязательный параметр)
   Priority   =   "1";                     //   Priority - Номер приоритета в плане набора, куда переводиться вызов (обязательный параметр)
   ActionID   =   "pt1c" + ТекущийНомерТелефона;   //   ActionID -Не обязательный ID команды, который будет возвращен в ответе.
   Результат = "";
   
   Попытка
      
      Оповещение = Новый ОписаниеОповещения("ОповещениеОВыполненииМетода", ЭтаФорма, "ПодслушатьРазговор"); 
      КомпонентаАТС.BeginCallingAtxfer(Оповещение, Channel, Exten, Context, Priority, ActionID, Результат);
      
   Исключение
      Сообщить("Ошибка консультативного перевода звонка");
   КонецПопытки;
   
КонецПроцедуры   
Взял сие дело с обработки панели, но видимо что-то надо ещё. Перевод не идет.
 
Цитата
"Newchannel"
Это не лучший выбор оповещения. Я не рекомендую осуществлять перехват по этому событию. Используйте "NewState".
В "Newchannel" Вы не всегда сможете увидеть "корректный" номер телефона.

Цитата
Одинец Роман написал:
ПеревестиЗвонок(Канал, "89993335566");
Вы пытаетесь переадресовать вызов на "внешний" номер. Убедитесь, что набор номера доступен в контексте "from-internal".
Вы хотите переадресовать вызов "с консультацией" или "в слепую"?

Для "слепого" перевода (без сопровождения) следует использовать другой метод компонента:
http://wiki.miko.ru/doc:1cajam:api:redirect


 
 
Дозвон в контексте from-internal это через BeginCallingOriginate? Это работает.
А в чем разница между консультативным и переводом в слепую?
 
Цитата
Дозвон в контексте from-internal это через BeginCallingOriginate
Это вопрос к администратору АТС. "Originate" также должен "проходить" в этом контексте.
Обычно, для переадрисации контекст может использовать другой.

Цитата
А в чем разница между консультативным и переводом в слепую?
Ознакомьтесь с документацией:
http://wiki.miko.ru/astpanel:enterprise:managed#pereadresacija_vyzovov
В ней найдете два видео ролика.

При работе с SDK разница принципиальная:
  • Слепая переадресация (redirect) - мы переадресуем "чужой" канал на коллегу, наш разговор завершается
  • Консультативная переадресация (Atxfer)- мы переадресуем "свой" канал на коллегу, клиент висит на удержании
 
А сработает ли слепая переадресация до подъема нами трубки?
 
Да, именно так работает функция "Перехват на ответственного".
 
Ясно, спасибо!
 
Попробовал два варианта, оба не пошли.

1. Отслеживаю событие Newstate, делаю сразу redirect до подъема трубки железной тётей.
У звонящего идет соединение и наступает тишина. На переводимый телефон идет звонок, но при ответе тоже самое - тишина.

2. Поступает звонок на железную тётю, далее набирается внутренний номер. Здесь я отслеживаю событие Dial, потому что во всех других я не вижу описание первоначального канала (который поступил на железную тетю). При переводе происходит разъединение.

Перевод делаю так. Попробовал в контексте default - АТС сругалось в трубку женским голосом.
Код
   Channel      = Канал;
   ExtraChannel = "";
   Exten        = "89999999999";
   ExtraExten   = "89999999999";
   Context      = "from-internal";
   ExtraContext = "from-internal";
   Priority     = "1";
   ExtraPriority= "1";
   ActionID     = "123123";
   Result       = "";
   
   Если КомпонентаАТС.Redirect( Channel, ExtraChannel, Exten, ExtraExten, Context, ExtraContext, Priority, ExtraPriority, ActionID, Result) Тогда
      Сообщить(Result);
   КонецЕсли;
Изменено: Одинец Роман - 05.07.2016 17:01:43
 
Некорректно используется метод.
Ознакомьтесь с документацией:
http://wiki.miko.ru/kb:asterisk:ami:redirect
http://asterisk.ru/knowledgebase/Asterisk+Manager+API+Action+Redirect

В данном случае не следует использовать "Extra" параметры.
При отладке того или иного метода следует анализировать логи АТС и логи со стороны 1С.

Лучше "подсмотрите" как реализован наш механизм перехвата на ответственного.
Читают тему