Основное API: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
(Не показано 10 проміжних версій цього користувача)
Рядок 264: Рядок 264:


<br><br>
<br><br>
===Автоматическое пополнение счета===
====Список токенов====
<br>
<source lang="bash">
curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_autopays' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'
</source>
<br>
Результат в ключе result:
<pre>
{
  "result" : [
      {
        "expire_time" : "0",
        "last_pay_time" : "28.11.2021 19:48",
        "id" : "107",
        "type" : "paytoken",
        "enabled" : "0",
        "uid" : "188",
        "create_time" : "1638121721",
        "paysystem" : "fondy",
        "card" : "473118XXXXXX9680",
        "token" : "1e5aXXXXXXXXXXXXXX5b3"
      }
  ]
}
</pre>
Или когда нет ни одного токена:
<pre>
{
  "err_cod" : "no_tokens",
  "error" : "Ще не підключено жодної карти, по якій можна здійснювати автоматичні платежі.
Вам потрібно здійснити оплату як зазвичай і ми додамо карту, яку ви використовували"
}
</pre>
<br>
<br>
====Включение токена====
<br>
<source lang="bash">
curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_autopays&id=107&act=on' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'
</source>
<br>
====Выключение токена====
<br>
<source lang="bash">
curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_autopays&id=107&act=off' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'
</source>
<br>


===Модуль опроса===
===Модуль опроса===
Рядок 308: Рядок 366:
</source>
</source>


start_date и end_date фильтруют список по дате создания. end_date необязательный параметр
start_date и end_date фильтруют список по дате создания (включительно, т.е. в примере будут получены все тикеты с датой создания от 31.01.2023 00:00:00 до 16.09.2023 23:59:59). end_date необязательный параметр.


Возможные фильтры:
Возможные фильтры:
Рядок 314: Рядок 372:
* performer - id любого из исполнителей (performer=0 - без исполнителя)
* performer - id любого из исполнителей (performer=0 - без исполнителя)
* level - приоритет
* level - приоритет
* type - тип
* type - тип (в виде числа). Типы задаються вами в настройках тикетов
* search_str - поиск по фрагменту текста в теме/комментарии или в любом сообщении тикета
* state - состояние:
* state - состояние:
** -1 - незакрытый тикет
** -1 - незакрытый тикет
Рядок 338: Рядок 397:
* performer3 - исполнитель 3 или {}
* performer3 - исполнитель 3 или {}
* performer_grp - поле "передано в отдел", когда исполнитель не выбран, однако известно в какой группе он должен быть
* performer_grp - поле "передано в отдел", когда исполнитель не выбран, однако известно в какой группе он должен быть
Чтобы администратор (оператор) имел доступ к тикетам, необходимо чтобы его административная запись была связана с какой-либо учетной записью в списке клиентов - рекомендуем сделать групу «сотрудники»/«техподдержка»/«монтажники»...
Также у административной записи существует привилегия «Руководитель. Доступ ко всем тикетам». Если данная галка не стоит, то оператор увидит только те тикеты, которые либо не связаны ни с каким абонентом, либо связаны с абонентом, к группе которого есть доступ. Однако недоступный тикет может стать доступным, если в качестве исполнителя (любого из трех) будет назначен текущий оператор либо же параметр «передать в отдел» будет таким же как группа оператора (например, передано в отдел «монтажники»). Таким образом, монтажникам можно не давать доступ к абонентам, а руководитель будет назначать тикет конкретному монтажнику или передавать в отдель и там монтаджники сами разберутся
===Получение всех данных тикета #165 ===
<source lang="bash">
curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=op&act=tickets&op=edit&id=165' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'
</source>
В ответе:
* data - текущие данные тикета
* history - лог изменений
Структура лога:
* created_ts - таймстамп события
* created_time - время события в текстовом виде
* author - id кто изменил запись (по таблице администраторов)
* changes - список измененных полей:
** имя поля
** предыдущее значение
** установленное значение


===Получение данных абонента===
===Получение данных абонента===

Версія за 18:04, 13 травня 2024

Общая информация

API запросы выполняются по http(s)-протоколу, в ответ приходит json. Тестировать API можно с консоли, например:

curl 'https://app.nodeny-plus.com.ua/cgi-bin/noapi.pl'

В ответ приходит сообщение об ошибке «запрос не авторизован»:

{
   "error" : "Вы не авторизованы",
   "err_cod" : "unauthorized"
}


Если в ответе API будет присутствовать ключ error - это означает, что произошла ошибка и в данном ключе текст ошибки. В большинстве случаев данный текст можно показывать абонентам. Может присутствовать ключ err_cod - код ошибки, который не зависит от локализации. Варианты:

    unauthorized - либо не передана сессия, либо некорректная, либо устарела
    wrong_password - неудачная авторизация

Чтобы выполнить API-запрос необходимо сперва залогиниться под логином и паролем пользователя и получить идентификатор сессии, который использовать в cookie в последующих запросах.

В cookie в параметре nolang можно указать язык, например, nolang=UA

Авторизация

Логин: test
Пароль: 123
curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?_uu=test&_pp=123'

