вторник, 6 января 2015 г.

Экономим несмотря на отмену "Мобильного рабства".

     Приветствую.
   В жизни так бывает, что любовь деньги, особенно в текущей неясной ситуации, хочется сэкономить. Да и раньше хотелось, но сейчас этот вопрос встал крайне остро. Но сегодня речь пойдет не о том, как купить тонну гречки и не прогореть, а о том, как сэкономить на мобильной связи.
    Практически все операторы мобильной связи имеют тарифы в которых стоимость звонков "внутри" сети гораздо ниже (в некоторых случаях даже бесплатно), чем звонки на "конкурентов". Именно по этой причине наши клиенты часто прибегают к маршрутизации звонков по схеме "все звонки внутри родной сети" и именно это позволяло и позволяет им сильно экономить на исходящей связи. Однако.
  Ранее все было просто и понятно - смотрим первые цифры номера и звоним на соответствующего им оператора. Сейчас все немного усложнилось, т.к. с отменой мобильного рабства по DEF-коду точно определить оператора стало невозможно, ибо номер остается неизменным, а оператор может быть уже другой. Это значит, что появилась необходимость в сервисе, который бы в режиме "онлайн"  возвращал нам текущего оператора обслуживающего указанный телефон.
   Сервисов таких до поры до времени не было и можно было полагаться лишь на то, что РосСвязь будет часто обновлять свой справочник кодов текущих операторов. Но этого не произошло, а я наткнулся на сервис от ФГУП ЦНИИС , который решил данную проблему.



    Сделать было решено для "синего" сценария. А уже из него таскать компоненты  в другие сценарии по необходимости.
     Сценарий довольно простой:

  1. В меню определяем тип номера (город, межгород, сотовый). Если город, то уходим в компонент присвоения, где переменной направление присваиваем константу город.
  2. Если 11 символов, то проверим на межгород. Если вторая цифра в номере не равно 9, то это междугородная или международная связь . 
  3. Делаем запрос к сервису http://np.zniis.ru/np.php?num=9123456789, где num - это номер для проверки (обратите внимание, что никаких международных или междугородных кодов указывать не надо, т.е. номер в формате 10 знаков). Если ошибка или таймаут, то присваиваем переменной направление константу другое.
  4. Парсим ответ от запроса с помощью OQuery-запроса div[id='operator'] и получаем результат в переменную оператор. Если ошибка, то уходим в компонент присвоения не найден.
  5. В меню разбираем полученный результат и, в зависимости, от оператора, которого мы получили уходим в нужный нам компонент присвоения, где переменной направление присваиваем константу-код соответствующего направления (о направлениях расскажу ниже).
  6. Звоним на наш номер с соответствующего направления. Компонент переключение выглядит так (в качестве направления выбрана переменная направление, тип набора равен Использовать команду направления, а остальное по желанию):

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

  1. Код который указывается в компоненте переключения для того, чтобы октелл понял с какого направления нужно звонить.
  2. Линии которые соответствуют выбранному в направлениях оператору.
  3. Правило набора номера можно указать непосредственно в направлении, что очень удобно.
Пользуйтесь на здоровье. Скачать можно тут