BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 29 мар 2024, 02:39

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
СообщениеДобавлено: 11 июн 2010, 12:55 
Не в сети

Зарегистрирован: 17 ноя 2009, 08:47
Сообщения: 215
Откуда: krsn
Карма: 48
Написано и работает в версии биллинга 4.6

На кого рассчитан этот скрипт
На тех, кому не пофигу, кто администрирует АТС, на тех, у кого строго разграничены права доступа(кому куда можно, а кому нельзя), на тех, кто считает что доступ к интерфейсу управления АТС должны иметь только специалисты, умеющие администрировать АТС

Инструкция
Для начала нужно создать новый скрипт поведения, и обозвать его как ваешй душе угодно, сделать его обработчиком события "Изменение статуса договора". Привязать этот скрипт к желаемому договору, номерами которого хотите рулить из биллинга.

Для работы этого скрипта не требуется tune, скрипт подклчюается сразу к scomm, и через него рулит АТС

Нам нужно было отключать МГ, МН, зоновую связь при задолженности абонента. Если Вам нужны дополнительные функции - доработать скрипт не составит проблем.
Код:
// generated by xternalx at 10-11.06x2010
// visit http://xternalx.com
// or icq: 444 121 808

import bitel.billing.server.contract.bean.*;
import bitel.billing.server.util.*;
import java.sql.*;
import java.util.*;
import java.lang.*;
import java.util.regex.*;
import java.util.regex.Pattern.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.phone.bean.*;
import bitel.billing.server.util.telnet.*;

public HashMap loadOptions(String opts)
{
    options = new HashMap();
   String[] lines = opts.replaceAll(",","").split("\n");
   for(i=0; i < lines.length; i++)
   {
      if(!lines[i].equals("") && !lines[i].equals(" "))
      if(!lines[i].substring(0,1).equals("#") || !lines[i].substring(0,1).equals(";"))
      {
         String[] kv = lines[i].split(" ");
         svc_type = new ArrayList();
         for(j=1; j < kv.length; j++)
         {
            svc_type.add(kv[j]);
            //print("   "+kv[j]);
         }
         options.put(kv[0], svc_type);
      }
   }
   return options;
}

public void performAction(actionCode)
{

}

public void onEvent( event, setup, con, conSlave )
{
   cid = event.getContractID();
   contract = new ContractManager(con).getContractByID(cid);
    clStatus = event.getStatus().getStatus();
   print("status changed for contract "+cid+" to state: "+clStatus );
//cintract,getStatus() == 3 - закрыт
//contract.getStatus() == 2 - отключен
//contract.getStatus() == 0 - подключен

   clItemManager = new ClientItemManager(con,1);
   clPointsInBill = clItemManager.getItemList(cid);

   for(i=0; i< clPointsInBill.size(); i++)
   {   
      pointItem      = clPointsInBill.get(i);
      portNumber      = 10001;
      scommHost      = "192.168.1.15";
      pointNumber      = pointItem.getClientNumbers().get(0);
      options         = loadOptions(clPointsInBill.get(i).getComment());
      haveVnums       = false;

      // если номер в федеральном формате
      // приводим его к обычному 7ми значному виду
        if(pointNumber.length()==11)
      {
         pointNumber = pointNumber.substring(4);
      }

      //print("  getting options for point: "+pointNumber);
      // у абонента виртуальный номер?
      if(options.containsKey("vnum"))
      {
         haveVnums = true;
         print(pointNumber+" is alias for some virtual numbers");
         //pointNumber = (String)options.get("vnum").get(0);
      }
      // на каком порту подключена АТС к SCOMM
      if(options.containsKey("port"))
      {
         print(pointNumber+" allocated to SCOMM port"+options.get("port").get(0));
         portNumber = Integer.parseInt(options.get("port").get(0));
      }
      t = new TelnetSession(scommHost, portNumber);
      t.connect();
      switch(clStatus)
      {
         case 0:
         {
            if(options.get("svc_stopped") != null)
            {
               if(!haveVnums)
               {
                  print(t.doCommand("settune "+pointNumber+" USE ON"));
               }
               else
               {
                  for(j=0; j< options.get("svc_stopped").size(); j++)
                  {
                     for(x=0; x<options.get("vnum").size();x++)
                     {
                        print("  take point "+options.get("vnum").get(x)+" online");
                        print(t.doCommand("settune "+options.get("vnum").get(x)+" "+(String)options.get("svc_stopped").get(j)+" ON"));
                     }
                  }
               }
            }
            else
            {
               print("no options defined for point: "+pointNumber);
            }
            break;
         }
         case 2:
         {
            print("  take point "+pointNumber+" offline");
            if(options.get("svc_stopped") != null)
            {
               if(!haveVnums)
               {
                  print(t.doCommand("settune "+pointNumber+" USE OFF"));
               }
               else
               {
                  for(j=0; j< options.get("svc_stopped").size(); j++)
                  {
                     for(x=0; x<options.get("vnum").size();x++)
                     {
                        print("  take point "+options.get("vnum").get(x)+" online");
                        print(t.doCommand("settune "+options.get("vnum").get(x)+" "+(String)options.get("svc_stopped").get(j)+" OFF"));
                     }
                  }
               }
            }
            else
            {
               print("no options defined for point: "+pointNumber);
            }
            break;
         }
             case 3:
         {
            print("  take point "+pointNumber+" down");
            if(options.get("svc_closed") != null)
            {
               if(!haveVnums)
               {
                  print(t.doCommand("settune "+pointNumber+" USE OFF"));
               }
               else
               {
                  for(j=0; j< options.get("svc_closed").size(); j++)
                  {
                     for(x=0; x<options.get("vnum").size();x++)
                     {
                        print("  take point "+options.get("vnum").get(x)+" online");
                        print(t.doCommand("settune "+options.get("vnum").get(x)+" "+(String)options.get("svc_closed").get(j)+" OFF"));
                     }
                  }
               }
            }
            else
            {
               print("no options defined for point: "+pointNumber);
            }
            break;
         }
      }
      t.disconnect();
   }
}



