API REST v2.0

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (14)

просмотр истории страницы
[http://demo5.carbonsoft.ru/rest_api/v2/]

h2. Как выполнить запрос?

h3. Описание примеров

h5. IP в запросе
В API запросах описаныых в статье указан внутренний IP контейнера биллинга *169.254.80.82*. Доступ к нему есть только внутри сервера биллинга. Соответсвенно запросы необходимо выполнять из консоли.
Если вы хотите сделать запрос со стороннего ПК, то настройте доступ к API по [статье|API#Настройка доступа к API].

h5. Порт
API запросы выполняются к веб серверу биллинга по порту *8082*.

h5. Описание пайплана в примерах
Во многоих примерах кроме самого API запроса есть дополнительные команды. Разберём их на примере API запроса *Установить абонентам из папки с id 1354 статус с id 26*:
{code}
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
{code}
# Сначала происходит выборка данных командой [sqlexec|Конструктор отчетов#Выполнение отчёта из консоли утилитой sqlexec]
{code}
sqlexec "set list on; select id from abonents where parent_id=1354"
{code}
# Так как отчёт может вернуть несколько столбцов, мы вибираем один или несколько нужных утилитой *awk*
{code}
awk ' {print $2} '
{code}
# Команда [sqlexec|Конструктор отчетов#Выполнение отчёта из консоли утилитой sqlexec] кроме отчёта возращает несколько пустых строк. Обрежем их утилитой *sed*, чтобы в запрос не попали пустые значения
{code}
sed '/^$/d'
{code}
# Отчёт вернёт несколько значений. Поэтому API запрос необходимо выполнить в цикле *while*. Данные в запрос будут переданы в переменной *$line*
{code}
while read line; do curl ... -D -; done
{code}
Можно считать несколько переменных одновоременно
{code}
while read line1 line2 line3; do curl ... -D -; done
{code}

h3. Как удобно выполнить большой запрос из консоли?
Подробно выполнение sql запроа в скрпитах описано в [статье|Конструктор отчетов#Выполнение запроса для использования в скриптах].
# Создайте *bash* скрипт
{code}
touch my_script.sh
{code}
# Запишите в него скрипт
{code}
#!/bin/bash

chroot /app/asr_billing/ /usr/local/bin/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

exit 0
{code}
# Дайте права на исполнение
{code}
chmod 744 my_script.sh
{code}
# Запустит скрипт
{code}
./my_script.sh
{code}

h2. Примеры

Некоторые готовые примеры работы с API с помощью Python вы можете посмотреть здесь: [github|https://github.com/carbonsoft/rest_api_example]

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

h3. Абоненты
# h5. Перерасчитать абонентов на тарифе с id 1405, начиная с выбранного периода (обязательно указывать первое число месяца\!)
{code}sqlexec "set list on; select id from abonents where tarif_id=1405" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"need_recalc":"2019-06-01"}&method3=save&arg3={}' 'http://169.254.80.82:8082/rest_api/v2/Abonents/' -D -; done{code}
# h5. Перерасчитать абонента с удалением истории блокировок
Для перерасчёта с удалением истории блоировок необходимо отдельно удалить историю блокировок по абоненту, и далее запустить перерасчёт. Например, по абоненту с id *6034* за *сентябрь 2024*.
#* Удалите историю блокировок.
{code}
sqlexec -l "select ID from abonents_block_history where abonent_id=6034 and B_DATE between '2024-09-01 00:00:00' and '2024-09-30 23:59:59'" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST "http://169.254.80.82:8082/rest_api/v2/AbonentsBlockHistory/" -d "method1=objects.get&arg1={\"id\":$line}&method2=delete&arg2={}" -D -; done
# h5. Установить опцию "Привязать пользователей к этому NAS" для учетных записей абонентов, находящихся в папке с id 1358
{code}
sqlexec "set list on; select id from users where abonent_id in (SELECT abonent_id FROM GLN_RECURSIVE_ABONENTS_GET(1358))" | awk ' {print $2} ' | sed '/^$/d' | while read line; do curl -XPOST -d 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"nas_ip_lock":"1"}&method3=save&arg3={}' 'method1=objects.get&arg1={"id":'$line'}&method2=set&arg2={"nas_ip_lock": 1}&method3=save&arg3={}' http://169.254.80.82:8082/rest_api/v2/Users/ -D -; done
{code}
# h5. Отправить на оборудование актуальные состояния учетных записей:
h3. Отчёты

# h5. Выполнение [отчёта|Конструктор отчетов] 1003 с параметром phone="+79222222222"
{code}
curl -XPOST -d 'method1=objects.get&arg1={"id":1003}&method2=get_data&arg2={"phone":"+79222222222"}' http://169.254.80.82:8082/rest_api/v2/AdminCustomReports/ -D -
{code}
# h5. Выполнение [отчёта|Конструктор отчетов] 250081 с параметрами даты за январь 2022 года
{code}
curl -XPOST -d 'method1=objects.get&arg1={"id":250081}&method2=get_data&arg2={"start":"2022-01-01 00:00:00.0000", "end":"2022-01-31 23:59:59.0000"} ' http://169.254.80.82:8082/rest_api/v2/AdminCustomReports/ -D -
{code}
* В отчёте [переменные|Конструктор отчетов#Фильтры данных (параметры полей формы)] должны быть объявлены на латинице.
* [Переменные|Конструктор отчетов#Фильтры данных (параметры полей формы)] должны быть произвольного типа.
{code}
':start$'