Старый API после некоторых доработок потерял совместимость, поэтому мы решили выпустить вторую версию.
Рекомендуем использовать эту версию для написания запросов.
Формат дат для параметров запросов:
%Y-%m-%d %H:%M:%S
%Y-%m-%d
Отличия от старой версии:
- Новый адрес для запросов: http://<ip>:8082/rest_api/v2/
- Вместо передачи параметров в GET, перешли на POST
- Убрали из вывода результаты промежуточных вызовов (method1, method2,..), оставили только result
- Соответственно, немного поменялся схема вывода (см. соответствующий раздел)
- Модель указывается в url напрямую, например: http://<ip>:8082/rest_api/v2/Abonents/
- Атрибут запроса fields теперь не нужно маркировать номером метода. Он будет применяться к последнему объекту (возвращенному последним методом)
- Документацию (пока что только перечень доступных полей для запроса) можно посмотреть, пройдя браузером по ссылке http://<ip>:8082/rest_api/v2/
- Теперь можно в fields запрашивать вывод объектов по ссылкам (fk, m2m), обратным ссылкам и выводить property объектов, а также выводить конкретные поля этих объектов. Глубина запроса не ограничена, разделитель - двойное подчеркивание. *Внимание! Django не объединяет запрос по обратной ссылке в один, поэтому он может выполняться заметно дольше для большого кол-ва объектов (например, если запросить все учетные записи у всех абонентов - будет 1 запрос для абонентов и по запросу на каждого абонента для получения его учетных записей)
Описание формата
*Формат ответа:
{"call": "/rest_api/v2/<model_name>/", "result": [<объект>, ...]}
тип поля result будет меняться в соответствии с данными (список для перечня объектов (objects.filter), словарь для 1 объекта (objects.get), значение метода при вызове метода и.т.д).
*Формат ошибки:
{"call": "/rest_api/v2/<model_name>/", "error": "..."}
если в результате есть не пустое поле error, то значит запрос завершился неуспешно
*Формат объекта:
{"pk": <id>, "model": "<model>", "fields": {"<field>": <value>, ...}
Если поле является ссылкой fk (например поле tarif у модели Abonents), то объект тарифа можно получить, задав fields=["tarif"], а pk тарифа, задав fields=["tarif_id"], например:
{"pk": <id>, "model": "Abonents", "fields": {"tarif": {"pk": <id тарифа>, "model": "Tarif", "fields": {<поля тарифа>}, "tarif_id": <id тарифа>}
Также, можно вывести только определенные поля тарифа через двойное подчеркивание: fields=["tarif__name"]:
{"pk": <id>, "model": "Abonents", "fields": {"tarif": {"pk": <id тарифа>, "model": "Tarif", "fields": {"name": <имя тарифа>}, "tarif_id": <id тарифа>}
Еще пример. Запрос ip адресов всех учетных записей абонента fields=["abonent_id_users__ip"]:
{"pk": <id>, "model": "Abonents", "fields": {"abonent_id_users": [{"pk": <id учетной записи>, "model": "Users", "fields": {"ip": "<ip>"}}, ...]}}
Если необходимо __range
{method1=objects.filter&arg1={"abonent_id":"1242","s_time__range":["2018-10-01", "2018-11-01"]}
Формирование запросов
curl -XPOST -d 'method1=objects.all&arg1={}&fields=["tarif_id","tarif","abonent_id_users__ip","attr","child_folders_count"]' http://<ip>:8082/rest_api/v2/Abonents/ -D - curl -XPOST -d 'method1=objects.all&arg1={}&fields=["tarif_id","tarif__name","tarif__reserve_plan","abonent_id_users__ip","attr","child_folders_count"]' http://<ip>:8082/rest_api/v2/Abonents/ -D -
Документация по методам и моделям
Вызовите в браузере http://<ip>:8082/rest_api/v2/ и выберите интересующую модель.
Например, демо:
http://demo5.carbonsoft.ru/rest_api/v2/
Примеры
Некоторые готовые примеры работы с API с помощью Python вы можете посмотреть здесь: github
Вывести абонентов, у которых есть учетная запись с ip = 127.1.2.3
curl -XPOST -d 'method1=objects.filter&arg1={"abonent_id_users__ip":"127.1.2.3"}' http://<ip>:8082/rest_api/v2/Abonents/ -D -
или количество таких абонентов:
curl -XPOST -d 'method1=objects.filter&arg1={"abonent_id_users__ip":"127.1.2.3"}&method2=count&arg2={}' http://<ip>:8082/rest_api/v2/Abonents/ -D -
Установить абоненту с id = 45 номер квартиры 3
curl -XPOST 'http://<ip>:8082/rest_api/v2/Abonents/' --data 'method1=objects.get&arg1={"id":"45"}&method2=set&arg2={"a_home_number":"3"}&method3=save&arg3={}';
Подключение услуги id=532 абоненту с номером договора BILL0000021
curl -XPOST -d 'http://<ip>:8082/rest_api/v2/Abonents/' --data 'method1=objects.get&arg1={"contract_number":"BILL0000021"}&method2=add_service&arg2={"usluga_id":532}'
Сколько абоненту с номером договора 1005633 нужно заплатить что проработать до 2016-10-20
curl -XPOST -d 'method1=objects.get&arg1={"contract_number":"1005633"}&method2=get_credit_for&arg2={"end_credit_date":"2016-10-20"}' http://169.1.80.82:8082/rest_api/v2/Abonents/
Выполнение отчёта 1003 с параметром phone="+79222222222"
curl -XPOST -d 'method1=objects.get&arg1={"id":1003}&method2=get_data&arg2={"phone":"+79222222222"}' http://169.1.80.82:8082/rest_api/v2/AdminCustomReports/ -D -
По абоненту с id=1383 вывести значение реквизита с id=26
curl -XPOST -d 'method1=objects.filter&arg1={"abonent":"1383", "attribute":"26"}' http://<ip-биллинга>:8082/rest_api/v2/AttributeValues/ -D -
Пример создания абонента с именем abonent, в папке 1 с тарифом с id 1
def create_abonent(self, **kwargs): params = { 'url': '(billing_url)/Abonents/'.format(self.api_url), 'method1': 'objects.create', 'arg1': {"name": "abonent", '"parent_id": 1,"tarif_id": 1}. } return self.get_api_result(self.post_request(**params))
Установить абоненту с id 1321 тариф с именем Тестовый
1. Получаем id тарифа по имени
curl -XPOST -d 'method1=objects.get&arg1={"name":"Тестовый"}' http://<ip-биллинга>:8082/rest_api/v2/tarif/ -D -
В поле pk получаем id тарифа, в данном случае 1118
2. Устанавливаем тариф абоненту по idcurl -XPOST -d 'method1=objects.get&arg1={"id":"1321"}&method2=set&arg2={"tarif_id":"1118"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/Abonents/ -D -
Установить абоненту с номером учетной записи 1361 коммутатор с IP 1.1.1.1
1. Получаем id коммутатора по IP
curl -XPOST -d 'method1=objects.get&arg1={"ip":"1.1.1.1"}' http://<ip-биллинга>:8082/rest_api/v2/Switch/ -D -
В поле pk получаем id коммутатора, в данном случае 1113
2. Устанавливаем коммутатор в учетную запись по idcurl -XPOST -d 'method1=objects.get&arg1={"id":"1361"}&method2=set&arg2={"switch_id":"1113"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/Users/ -D -
Установить абоненту с номером учетной записи 1361 vlan 8
curl -XPOST -d 'method1=objects.get&arg1={"id":"1361"}&method2=set&arg2={"router_vlan":"8"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/Users/ -D -
Установить абоненту с номером учетной записи 1361 mac-адрес 00:AA:CC:11:44:88
curl -XPOST -d 'method1=objects.get&arg1={"id":"1361"}&method2=set&arg2={"mac":"00:AA:CC:11:44:88"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/Users/ -D -
Установить абоненту с номером учетной записи 1361 галочку opt82
curl -XPOST -d 'method1=objects.get&arg1={"id":"1361"}&method2=set&arg2={"opt82":"1"}&method3=save&arg3={}' http://10.90.180.180:8082/rest_api/v2/Users/ -D -
Установить абоненту с номером учетной записи 1361 порт номер 8 коммутатора 2.2.2.2
1. Получаем id коммутатора по IP
curl -XPOST -d 'method1=objects.get&arg1={"ip":"2.2.2.2"}' http://<ip-биллинга>:8082/rest_api/v2/Switch/ -D -
В поле pk получаем id коммутатора, в данном случае 1114
2. Получаем id порта по его номеруcurl -XPOST -d 'method1=objects.get&arg1={"switch_id":"1114","num":"8"}' http://<ip-биллинга>:8082/rest_api/v2/SwitchPorts/ -D -
В поле pk получаем id порта коммутатора, в данном случае 1168
3. Устанавливаем порт в учетной записи по id порта из БДcurl -XPOST -d 'method1=objects.get&arg1={"id":"1361"}&method2=set&arg2={"switch_p":"1168"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/Users/ -D -
Установить абоненту с id 1321 заявку на смену тарифа с именем "Другой" на 2016-05-26
1. Получаем id тарифа по имени
curl -XPOST -d 'method1=objects.get&arg1={"name":"Другой"}' http://<ip-биллинга>:8082/rest_api/v2/tarif/ -D -
В поле pk получаем id тарифа, в данном случае 1119
2. Добавляем заявку на смену и дату сменыcurl -XPOST -d 'method1=objects.get&arg1={"id":"1321"}&method2=set&arg2={"tarif_next_id":"1119","tarif_next_date":"2016-05-26"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/Abonents/ -D
Создание абонента и добавление ему учетной записи
1. Создаем абонента abonent с тарифом Основной(id=1) в группе Все (id=1)
curl -XPOST -d 'method1=objects.create&arg1={"name":"abonent", "parent_id":1, "tarif_id":1}' http://<ip-биллинга>:8082/rest_api/v2/Abonents/ -D -
В поле pk получаем id абонента. В данном случае id 1339
2. Создаем учетную запись по id абонента, указывая логин abonent1.curl -XPOST -d 'method1=objects.create&arg1={"abonent_id":"1339", "login":"abonent1"}' http://<ip-биллинга>:8082/rest_api/v2/Users/ -D -
Пароль при этом генерирует биллинг.
Получить данные по учетным записям абонента
curl -XPOST -d 'method1=objects.filter&arg1={"abonent__pk":"1234"}' 'http://169.254.80.82:8082/rest_api/v2/Users/' -D -
Получить логин, ip адрес, название атрибута в тарифе абонента, значение атрибута в тарифе абонента по незаблокированным абонентам
curl "http://169.254.80.82:8082/rest_api/v2/Users/" -XPOST -d 'method1=objects.filter&arg1={"abonent__deleted": 0, "abonent__abonent_id_abonentsblock__isnull": 1}&fields=["ip", "login", "abonent__tarif__tarif_id_tarifradiusparams__attribute", "abonent__tarif__tarif_id_tarifradiusparams__thevalue"]'
Добавить абоненту с id 100 атрибут, который имеет id 200 со значением 300
curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AttributeValues/' --data 'method1=objects.create&arg1={"abonent_id":"100","attribute_id":"200","attribute_value":"300"}'
BASH скрипт, который добавляет физ.лицам атрибут, который имеет id 200 со значением 300
sqlexec "set list on; select id from abonents where company=0" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AttributeValues/' --data 'method1=objects.create&arg1={"abonent_id":'$line',"attribute_id":"200","attribute_value":"300"}'; done
Отправить абоненту id 1313 сообщение по шаблону с id 1 методом sms-оповещения
curl -XPOST -d 'method1=objects.create&arg1={"abonent_id": "1313", "admin_msg_id": "1", "ttype_id": "1"}' 'http://169.254.80.82:8082/rest_api/v2/MsgStack/' -D -
Сделать приход 10 рублей абоненту с номером договора BILL0000021
curl -XPOST -d 'method1=objects.get&arg1={"contract_number": "BILL0000021"}&method2=add_payment&arg2={"SUM_IN": "10"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -
Создать абонента ФИО abonent в директории с id 1 (Все), tarif_id 1 (Основной тариф) и балансом 10р
curl -XPOST -d 'method1=objects.create&arg1={"name":"abonent", "parent_id":1, "tarif_id":1}&method2=add_payment&arg2={"SUM_IN": "10"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
Ввод начальных остатков/синхронизация балансов. Установить абоненту с id 1111 баланс бухгалтерский в объёме 50.5р, комментарий к финансовой операции "Миграция балансов"
curl -XPOST -d 'method1=objects.create&arg1={"abonent_id": 1111, "op_summa": "50.5", "op_type_id": 8, "descr": "Миграция балансов"}' 'http://169.254.80.82:8082/rest_api/v2/FinanceOperations/' -D -
Ввод начальных остатков в зависимости от номера договора. В примере указан номер договора 'test'. Номер договора обязательно должен быть экранирован кавычками ''.
sqlexec "set list on; select id from abonents where contract_number='test'" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.create&arg1={"abonent_id":'$line', "op_summa": "50.5", "op_type_id": 8, "descr": "Миграция балансов"}' 'http://169.254.80.82:8082/rest_api/v2/FinanceOperations/' -D -; done
Добавление дома в справочник "Дома". Дом будет создан с адресом г.Москва Ленина 5
curl -XPOST -d 'method1=objects.create&arg1={"city":"Москва", "street":"Ленина", "s_number":'5'}' http://169.254.80.82:8082/rest_api/v2/Homes/ -D
Добавления пула домов с помощью Bash скрипта. Будет создано 5 домов :1,2,3,4,5 c адресом г. Москва Ленина 1, г. Москва Ленина 2 и т.д. X - номер первого дома в пуле.
X=1; while [ "$X" -lt "6" ]; do curl -XPOST -d 'method1=objects.create&arg1={"city":"Москва", "street":"Ленина", "s_number":'$X'}' http://169.254.80.82:8082/rest_api/v2/Homes/ -D -;X=$((X+1)); done
Получение баланса по абоненту.
curl -XPOST -d 'method1=objects.get&arg1={"account_id_abonents":"<ID-абонента>"}&fields=["balance"]' http://<ip-биллинга>:8082/rest_api/v2/AdminAccounts/ -D -
Установка значения в поле "Порог отключения"
curl -XPOST -d 'method1=objects.get&arg1={"account_id_abonents":"<ID-абонента>"}&method2=set&arg2={"limit":"-5000"}&method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/AdminAccounts/ -D -
Установка значения в поле "Порог предупреждения" всей группе с помощью bash скрипта. В примере указана группа с id 1316 и Порог предупреждения - 12000
sqlexec "set list on; select id from abonents where parent_id=1316" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"account_id_abonents":'$line'}&method2=set&arg2={"limit_warning":"-12000"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done
Получить полный лог звонков абонентов за указанный период (включая обе даты)
curl -XPOST -d 'method1=objects.filter&arg1={"s_time__gt":"2017-11-20", "s_time__lte":"2017-12-01"}' http://168.254.80.82:8082/rest_api/v2/VoipLog/ -D -
Поменять учетной записи с id 1395 snatip на 8.8.8.8
curl -XPOST -d 'method1=objects.get&arg1={"id":'1395'}&method2=set&arg2={"snatip":"8.8.8.8"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -
Поменять всем абонентам из папки с id 1000 snat_pull на snat_pull с id 1030
sqlexec "set list on; select u.id from users u left join abonents a on a.id=u.abonent_id where a.parent_id=1000" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"snat_pull":"1030"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done
Поменять всем учетным записям дополнительный параметр opt82 со 100 на 3100
sqlexec "set list on; select id from users where opt82_param='100'" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"opt82_param":"3100"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -;done
Установить абоненту с номером договора BILL0000014 статус с id 26
curl -XPOST -d 'method1=objects.get&arg1={"contract_number": "BILL0000014"}&method2=set_object_status&arg2={"status_id": "26"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -
Установить абонентам из папки с id 1354 статус с id 26
sqlexec "set list on; select id from abonents where parent_id=1354" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id": '$line'}&method2=set_object_status&arg2={"status_id": "26"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
Установить учетной записи с id 1418 nas c id 1116.
curl -XPOST -d 'method1=objects.get&arg1={"id":'1418'}&method2=set&arg2={"nas_id":"1116"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -
Установить всем учетным записям абонентов из папки 1386 nas c id 1116.
sqlexec "set list on; select id from users where abonent_id in (select id from abonents where parent_id=1386)" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"nas_id":"1116"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done
Установить всем абонентам из папки id 1386 пул ip-адресов с id 1003 и выдать новый ip-адрес из пула
sqlexec "set heading off; select u.id from users u join abonents a on u.abonent_id=a.id and a.parent_id=1386" | sed '/^$/d; s/ *//g' | while read -r userid; do curl -XPOST -d 'method1=objects.get&arg1={"id":"'$userid'"}&method2=set&arg2={"ip":"","pull":"1003"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done
Добавить всем абонентам с блокировкой по отрицательному балансу и балансом меньше, чем '-1' приход 600 рублей
sqlexec "set list on; select distinct a.id from ABONENTS A left join ADMIN_ACCOUNTS AA on AA.ID=A.ACCOUNT_ID left join abonents_block ab on ab.abonent_id=a.id where A.IS_FOLDER=0 and a.deleted=0 and ab.B_NEGBAL=1 and round((aa.ostatok+aa.debit-aa.credit) / cast((10000000000) as numeric(18,5)), 2)<-1" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id": '$line'}&method2=add_payment&arg2={"SUM_IN": "600"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
Установить абоненту c id 2003 опцию "Не отключать при превышении порога"
curl -XPOST -d 'method1=objects.get&arg1={"account_id_abonents":"2003"}&method2=set&arg2={"unlimited":"1"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -
Установить всем абонентам с блокировкой по отрицательному балансу и балансом больше, чем 2, опцию "Не отключать при превышении порога"
sqlexec "set list on; select distinct a.id from ABONENTS A left join USERS U on A.ID = U.ABONENT_ID left join TARIF T on A.TARIF_ID=T.ID left join ADMIN_ACCOUNTS AA on AA.ID=A.ACCOUNT_ID left join users_usluga uu on uu.ABONENT_ID=A.ID left join usluga usl on usl.id=uu.USLUGA_ID left join abonents_block ab on ab.abonent_id=a.id where A.IS_FOLDER=0 and a.deleted=0 and ab.B_NEGBAL=1 and round((aa.ostatok+aa.debit-aa.credit) / cast((10000000000) as numeric(18,5)), 2)>2" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"account_id_abonents":'$line'}&method2=set&arg2={"unlimited":"1"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done
Перенести всех неудаленных абонентов с тарифом, у которого id 1212 , в группу, у которой id 4911
sqlexec "set list on; select distinct id from abonents where tarif_id=1212 and is_folder=0 and deleted=0" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id": '$line'}&method2=move_to&arg2={"target":4911}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
Удаление абонента с ID 1234
curl -XPOST -d 'method1=objects.get&arg1={"id": "1234"}&method2=delete&arg2={}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -
Удаление всех абонентов, которые не являются папками, из папки 5293
sqlexec "set list on; select id from abonents where parent_id=5293 and is_folder=0" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id": '$line'}&method2=delete&arg2={}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
Выставить всем абонентам из папки с id 1433 порог отключения '-5000'
sqlexec "set list on; select distinct id from abonents where parent_id=1433" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"account_id_abonents":'$line'}&method2=set&arg2={"limit":"-5000"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done
Изменить массово тариф всем абонентам с тарифа 1137 на тариф 1134
sqlexec "set list on; select distinct id from abonents where tarif_id=1137" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"tarif_id":"1134"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -; done
Применить административную блокировку с комментарием "Блокировка" к абоненту c id 1607
Если у абонента нет услуг, которые можно заблокировать - блокировка применена не будет! curl -XPOST -d 'method1=objects.get&arg1={"id":"1607"}&method2=block&arg2={"comment":"Блокировка"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
Применить административную блокировку с комментарием "Блокировка" к абонентам, у которых баланс меньше 0
sqlexec "set list on; select distinct a.id from ABONENTS A left join ADMIN_ACCOUNTS AA on AA.ID=A.ACCOUNT_ID where A.IS_FOLDER=0 and a.deleted=0 and round((aa.ostatok+aa.debit-aa.credit) / cast((10000000000) as numeric(18,5)), 2)<0" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=block&arg2={"comment":"Блокировка"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -; done
Убрать административную блокировку с абонента с id 1607 от имени администратора root
curl -XPOST -d 'method1=objects.get&arg1={"id":"1607"}&method2=unblock&arg2={"admin_username":"root"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
Убрать административную блокировку с абонентов, у которых баланс больше 0 от имени администратора root.
sqlexec "set list on; select distinct a.id from ABONENTS A left join ADMIN_ACCOUNTS AA on AA.ID=A.ACCOUNT_ID where A.IS_FOLDER=0 and a.deleted=0 and round((aa.ostatok+aa.debit-aa.credit) / cast((10000000000) as numeric(18,5)), 2)>0" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=unblock&arg2={"admin_username":"root"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -; done
Плучить детальную информацию по расходам абонента на интернет, телефонию и другие услуги за определённый период времени
- Вкладка "Расход", таблица "Расход"
curl -XPOST -d 'method1=objects.filter&arg1={"abonent_id":"1242","s_time__range":["2018-10-01", "2018-11-01"]}' http://169.254.80.82:8082/rest_api/v2/Counters/ -D -
- Детализация списаний за период
curl -XPOST -d 'method1=objects.filter&arg1={"abonent_id":"1242","change_balance_time__range":["2018-10-01", "2018-11-01"],"storno":0}' http://169.254.80.82:8082/rest_api/v2/ArchAccountStack/ -D -
- Вкладка "Расход", таблица "Расход"
Применить добровольную блокировку
curl -XPOST -d 'method1=objects.get&arg1={"id":"12419"}&method2=set&arg2={"own_disabled_start":"2018-10-03","own_disabled_end":"2018-11-03"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
Подключить обещанный платеж из личного кабинета
Делается в три этапа:
- Авторизоваться, получив SUID
curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=objects.get&arg1={"abonent_id":"12230"}&method2=create_dynamic_session&arg2={"save_old_session":"1"}'
Пример ответа с SUID - 144997776676316356
{"call": "/rest_api/v2/Users/", "result": {"pk": null, "model": "DynamicSessions", "fields": {"ttype": "None", "id": 12200, "suid": "144997776676316356"}}}
- Использовать SUID чтобы получить список обещанных платежей доступных абоненту для подключения из личного кабинета
curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.get_promise_pay_list&arg1={"suid":"144997776676316356"}'
- Подключить обещанный платеж
curl -XPOST -d 'method1=objects.create&arg1={"abonent_id":12420,"usluga_id":240,"manager_id": 33}' http://169.254.80.82:8082/rest_api/v2/UsersUsluga/ -D -
manager_id - это ID администраторов, получить их список можно так:
curl -XPOST -d 'method1=objects.filter' http://169.254.80.82:8082/rest_api/v2/UsersWebauth/ -D -
- Авторизоваться, получив SUID
Получить список услуг доступных абоненту для подключения в личном кабинете
Делается в три этапа:
- Авторизоваться, получив ID авторизации
curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=objects.get&arg1={"abonent_id":"12230"}&method2=create_dynamic_session&arg2={"save_old_session":"1"}'
- Получить список всех доступных для подключения и подключенных услуг
curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.get_usluga_list&arg1={"suid":"144997776676316356","get_user_uslugas_all":1}'
- Список всех подключенных услуг
curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.get_usluga_list&arg1={"suid":"144997776676316356","get_setted":1}'
Отфильтровать услуги определенного типа можно подобавив в запрос на втором или третьем шаге параметр system_type_id:
0 Стандартный 1 Турбокнопка 3 Бонусный трафик 4 Форсаж 2 Подписка 6 Пакет МБ 5 IP телефония 7 IP телевидение 8 Абонентская плата 9 Трафик 10 Скидка\Наценка 11 Обещанный платеж 12 Пакет услуг 13 Системный
- Авторизоваться, получив ID авторизации
Отладка
API-запросы и ошибки их выполнения логируются в следующие файлы:
/app/asr_billing/var/log/django/error.log /app/asr_billing/var/log/django/api_v2.log
По-умолчанию, уровень логирования установлен в error. Для того, чтобы логировать все запросы, установите в конфигурационном файле /app/asr_billing/cfg/config уровень логирования django в info:
- Откройте конфигурационный файл биллинга в любом удобном текстовом редакторе, например vim:
vim /app/asr_billing/cfg/config
- Найдите в файле опцию app['django.loglevel']= и установите её в значение info:
app['django.loglevel']='info'
- Перезапустите web-сервер биллинга:
chroot /app/asr_billing/ service admin_web_server restart
По окончанию отладки, рекомендуется вернуть уровень логирования в статус *error