При добавлении нового поинта для договора в биллинге, в его поле "Комментарий" необходимо записать следующий текст:

Код:
port 10001
vnum 304

svc_stopped CMN_8xxx, CMN_10xxx, CMN_82xxx
svc_closed USE


Разберем подробнее.

port - здесь указываем порт на котором висит АТС, подключенная к SCOMM.
Возможные значения портов по географическому расположению абонентов можете узнать у администратора АТС
vnum - необязательный параметр. Если абоненту был присвоен виртуальный номер, то его нужно указать здесь. Допустим, у нас в офисе номер телефона 2529050 является виртуальным. На АТС он записан под номером 304. *Если номер телефона реальный, этот параметр указывать не нужно*
svc_stopped - указываются сервисы, которые необходимо отключать, или включать у абонента при изменении статуса его договора("Подключить" - включает сервисы, "Отключить" - отключает)
svc_closed - указываются сервисы, которые необходимо выключать, когда договор закрывается(статус "Закрыт")
В примере выше говорится что необходимо

Список доступных параметров:
CMN_TOME - тональный набор
CMN_OUTCOME - исходящая связь
CMN_INCOME - входящая связь
CMN_EXTERNAL - внешние номера
CMN_PAYSERVICE - платные службы
CMN_8xxx - выход на 8
CMN_10xxx - выход на 810
CMN_AON - выдача АОНа
CMN_82xxx - выход на 82

_________________
Изображение
using billingClient.BGB 4.6;
using server.Ubuntu server 9.10;
using server.Java "1.6.0_15";
using client.Ubuntu 10.04;


Последний раз редактировалось nolka4 15 июн 2010, 11:31, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 июн 2010, 15:10 
Не в сети

Зарегистрирован: 16 ноя 2007, 16:11
Сообщения: 829
Карма: 49
А у нас для М200 есть софтина, которая показывает звонки в реальном времени и позволяет подсвечивать звонки согласно шаблонам номеров и софтина, отдающая по snmp счетчики release cause. Подключаются к спайдеру. Работает с MP64. Надо кому?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2010, 07:59 
Не в сети

Зарегистрирован: 17 ноя 2009, 08:47
Сообщения: 215
Откуда: krsn
Карма: 48
vdd писал(а):
А у нас для М200 есть софтина, которая показывает звонки в реальном времени и позволяет подсвечивать звонки согласно шаблонам номеров и софтина, отдающая по snmp счетчики release cause. Подключаются к спайдеру. Работает с MP64. Надо кому?

это одна из ваших самописных? :)

ps:// мне тут разведка донесла, что на 1 реальный номер может быть привязано дофига виртуальных внутренних. Соответствующие изменения внесены в скрипт в первом посте. Скрипт ждет оптимизации :)

_________________
Изображение
using billingClient.BGB 4.6;
using server.Ubuntu server 9.10;
using server.Java "1.6.0_15";
using client.Ubuntu 10.04;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2010, 11:52 
Не в сети