Если логин и пароль верные, приходит ответ:

{
   "ses" : "hHuidO6MqAwTcqOnZF4Qg",
   "data" : {
      "trust" : 1,
      "id" : "357",
      "role" : "user"
   },
   "result" : "auth ok"
}

Нас интересует параметр ses, который необходимо посылать во всех запросах в cookie с именем noses

Обратите внимание на параметр role - показывает кто авторизовался, админ или пользователь

Версия NoDeny

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=version' --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'


Функция api для пользователя

Получение данных пользователя

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_main' --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'

В полученном ответе:

   usr     : данные пользователя
   services: подключенные услуги
   credits : кредиты
   pays    : платежи

Например:

{
      "services" : [
         {
             "id" : "1537",   
             "service_id" : "33",
             "next_service_id" : "33",
             "auto_renew" : "0",
             "tm_start" : "1468324004",
             "tm_end" : "1783684004",
             "grp_list" : ",1,",
             "pay_id" : "4544",
             "category" : "",
             "module" : "unlim",
             "uid" : "357",
             "no_renew" : "1",
             "description" : "50 Mb unlim",
             "tags" : ",speed=123,",
             "finish_count" : "1",
             "price" : "10",
         },{
           ...
         }
}

Видно, что подключено несколько услуг (2я и последующие заменены на троеточие). next_service_id - id услуги, которая будет подключена когда завершится текущая. Поскольку service_id = next_service_id - будет подключена таже услуга, которая действует в данный момент

Получение списка сообщений

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_message' \
    --cookie "noses=hHuidO6MqAwTcqOnZF4Qg"

Параметр category:

   491 - сообщение от клиента
   480 - сообщение клиенту
   481 - сообщение клиенту, клиент ознакомлен
   482 - сообщение клиенту, блокирующее доступ до ознакомления
   488 - многоадресное сообщение клиентам

Отправка сообщения администрации

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_message' \
    --cookie "noses=hHuidO6MqAwTcqOnZF4Qg" \
    -X POST -d "msg=У меня не работает интернет"


История подключений

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_auth_log' \
    --cookie "noses=hHuidO6MqAwTcqOnZF4Qg"

Если параметр end = 0 - подключение в данный момент активно


Список услуг, которые можно подключить

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_srv_select' \
    --cookie "noses=hHuidO6MqAwTcqOnZF4Qg"

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

  • already - эта услуга уже подключена
  • analog - подключена аналогичная услуга и существует запрет на подключение схожих услуг, например, нельзя подключить два тарифа для доступа в интернет


Подключение услуги

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_srv_add&service_id=63' \
    --cookie "noses=hHuidO6MqAwTcqOnZF4Qg"


Установка "следующей" услуги

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_srv_add&cmd=set_next&usr_service_id=1234&service_id=63' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'

usr_service_id - это id уже установленной услуги абонента (поле id в таблице users_services)


Получение кредита

Информация о кредите, который можно получить:

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_credit' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'
{
   "credit" : {
      "gr" : "грн",
      "full_amt" : "3.16",
      "commission" : 0,
      "days" : 3,
      "amt" : 3.16
   },
   "result" : "ok"
}

Получение кредита:

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_credit&go=1' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'



Результат в ключе result:

ok              : успешно
blocked         : существует платеж-блокировка взятия кредита
other_exists    : существует активный кредит
no_more         : ранее брался кредит и он уже возвращен. Тем не менее после него не было платежей на сумму бОльшую  суммы кредита
many_nopay_days : не было ни одного положительного платежа за количество дней, указанных в настройках модуля

Пример ответа:

{
   "result" : "blocked"
}



Пополнение счета карточкой пополнения счета

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_cards&cod=21242830587619' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'


Результат в ключе result:

ok                : успешно
wrong_code        : неверный код пополнения
already_activated : карточка уже активирована



Регистрация токена для пуш-уведомлений

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_gcm&reg_id=c-kkWVxpBpM:APA91bFZGzWjxjWtnX2m0iu4yq-koveiZCk' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'

В результате параметр reg_id должен записаться в таблицу notifications_users



Создание заявки на оплату в платежной системе Fondy

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_fondy&amt=100' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'

Будет возвращен id платежа-заявки для оплаты, а также сумма для оплаты (сумма может быть больше заказанной из-за комиссии)


Создание заявки на оплату в платежной системе Liqpay

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_lpay&amt=100' \
    --cookie 'noses=o5U0SSeFy5FiJWv5GaWjng'

Будет возвращен id платежа-заявки для оплаты, а также сумма для оплаты (сумма может быть больше заказанной из-за комиссии)



Автоматическое пополнение счета

Список токенов


curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_autopays' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'


Результат в ключе result:

{
   "result" : [
      {
         "expire_time" : "0",
         "last_pay_time" : "28.11.2021 19:48",
         "id" : "107",
         "type" : "paytoken",
         "enabled" : "0",
         "uid" : "188",
         "create_time" : "1638121721",
         "paysystem" : "fondy",
         "card" : "473118XXXXXX9680",
         "token" : "1e5aXXXXXXXXXXXXXX5b3"
      }
   ]
}

Или когда нет ни одного токена:

{
   "err_cod" : "no_tokens",
   "error" : "Ще не підключено жодної карти, по якій можна здійснювати автоматичні платежі.
 Вам потрібно здійснити оплату як зазвичай і ми додамо карту, яку ви використовували"
}



Включение токена


curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_autopays&id=107&act=on' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'


Выключение токена


curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_autopays&id=107&act=off' \
    --cookie 'noses=hHuidO6MqAwTcqOnZF4Qg'


Модуль опроса


Документация

Функции api для администратора

Получение данных абонентов

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=api_users' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'

В ответе:

  • dopdata - дополнительные поля учетной записи
  • services - активные услуги
    • next_title - имя услуги, которая будет подключена после завершения текущей
    • next_service_id - id услуги, которая будет подключена после завершения текущей
    • set_next_time - время, когда в последний раз была заказана смена услуги (null если не было заказов)
  • last_traf - время последней активности по трафику
  • last_auth - время последней активности по авторизации


Начиная с ревизии 681: если необходимо получить только определенные поля, то их имена надо задать через запятую в параметре fields:

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=api_users&fields=name,last_auth' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'

Для получения всех допполей: fields=dopfields



Получение списка тикетов

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=op&act=tickets&start_date=31.01.2023&end_date=16.09.2023' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'

start_date и end_date фильтруют список по дате создания (включительно, т.е. в примере будут получены все тикеты с датой создания от 31.01.2023 00:00:00 до 16.09.2023 23:59:59). end_date необязательный параметр.

Возможные фильтры:

  • creator - id создателя тикета
  • performer - id любого из исполнителей (performer=0 - без исполнителя)
  • level - приоритет
  • type - тип (в виде числа). Типы задаються вами в настройках тикетов
  • search_str - поиск по фрагменту текста в теме/комментарии или в любом сообщении тикета
  • state - состояние:
    • -1 - незакрытый тикет
    • new - открытый
    • active - в работе
    • failed - не может быть исполнен
    • check - необходима проверка
    • alert - тревога
  • private - приватность (1 - приватные, 0 - нет)

В ответе:

  • id - id тикета
  • subject - тема тикета
  • comment - комментарий
  • state - статус тикета
  • client_informed (1 - клиент проинформирован)
  • performer_informed (1 - исполнитель проинформирован)
  • creator - кто создал тикет
  • updater - кто последним изменил тикет
  • client - с кем связан тикет, если ни с кем, то {}
  • performer - исполнитель 1 или {}
  • performer2 - исполнитель 2 или {}
  • performer3 - исполнитель 3 или {}
  • performer_grp - поле "передано в отдел", когда исполнитель не выбран, однако известно в какой группе он должен быть

Чтобы администратор (оператор) имел доступ к тикетам, необходимо чтобы его административная запись была связана с какой-либо учетной записью в списке клиентов - рекомендуем сделать групу «сотрудники»/«техподдержка»/«монтажники»...

Также у административной записи существует привилегия «Руководитель. Доступ ко всем тикетам». Если данная галка не стоит, то оператор увидит только те тикеты, которые либо не связаны ни с каким абонентом, либо связаны с абонентом, к группе которого есть доступ. Однако недоступный тикет может стать доступным, если в качестве исполнителя (любого из трех) будет назначен текущий оператор либо же параметр «передать в отдел» будет таким же как группа оператора (например, передано в отдел «монтажники»). Таким образом, монтажникам можно не давать доступ к абонентам, а руководитель будет назначать тикет конкретному монтажнику или передавать в отдель и там монтаджники сами разберутся


Получение всех данных тикета #165

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=op&act=tickets&op=edit&id=165' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'

В ответе:

  • data - текущие данные тикета
  • history - лог изменений

Структура лога:

  • created_ts - таймстамп события
  • created_time - время события в текстовом виде
  • author - id кто изменил запись (по таблице администраторов)
  • changes - список измененных полей:
    • имя поля
    • предыдущее значение
    • установленное значение

Получение данных абонента

Для учетной записи с id=5:

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=u_main&uid=5' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'


Получение данных по всем услугам

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=api_services' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'


Получение информации по дополнительным полям учетных записей

curl 'http://app.nodeny-plus.com.ua/cgi-bin/noapi.pl?a=api_dopdata' \
    --cookie 'noses=OIcU//chVAcIQH1AX158Ww'

В ответе:

  • title - имя поля
  • name - имя поля в базе данных в таблице data0
  • flags - параметры поля
    • b - убирать пробелы в начале
    • c - убирать пробелы в конце
    • f - убирать все пробелы
    • d - преобразовать к нижнему регистру
    • e - транслировать в латинские символы
    • q - титульное поле (выводится в общем списке клиентов)
    • h - уникальное
    • i - запретить редактирование (кроме суперадмина)
    • j - сортировать как число на странице поиска абонентов
    • k - можно выбрать несколько значений
  • type - тип поля

Если тип поля select, то в param будет список значений для данного поля, при этом ключ - строка, которая хранится в базе, значение - строка, которая отображается пользователю