API REST v2.0

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы

Описание формата

Формат дат для параметров запросов

Дата и время:

%Y-%m-%d %H:%M:%S

Только дата:

%Y-%m-%d

Формат ответа

{"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": <id>,"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

Очень Важно!
При выполнении API-запроса к серверу, происходит формирование задачи для изменения записей в БД, а не моментальное исполнение требуемых действий.
Поэтому, будьте внимательны, когда делаете запрос к большому количеству записей(массовое изменение NAS и т.д), требуется подождать некоторое время (10-30 минут) для завершения заданий, и после этого можете приступать к новым запросам. Иначе, могут возникнуть наложения действий со следующим запросов и начальный запрос выполнится некорректно.

Абоненты

  1. Вывести абонентов, у которых есть учетная запись с 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 -
    
  2. Установить абоненту с 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={}';
    
  3. Подключение услуги 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}'
    
  4. Сколько абоненту с номером договора 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/
    
  5. Пример создания абонента с именем 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))
    
  6. Установить абоненту с id 1321 тариф с именем Тестовый

    1. Получаем id тарифа по имени

     curl -XPOST -d 'method1=objects.get&arg1={"name":"Тестовый"}' http://<ip-биллинга>:8082/rest_api/v2/tarif/ -D -
    

    В поле pk получаем id тарифа, в данном случае 1118
    2. Устанавливаем тариф абоненту по id

     curl -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 -
    
  7. Установить абоненту с 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
    
  8. Запланировать переход абонентов с тарифа с id 1127 на тариф с id 1132 на 2021-03-01
    sqlexec "set list on; select distinct id from abonents where tarif_id=1127" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"tarif_next_id":"1132","tarif_next_date":"2021-03-01"}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -; done
  9. Создание абонента и добавление ему учетной записи

    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. Необходимо подождать, пока биллинг обработает запрос. В зависимости от производительности 5-10 секунд.
    3. Создаем учетную запись по id абонента, указывая логин abonent1.

    curl -XPOST -d 'method1=objects.create&arg1={"abonent_id":"1339", "login":"abonent1"}' http://<ip-биллинга>:8082/rest_api/v2/Users/ -D -
    

    Пароль при этом генерирует биллинг.

  10. Скрипт для создания абонента и учетной записи. Создаёт абонента в папке "Все" с именем "ФИО1", номером договора TEST_API1, тарифом с id=1, балансом 10, логином abonent2, паролем 1234
    #!/bin/bash
    curl -XPOST -d 'method1=objects.create&arg1={"name":"ФИО1", "parent_id":1, "tarif_id":1, "contract_number":"TEST_API1"}&method2=add_payment&arg2={"SUM_IN": "10"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
    sqlexec	"set list on; select id from abonents where contract_number='TEST_API1'" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.create&arg1={"abonent_id":'$line', "login":"abonent2"}&method2=set_password&arg2={"psw":"1234","dontshow":false}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done
    
  11. Сделать приход 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 -
  12. Создать абонента ФИО 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 -
  13. Установить абонентам из папки с 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
    
  14. Установить абоненту с номером договора 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 -
    
  15. Перенести всех неудаленных абонентов с тарифом, у которого 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
    
  16. Удаление абонента с 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 -

    Удалить абонента в корзину и разорвать связть с подключенными услугами:

    curl -XPOST -d 'method1=objects.get&arg1={"id": "1234"}&method2=delete&arg2={"clean_links": "UsersUsluga"}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -

    Удалить абонента и разорвать все связи: с учетными записями, подключенными услугами и тд.

    curl -XPOST -d 'method1=objects.get&arg1={"id": "1234"}&method2=delete&arg2={"clean_links": true}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -
  17. Удаление всех абонентов, которые не являются папками, из папки 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
  18. Изменить массово тариф всем абонентам с тарифа 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
  19. Применить административную блокировку с комментарием "Блокировка" к абонентам, у которых баланс меньше 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
  20. Убрать административную блокировку с абонента с 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 -
    
  21. Убрать административную блокировку с абонентов, у которых баланс больше 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
    
  22. Применить добровольную блокировку
    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 -
  23. Применить административную блокировку с комментарием "Блокировка" к абоненту 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 -
    
  24. Сторнирование услуг

    В примере: массовое сторнирование по всем неудаленным абонентам за период с 1 января 2017 по 1 января 2018 года

    sqlexec "set heading off; select id from abonents where is_folder=0 and deleted=0" | sed '/^$/d' | sed 's/ *//g' | while read -r abonid; do curl -XPOST -d 'method1=objects.get&arg1={"id":"'$abonid'"}&method2=storno_credit&arg2={"sdate":"2017-01-01", "edate":"2018-01-01"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -; done 
  25. Рассылка сообщения по населенному пункту.
    sqlexec "set heading off; select id from abonents where home_id in (select id from homes where CITY='Тихорецк') and deleted=0 and is_folder=0"| sed '/^$/d' | sed 's/ *//g' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id": '$line'}&method2=send_message&arg2={"tmpl_id": "6", "send_date": "2019-04-08 12:30:00" }' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
  26. Получить список абонентов со статусом "заблокирован или нет" (наличие блокировок в AbonentsBlock), поля: ID, Наименование/ФИО, статус
    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.filter&arg1={"is_folder":0}&fields=["id","name","allow_internet"]'
  27. Вывести данные по абоненту, у которого номер SMS для оповещений +71234567899
    curl -XPOST -d 'method1=objects.filter&arg1={"sms":"'%2B'71234567899"}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
    
  28. Сменить абонентам с оператором связи ID 3 оператора связи с ID 1444
    sqlexec "set list; select id from abonents where operator_id=3 and id>3" | awk '$2{print $2}' | while read abon; do curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":'$abon'}&method2=set&arg2={"operator_id":1444}&method3=save&arg3={}'; done
  29. Установить абонентам в папке с ID 1405 галочку "Юр. лицо"
    sqlexec "set list on; select id from abonents where parent_id=1405" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"company":"1"}&method3=save&arg3={}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
    
  30. Снять абонентам в папке с ID 1405 галочку "Юр. лицо"
    sqlexec "set list on; select id from abonents where parent_id=1405" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"company":false}&method3=save&arg3={}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done
    
  31. Восстановить абонента с id 1360 из корзины
    curl -XPOST -d 'method1=objects.get&arg1={"id": "1360"}&method2=restore&arg2={}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -
    
  32. Задать абонету с id 101 токен 123456 для отправки PUSH уведомления
    curl -XPOST -d 'method1=objects.get&arg1={"id":"101"}&method2=set&arg2={"push_token":"123456"}&method3=save&arg3={}'' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -
    
  33. Перерасчетать абонента начиная с выбранного периода (обязательно указывать первое число месяца!)

    Перерасчет абонента с ID 1392 с июня 2019 года

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":"1392"}&method2=set&arg2={"need_recalc":"2019-06-01"}&method3=save&arg3={}'
  34. Получение данных об операторе, обслуживающем абонента
    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.filter&arg1={"id":1111}&fields=["operator"]'
  35. Отключение автоплатежа
    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":"1385"}&method2=set&arg2={"autopay_pay_log_id":null}&method3=save&arg3={}'