Зарегистрирован: 16 ноя 2007, 16:11
Сообщения: 829
Карма: 49
Да, самоделки.
В аттаче картинка Cacti, полученная с помощью snmp софтинки.


Вложения:
m200-snmp.png
m200-snmp.png [ 99.46 КБ | Просмотров: 14505 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 окт 2010, 11:34 
Не в сети

Зарегистрирован: 01 окт 2010, 11:21
Сообщения: 1
Карма: 0
Народ не подскажете как к определенному модулю подключиться? просто при таком подключении подрубается к 4 а нужно что бы к 12


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 окт 2010, 18:56 
Не в сети
Клиент

Зарегистрирован: 04 июн 2009, 15:33
Сообщения: 268
Откуда: Москва
Карма: 8
vdd, дайте посмотреть софтинку пожалуйста.

_________________
Клиент: вер. 7.1.102 / 20.04.2018 19:02:09
os: Windows 8.1; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_172
Сервер: вер. 7.1.970 / 20.04.2018 19:04:17
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_162


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 окт 2010, 19:11 
Не в сети

Зарегистрирован: 16 ноя 2007, 16:11
Сообщения: 829
Карма: 49
Куда слать? И какую? Операторскую или snmp?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08 окт 2010, 09:28 
Не в сети

Зарегистрирован: 17 ноя 2009, 08:47
Сообщения: 215
Откуда: krsn
Карма: 48
eugene_de писал(а):
Народ не подскажете как к определенному модулю подключиться? просто при таком подключении подрубается к 4 а нужно что бы к 12


так Вы в SCOMM смотрите у какой АТСки какой порт, и этот порт в комментарии договора указывайте.

_________________
Изображение
using billingClient.BGB 4.6;
using server.Ubuntu server 9.10;
using server.Java "1.6.0_15";
using client.Ubuntu 10.04;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 апр 2011, 22:31 
Не в сети

Зарегистрирован: 17 дек 2006, 02:49
Сообщения: 121
Откуда: Из ЛИСа
Карма: 1
Это все детские игрушки!

Мы уже как пару лет АТС "Протон" с биллингом через радиус скрестили!
Да, да, классическая цифровую АТС умеет он-лайн тарификацию через радиус!

Причем обсчитывает и абонентов и межоператорские расчеты!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 апр 2011, 05:11 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
ЛИС писал(а):
Это все детские игрушки!

Мы уже как пару лет АТС "Протон" с биллингом через радиус скрестили!
Да, да, классическая цифровую АТС умеет он-лайн тарификацию через радиус!

Причем обсчитывает и абонентов и межоператорские расчеты!

йа чет не понимаю, вы то про хоккей пишете, то про атс....
ну да ладно, скрестили, дайте посмотреть как...

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 фев 2012, 14:20 
Не в сети
Клиент

Зарегистрирован: 04 июн 2009, 15:33
Сообщения: 268
Откуда: Москва
Карма: 8
Можно и мне посмотреть софтинку... А по поводу:
Цитата:
Да, да, классическая цифровую АТС умеет он-лайн тарификацию через радиус!
Так М-200 тоже умеет скрещиваться через радиус...

_________________
Клиент: вер. 7.1.102 / 20.04.2018 19:02:09
os: Windows 8.1; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_172
Сервер: вер. 7.1.970 / 20.04.2018 19:04:17
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_162


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 май 2013, 01:32 
Не в сети

Зарегистрирован: 07 апр 2008, 21:18
Сообщения: 21
Карма: 8
ЛИС писал(а):
Это все детские игрушки!

Мы уже как пару лет АТС "Протон" с биллингом через радиус скрестили!
Да, да, классическая цифровую АТС умеет он-лайн тарификацию через радиус!

Причем обсчитывает и абонентов и межоператорские расчеты!


Тут в самом деле есть чем похвастаться! Мне сейчас потребовалось скрестить, я перечитал массу доки про Протон-Алмаз, пока не понял, как с ним скрещиваться.
Вы хотите сказать, что сделали RADIUS клиентом весь Протон, а не только VoIP-шлюз? Как?
Со стороны BG модуль VoiceIP?

Можно с Вами связаться?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 май 2013, 09:48 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
ldmitry писал(а):
Можно с Вами связаться?

Цитата:
Последнее посещение: 06 окт 2011, 23:35

На вашем месте я бы посоветовал написать в ЛС. Есть маленький шанс, что ЛИСу придет сообщение на почту, о том, что ему пришло ЛС на форуме.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.132s | 48 Queries | GZIP : On ]