Реквизиты

  1. По абоненту с id=1383 вывести значение реквизита с id=26
    curl -XPOST -d 'method1=objects.filter&arg1={"abonent":"1383", "attribute":"26"}' http://<ip-биллинга>:8082/rest_api/v2/AttributeValues/ -D -
    
  2. Добавить абоненту с 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
    
  3. Работа с реквизитами

    Добавить абоненту с ID 1376 реквизит с ID 33 и значением "Тест"

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AttributeValues/' -d 'method1=objects.create&arg1={"attribute_id":33,"abonent_id":1376,"attribute_value":"Тест"}'

    Удалить реквизит с ID 1684

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AttributeValues/' -d 'method1=objects.get&arg1={"id":1684}&method2=delete'
  4. Для получения данных из реквизитов Вы можете выполнить следующий запрос:
    curl -XPOST -d 'method1=objects.filter&arg1={"attribute_id":"14", "abonent_id":"1363"}' 'http://169.254.80.82:8082/rest_api/v2/AttributeValues/' -D -
    

    sqlexec "set list on; select id from attribute_values where coalesce(attribute_value,'')=''" | awk '

    Unknown macro: {print $2}

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=delete' http://169.254.80.82:8082/rest_api/v2/AttributeValues/ -D - ; done

    В данном случае:
    *14* - id реквизита паспорт серия
    *1363* - id абонента
    
    # h5. Удалить все незаполненные реквизиты у абонентов
    

    Учётные записи

    1. Установить абоненту с номером учетной записи 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. Устанавливаем коммутатор в учетную запись по id

      curl -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 -
      
    2. Установить абоненту с номером учетной записи 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 -
      
    3. Установить абоненту с номером учетной записи 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 -
      
    4. Установить абоненту с номером учетной записи 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 -
      
    5. Установить абоненту с номером учетной записи 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 -
      
    6. Поменять всем абонентам из папки с id 1000 snat_pull на snat_pull с id 1030 и выделить новый snat адрес из пула
      
      

      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 '

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"snatip"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done

    # h5. Изменить пул выдачи ip-адресов на pull 6 в учетной записи user 324 и выдать новый ip
    

    sqlexec "set list on; select u.id from users u left join abonents a on a.id=u.abonent_id where u.id=324" | awk '

    Unknown macro: {print $2}

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"ip"}

    &method3=save&arg3={}&fields=["ip", "pull"]' http://169.254.80.82:8082/rest_api/v2/Users/ -D - ; done

    # h5. Поменять всем учетным записям дополнительный параметр opt82 со 100 на 3100
    

    sqlexec "set list on; select id from users where opt82_param='100'" | awk '

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"opt82_param"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -;done

    # h5. Установить учетной записи с id 1418 nas c id 1116.
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"nas_id"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -

    # h5. Установить всем учетным записям абонентов из папки 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 '

    Unknown macro: {print $2}

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"nas_id"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done

    # h5. Установить всем абонентам из папки 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=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"ip"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done

    # h5. Смена пароля учетной записи
    h6. Установить определенный пароль:
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Users/' -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set_password&arg2=

    Unknown macro: {"psw"}

    '

    *psw* \- новый пароль
    *dontshow* \- +false+ чтобы пароль сохранился в открытом виде и отображался в администраторской панели, +true+ \- чтобы не отображался.
    h6. Сгенерировать случайный пароль:
    Сделайте два запроса: первым уберите пароль абонента, вторым инициируйте сохранение учетной записи:
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Users/' -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set_password&arg2=

    Unknown macro: {"psw"}

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/Users/' -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method3=save&arg2={}

    # h5. Для проверки корректности логин/пароль у абонента в биллинге, необходимо использовать специальную функцию checkpass. 
    Для этого необходимо знать id учетной записи абонента. В данном случае id абонента 1111 и пароль 8fqm11
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=check_pass&arg2=

    Unknown macro: {"passwd"}

    ' http://169.254.80.82:8082/rest_api/v2/Users/ -D -

    Функция возвращает значение true или false
    # h5. Удаление учетной записи.
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=delete&arg2=

    Unknown macro: {"clean_links"}

    '' http://169.254.80.82:8082/rest_api/v2/Users/ -D -

    Аргумент "clean_links" обязателен.
    # h5. Получить данные учетной записи абонента, авторизованного в личном кабинете, по идентификатору сессии suid
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=get_user_by_suid&arg1=

    Unknown macro: {"suid"}

    '

    # h5. Поменять учетной записи с id 1395 snatip на 8.8.8.8
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"snatip"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -

    
    h3. Лицевой счёт
    
    # h5. Получение баланса по абоненту.
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &fields=["balance"]' http://<ip-биллинга>:8082/rest_api/v2/AdminAccounts/ -D -

    # h5. Установка значения в поле "Порог отключения"
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"limit"}

    &method3=save&arg3={}' http://<ip-биллинга>:8082/rest_api/v2/AdminAccounts/ -D -

    # h5. Установка значения в поле "Порог предупреждения" всей группе с помощью bash скрипта. В примере указана группа с id 1316 и Порог предупреждения - 12000
    

    sqlexec "set list on; select id from abonents where parent_id=1316" | awk '

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"limit_warning"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done

    # h5. Установить абоненту c id 2003 опцию "Не отключать при превышении порога"
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"unlimited"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -

    # h5. Установить всем абонентам с блокировкой по отрицательному балансу и балансом больше, чем 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 '

    Unknown macro: {print $2}

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"unlimited"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done

    # h5. Выставить всем абонентам из папки с id 1433 порог отключения '-5000'
    

    sqlexec "set list on; select distinct id from abonents where parent_id=1433" | awk '

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"limit"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done

    # h5. Установка значения в поле "Порог предупреждения" всем абонентам в соответствии со значением в тарифе с помощью bash скрипта.
    

    sqlexec "set heading off; select a.id, cast(t.USERS_LIMIT_WARNING as numeric(10,2))/10000000000 from abonents a left join tarif t on a.tarif_id=t.id left join admin_accounts aa on a.account_id = aa.id where t.USERS_LIMIT_WARNING != aa.LIMIT_WARNING" | sed '/^$/d' | while read abonent_id sum; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"limit_warning"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done

    # h5. Установка порога отключения на сумма тарифа + 1 всем абонентам из папки.
    

    sqlexec "set heading off; select distinct a.id ||' ' || (round(u.SUMMA / cast((select CONST_VALUE from VPN_CONST where CONST_ID = 1) as numeric(18,5)), 2)+1 ) from abon LEFT JOIN TARIF_USERS_USLUGA tus ON tus.TARIF_ID=t.ID LEFT JOIN USLUGA u ON u.ID=tus.USLUGA_ID where a.parent_id=89" | while read -r a b; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"limit"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done

    # h5. Всем абонентам из папки 14724, у которых выставлена опция "Не отключать при превышении порога" отключить опцию "Не отключать при превышении порога"
    

    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 aa.unlimited=1 and a.parent_id=14724" | awk '

    Unknown macro: {print $2}

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"account_id_abonents"}

    &method2=set&arg2=

    Unknown macro: {"unlimited"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/AdminAccounts/ -D -; done

    # h5. Добавить абоненту с ID 2566 и лицевым счётом 10002566 тысячу бонусных баллов
    

    curl -XPOST -d 'method1=objects.create&arg1=

    Unknown macro: {"bonus_score"}

    ' http://169.254.80.82:8082/rest_api/v2/AccountStack/ -D -

    Если нужно убавить бонусные баллы, то введите отрицательное значение:
    

    curl -XPOST -d 'method1=objects.create&arg1=

    Unknown macro: {"bonus_score"}

    ' http://169.254.80.82:8082/rest_api/v2/AccountStack/ -D -

    Чтобы обновить информацию об абоненте в веб-интерфейсе обновим кэш:
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"need_refresh_cache"}

    &method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Abonents/ -D -

    Отменить операцию добавления/вычитания баллов можно сторнировав её:
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=storno_it' http://169.254.80.82:8082/rest_api/v2/ArchAccountStack/ -D -

    
    h3. Финансовые операции
    
    # h5. Ввод начальных остатков/синхронизация балансов. Установить абоненту с id 1111 баланс бухгалтерский в объёме 50.5р, комментарий к финансовой операции "Миграция балансов"
    

    curl -XPOST -d 'method1=objects.create&arg1=

    Unknown macro: {"abonent_id"}

    ' 'http://169.254.80.82:8082/rest_api/v2/FinanceOperations/' -D -

    # h5. Ввод начальных остатков в зависимости от номера договора. В примере указан номер договора 'test'. Номер договора обязательно должен быть экранирован кавычками ''.
    

    sqlexec "set list on; select id from abonents where contract_number='test'" | awk '

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.create&arg1=

    Unknown macro: {"abonent_id"}

    ' 'http://169.254.80.82:8082/rest_api/v2/FinanceOperations/' -D -; done

    # h5. Получение данных о счете абонента
    1) Выведем общую сумму к оплате, дату выставления,номер счёта и период, также в запросе мы увидим pk (это id счёта, у нас он - 13707416)
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/FinanceOperations/' -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent_id"}

    &fields=["op_summa", "op_date", "number", "period_end_date"]'

    2) Подставляем айди полученного счёта (pk из предыдущего запроса подставляем как finance_operation_id), увидим список услуг, количество единиц, названия и суммы.
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/FinanceOperationsDetail/' -d 'method1=objects.filter&arg1=

    Unknown macro: {"finance_operation_id"}

    &fields=["usluga", "unit", "vv", "price", "name"]'

    
    h3. Услуги
    
    # h5. Подключить обещанный платёж
    

    curl -XPOST -d 'method1=objects.create&arg1=

    Unknown macro: {"abonent_id"}

    ' 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/DjangoUsersProfile/ -D -

    # h5. Удаление услуг
    В примере: массовое удаление [автоматический подключенных обещанных платежей по льготному периоду|CarbonBilling:Льготный период оплаты]
    

    sqlexec "set heading off; select id from users_usluga where comment like 'Автоматический%предоплате%2017-12-31%'" | sed '/^$/d' | sed 's/ *//g' | while read -r uusligaid; do echo "$uusligaid"; curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=delete' http://169.254.80.82:8082/rest_api/v2/UsersUsluga/ -D -; done

    # h5. Привязать услугу с id 105 к оператору связи с id 3
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2

    Unknown macro: {"operator_id"}

    &method3=save&arg3={}' 'http://169.254.80.82:8082/rest_api/v2/Usluga/' -D -

    # h5. Назначить новую дату "Cледующего списания" по подключенной услуге 127 на 13.09.2020 у абонента 94
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"abonent_id"}

    &method2=set&arg2=

    Unknown macro: {"next_date"}

    &method3=save&arg3=

    Unknown macro: {"allow_set_none_manager"}

    ' http://169.254.80.82:8082/rest_api/v2/UsersUsluga/ -D -;

    # h5. Удалить все версии услуги с ID 167
    ID услуги указывается в переменной usluga_id в начале скрипта.
    

    usluga_id=167; sqlexec -l "select id from usluga_history where usluga_id=$usluga_id" | awk '$2

    Unknown macro: {print $2}

    ' | while read usluga_version_id; do curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/UslugaHistory/' -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=delete'; done

    # h5. Назначить новую дату списания на 13.09.2020 услуге, которая имеет статус "включена" у абонента с id 9135.
    

    sqlexec "set list on;select uu.id from users_usluga uu join abonents a on uu.abonent_id=a.id where a.id=9135 and uu.enabled=1 " | awk '

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"next_date"}

    &method3=save&arg3=

    Unknown macro: {"allow_set_none_manager"}

    ' 'http://169.254.80.82:8082/rest_api/v2/UsersUsluga/' -D -; done

    
    h3. Дома
    
    # h5. Добавление дома в справочник "Дома". Дом будет создан с адресом г.Москва Ленина 5
    

    curl -XPOST -d 'method1=objects.create&arg1=

    Unknown macro: {"city"}

    ' http://169.254.80.82:8082/rest_api/v2/Homes/ -D

    # h5. Добавления пула домов с помощью 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=

    Unknown macro: {"city"}

    ' http://169.254.80.82:8082/rest_api/v2/Homes/ -D -;X=$((X+1)); done

    # h5. Удаление всех неиспользуемых домов
    

    sqlexec "set list; select H.id from abonents A right join homes H on A.home_id = H.id where A.home_id is null" | awk '

    Unknown macro: {print $2}

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=delete&arg2={}' 'http://169.254.80.82:8082/rest_api/v2/Homes/' -D -; done

    # h5. Синхронизировать дома 
    

    sqlexec -l "select id from homes where s_number is not null and HOME_TYPES_ID=6 and KLADR_SYNC=0" | awk '$2

    ' | while read home_id; do curl -ss -XPOST 'http://169.254.80.82:8082/rest_api/v2/Homes/' -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"kladr_sync"}

    &method3=save' | jq .;done

    
    h3. Личный кабинет
    
    # h5. Подключить обещанный платеж из личного кабинета
    ## Авторизоваться, получив SUID
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=get_or_create_dynamic_session&arg2={}'

    Пример ответа с SUID - 144997776676316356
    

    {"call": "/rest_api/v2/Users/", "result": {"pk": null, "model": "DynamicSessions", "fields":

    Unknown macro: {"ttype"}

    }}

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

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.get_promise_pay_list&arg1=

    Unknown macro: {"suid"}

    '

    ## Подключить обещанный платеж, испоьзовав id обещанного платежа promise_pay_id.
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.add_promise_pay&arg1=

    Unknown macro: {"suid"}

    '

    # h5. Получить список услуг доступных абоненту для подключения в личном кабинете и подключить\отключить услугу
    ## Авторизоваться, получив ID авторизации
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=objects.get&arg1=

    Unknown macro: {"abonent_id"}

    &method2=get_or_create_dynamic_session&arg2={}'

    {note}{*}Работает только если у абонента одна учетная запись\!* Если больше одной - используйте ID учетной записи: 

    method1=objects.get&arg1=

    Unknown macro: {"id"}
    {note}
    ## Получить список всех доступных для подключения и подключенных услуг
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.get_usluga_list&arg1=

    Unknown macro: {"suid"}

    '

    ## Список всех подключенных услуг
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.get_usluga_list&arg1=

    Unknown macro: {"suid"}

    '

    Отфильтровать услуги определенного типа можно подобавив в запрос на втором или третьем шаге параметр system_type_id:
    

    0 Стандартный
    1 Турбокнопка
    3 Бонусный трафик
    4 Форсаж
    2 Подписка
    6 Пакет МБ
    5 IP телефония
    7 IP телевидение
    8 Абонентская плата
    9 Трафик
    10 Скидка\Наценка
    11 Обещанный платеж
    12 Пакет услуг
    13 Системный

    ## Подключить услугу
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.set_user_usluga&arg1=

    Unknown macro: {"suid"}

    '

    ## Отключить услугу
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.remove_user_usluga&arg1=

    Unknown macro: {"suid"}

    '

    # h5. Установить пароль через форму восстановления пароля:
    Отправляем по API запрос на восстановление reset_password, параметры login (login или email), base_url.
    

    curl -XPOST "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.reset_password&arg1=

    Unknown macro: {"login"}

    '

    Получаем в ответ uid = user_id
    Клиент получает поле с кодом *token* на почту или через смс.
    Отправляем проверочный код и новый пароль по API submit_password, параметры token (код из смс, в верхнем регистре), uid (из ответа reset_password или user_id), psw1 и psw2 (одинаковые пароли длиннее 6 символов)
    

    curl -XPOST "http://169.254.80.82:8082/rest_api/v2/Users/" -d 'method1=web_cabinet.submit_password&arg1=

    Unknown macro: {"token"}

    '

    
    h3. Сообщения
    
    # h5. Отправить абоненту id 1313 сообщение по шаблону с id 1 методом sms-оповещения
    

    curl -XPOST -d 'method1=objects.create&arg1=

    Unknown macro: {"abonent_id"}

    ' 'http://169.254.80.82:8082/rest_api/v2/MsgStack/' -D -

    
    h3. Прочее
    
    # h5. Выполнение отчёта 1003 с параметром phone="+79222222222"
    

    curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=get_data&arg2=

    Unknown macro: {"phone"}

    ' http://169.1.80.82:8082/rest_api/v2/AdminCustomReports/ -D -

    # h5. Получить данные по учетным записям абонента
    

    curl -XPOST -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent__pk"}

    ' 'http://169.254.80.82:8082/rest_api/v2/Users/' -D -

    # h5. Получить логин, ip адрес, название атрибута в тарифе абонента, значение атрибута в тарифе абонента по незаблокированным абонентам
    

    curl "http://169.254.80.82:8082/rest_api/v2/Users/" -XPOST -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent__deleted"}

    &fields=["ip", "login", "abonent__tarif__tarif_id_tarifradiusparams__attribute", "abonent__tarif__tarif_id_tarifradiusparams__thevalue"]'

    # h5. Получить полный лог звонков абонентов за указанный период (включая обе даты)
    

    curl -XPOST -d 'method1=objects.filter&arg1=

    Unknown macro: {"s_time__gt"}

    ' http://168.254.80.82:8082/rest_api/v2/VoipLog/ -D -

    # h5. Добавить всем абонентам с блокировкой по отрицательному балансу и балансом меньше, чем '-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 '

    Unknown macro: {print $2}

    ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=add_payment&arg2=

    Unknown macro: {"SUM_IN"}

    ' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done

    # h5. Получить детальную информацию по расходам абонента на интернет, телефонию и другие услуги за определённый период времени
    ## [Вкладка "Расход", таблица "Расход"|CarbonBilling:Счетчики услуг. Вкладка "Расход".]
    

    curl -XPOST -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent_id"}

    ' http://169.254.80.82:8082/rest_api/v2/Counters/ -D -

    ## [Детализация списаний за период|CarbonBilling:Детализация расхода]
    

    curl -XPOST -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent_id"}

    ' http://169.254.80.82:8082/rest_api/v2/ArchAccountStack/ -D -

    # h5. Список абонентов блокировкой negbal, выводим логин и IP адерес.
    

    curl -XPOST -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent__deleted"}

    &method2=distinct&fields=["login", "ip"]' "http://169.254.80.82:8082/rest_api/v2/Users/" -D -

    # h5. Работа с блокировками абонентов и их историей
    Получить ID текущих блокировок по балансу абонента с ID 1392
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AbonentsBlock/' -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent_id"}

    &fields=["id"]'

    Снять блокировку с ID 243068
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AbonentsBlock/' -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=delete'

    Получить ID блокировок абонента ID 1392 измененных с 1 по 30 июня 2019 года
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AbonentsBlockHistory/' -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent_id"}

    &fields=["id"]'

    Получить ID блокировок абонента ID 1392 снятых с 1 по 30 июня 2019 года
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AbonentsBlockHistory/' -d 'method1=objects.filter&arg1=

    Unknown macro: {"abonent_id"}

    &fields=["id"]'

    Изменить запись в истории блокировок ID 118, установить время изменения и снятия на 1 июня 2019 года
    

    curl -XPOST 'http://169.254.80.82:8082/rest_api/v2/AbonentsBlockHistory/' -d 'method1=objects.get&arg1=

    Unknown macro: {"id"}

    &method2=set&arg2=

    Unknown macro: {"time_changed"}

    &method3=save'

    
    h2. Отладка
    
    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*.
    
    h3. Неудобно читать ответ биллинга при выполнении curl: всё в одну стороку и вместо русских символов что-то вроде "\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440"
    
    Используйте утилиту *jq* для форматирования вывода. 
    {note:title=jq нужно установить!}Утилита не идёт "из коробки", но её можно просто установить:
    

    yum install -y jq

    {note}
    Например:
    {code:title=Команда}curl -ss -XPOST 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -d 'method1=objects.get&arg1={"id":"3"}&fields=["name"]' | jq .
    Вывод
    {
      "result": {
        "fields": {
          "name": "ООО Лучший провайдер"
        },
        "model": "Abonents",
        "pk": 3
      },
      "call": "/rest_api/v2/Abonents/"
    }
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.