diff --git a/api.md b/api.md
new file mode 100644
index 0000000..f42e968
--- /dev/null
+++ b/api.md
@@ -0,0 +1,3559 @@
+
+
+ Документация Narayana Billing API.
+ Текущая версия — 2.2
+
+
+## Введение
+
+Любые приложения (в т.ч. клиентские и серверные) и любое оборудование, работающее в Narayana, взаимодействует с биллинговой системой (далее — биллингом) посредством API.
+
+Для разграничения доступа к API используется система секретных ключей — идентификаторов клиентского и/или серверного оборудования и/или программного обеспечения, так или иначе взаимодействующего с биллингом.
+
+Ключ может быть **клиентский** (требует обязательной авторизации пользователя) и **серверный с определенным уровнем доступа** (не требует авторизации). Клиентский ключ может быть как привязан к определенному пользователю (ключ с статической авторизацией) и игнорировать параметры login и password, переданные в запросе, так и требовать авторизацию (_ключ с динамической авторизацией_)
+
+У любого ключа могут быть установлены следущие параметры:
+
+* Название ключа (клиента) API
+* Способ авторизации ключа
+* Разрешенные IP-адреса
+* Уровень доступа
+* Пользователь по-умолчанию
+* Разрешенные методы
+
+### Название ключа
+
+В случае, если клиентом API является дочерняя телефонная станция, название клиента используется для привязки пользователей к АТС (SIP realm).
+
+В противном случае название клиента используется для внутреннего учета и не влияет ни на что.
+
+### Способ авторизации
+
+Способ авторизации определяет, по какому признаку будет производиться поиск пользователя при его авторизации. Возможным параметром может быть, к примеру, **username**, для авторизации по имени пользователя, **sip_extension**, для авторизации по
+SIP-логину, **id** для авторизации по внутреннему идентификационному номеру пользователя в базе данных.
+
+Обращаем внимание, что желательно использовать уникальный параметр способа авторизации (как, например, имя пользователя). Использование потенциально неуникального параметра (к примеру, CallerID) может привести к непредсказуемым последствиям.
+
+### Разрешенные IP-адреса
+
+Список IP-адресов, перечисленных через запятую, с которых могут производиться запросы к API. Допустимо использование масок.
+Пример: **178.1.1.*,87.1.1.2**
+
+### Уровень доступа
+
+Используется для определения типа ключа, а так же присвоения ему определенного уровня доступа.
+
+**Уровень доступа 0** — клиентский ключ. Для данного типа ключа обязательна авторизация пользователя любым способом (динамичным с использованием пароля либо статичным), в противном случае исполнение не-анонимных методов будет недоступно.
+
+**Уровень доступа отличный от 0** — серверный ключ. Для данного ключа авторизация с использованием пароля не нужна, и признак пользователя, от имени которого исполняется запрос, передается параметром login. Однако следует помнить, что в случае, если владелец серверного ключа не является владельцем пользователя, найденного по переданному в запросе признаку login, система отклонит запрос (кроме случаев, когда ключ обладает исключительными правами.)
+
+### Пользователь по-умолчанию
+
+Признак пользователя (к примеру, логин **username** или SIP-логин **sip_extension**, в зависимости от установленного способа авторизации), привязанный к ключу (статичная авторизация).
+Если данный параметр установлен, биллингом будут проигнорированы параметры **login** и **password**, переданные в запросе, и по-умолчанию будет авторизован пользователь, найденный по данному признаку.
+
+Для того, чтобы произвести запрос от имени другого пользователя, принадлежащему владельцу ключа, следует передать параметр username.
+
+Также, в некоторых случаях данный параметр используется для записи в память пользовательской переменной, необходимой для работы именно с этим ключом.
+
+Для того, чтобы записать пользовательскую переменную в память, необходимо в переменную **config.api_custom_identities** конфигурационного файла добавить новый способ авторизации (к примеру, **payment_method**) и в параметрах ключа указать **payment_method** как __<Способ авторизации>__, и значение, указанное как Пользователь, будет доступно как **request.payment_method**
+
+### Разрешенные методы
+
+Список методов, доступных к исполнению для данного ключа, перечисленный через запятую. Если данный параметр не заполнен, разрешаются к исполнению любые методы.
+
+Пример: **getInfo, getValue**
+
+* * *
+
+## Запрос и ответ
+
+1. Инициализация запроса к API
+
+ URL запроса: __https://rdx.narayana.im/billing/api/${VERISON}/${APIKEY}/${METHOD}__
+
+ Метод запроса: **POST** либо **GET**
+
+2. Базовые параметры запроса
+
+ * **login** — признак пользователя.
+ * **password** — md5-хэш пароля пользователя (для динамической авторизации)
+ * **username** — имя пользователя, от чьего имени производятся запросы к API (если не указано — используется текущий авторизованный пользователь)
+
+3. Ответ API
+
+ * Обычный ответ в формате JSON.
+
+ Ответ на запрос представлен в виде JSON-массива с тремя переменными:
+
+ > **{'result'}** — результат исполнения метода (boolean)
+
+ > **{'response'}** — ответ либо код ошибки (string)
+
+ > **{'description'}** — текствое описание причины ошибки (string)
+
+ Пример:
+
+ GET https://rdx.narayana.im/billing/api/2.2/key/getInfo?login=admin
+
+ {"result":false,"response":"E_AUTH_ERROR"}
+
+ * Текстовый ответ
+
+ Используется для типов авторизации **sip_extension**, **id** и прочих указанных в конфигурационном файле (опция **config.api\_plain\_answer**).
+
+ Содержит только текстовый ответ либо описание ошибки (**response**)
+
+4. Ошибки
+
+ В результате некорректного запроса к API сервер может отдать следущие ошибки:
+
+ * **HTTP 400 Invalid Request** — некорректно сформирован запрос.
+ * **HTTP 401 Unauthorized** — некорректный ключ.
+ * **HTTP 403 Forbidden** — доступ с этого IP запрещен
+
+ _NB! В случае запроса с некорректным и/или неактивным ключом, доступ с Вашего IP-адреса блокируется на неопределенный срок._
+
+
+* * *
+
+## Коды ошибок
+
+Ошибки инициализации запроса:
+
+* **E\_INCORRECT\_API\_VERSION** – Версия сервера и клиента не совпадают
+* **E\_UNKNOWN\_METHOD** – Неизвестный метод
+* **E\_UNDEFINED\_INSTRUCTION** – Невозможно выполнить метод
+* **E\_INSUFFICIENT\_ACCESS** – Недостаточно прав для исполнения данного метода
+* **E\_MISSING\_ARGUMENT** – Обязательный аргумент отсутствует
+* **E\_INVALID\_ARGUMENT** – Аргумент неверного типа
+* **E\_LUA\_EXCEPTION** – Критическая ошибка исполнения метода
+* **E\_AUTH\_FAILED** – Неверная пара признак пользователя/пароль
+* **E\_HAS\_NO\_ONE\_TOLD\_YOU\_SHE\_IS\_NOT\_BREATHING** – Вход в вечный цикл. Вы никогда не должны видеть этой ошибки.
+
+Ошибки исполнения запроса:
+
+* **E\_USER\_LOCKED** – Пользователь заблокирован.
+* **E\_SQL\_ERROR** – Ошибка SQL-запроса.
+* **E\_NOT\_EXIST** – Запрошенный объект не существует в данном контексте.
+* **E\_DOES\_NOT\_BELONG\_TO\_YOU** – Запрошенный объект не принадлежит вам
+* **E\_DATA\_ABORT** — Неверный ввод
+* **E\_ASTERISK\_QUERY\_ERROR** – Ошибка исполнения запроса к АТС.
+* **E\_SIP\_SERVER\_NOT\_EXIST** – Указанный SIP-сервер не существует
+* **E\_WRONG\_EXTENSION** – Недопустимый SIP логин
+* **E\_TRANSACTIONS\_LIMITED** – Финансовые транзакции ограничены
+* **E\_TRANSACTIONS\_LOCKED** – Финансовые транзакции заблокированы
+* **E\_ACCOUNT\_HAS\_USERS** – Невозможно удалить не пустой Лицевой счет
+* **E\_CANT\_CREATE\_ACCOUNT** – Невозможно создать Лицевой счет
+* **E\_CARRIER\_ERROR** – Ошибка отправки SMS: канал вернул ошибку
+* **E\_DID\_ORDER\_FAIL** – Ошибка заказа DID-номера
+* **E\_INITIATE\_CALL\_FAIL** – Ошибка инициирования звонка
+* **E\_INSUFFICIENT\_MONEY** – Недостаточно средств
+* **E\_INVALID\_SMS\_FROM** – Некорректное поле «Отправитель»
+* **E\_INVALID\_SMS\_TO** – Некорректное поле «Назначение»
+* **E\_CODE\_HAS\_NO\_BALANCE** – На этом предоплаченном коде нет доступных средств
+* **E\_INVITE\_LIMIT\_REACHED** – Вы исчерпали лимит приглашений
+* **E\_MAXIMUM\_PAYMENT** – Вы превысили максимальную сумму платежа
+* **E\_MINIMAL\_PAYMENT** – Сумма платежа меньше минимальной
+* **E\_MINIMAL\_START\_PAYMENT** – Сумма первого платежа меньше минимальной
+* **E\_TARGET\_WHITELISTED** – Данный IP-адрес находится в белом списке
+* **E\_TRANSACTION\_FAILED** – Ошибка выполнения финансовой транзакции
+* **E\_TTS\_ERROR** – Ошибка исполнения Text-to-Speech метода
+* **E\_UNROUTABLE** – Направление не обслуживается
+* **E\_CANT\_CREATE\_EXTENSION** — Невозможно создать учетную запись SIP
+* **E\_CANT\_DELETE\_EXTENSION** — Невозможно удалить учетную запись SIP
+* **E\_ALREADY\_ON\_THIS\_TARIFF** — Вы уже обслуживаетесь на данном тарифном плане
+* **E\_CONTACT\_RESELLER** – Данная операция недоступна пользователям реселлеров. Обратитесь к поставщику услуг.
+
+* * *
+
+## Объект «Пользователь»
+
+При работе с API биллинг-системы в основном используется объект user («Пользователь»).
+
+В данном разделе описаны все атрибуты объекта и значения, которые они могут принимать.
+
+Запросить значение какого-либо атрибута можно методами **getInfo()** (значения всех атрибутов), **getValue()** (значение конкретного атрибута)
+
+Записать значения атрибутов можно соответствующими типу атрибута функциями:
+
+* **updateUser()** — для данных пользователя
+* **updateAccount()** — для данных лицевого счета
+* **updateExtension()** — для данных учетной записи SIP.
+
+Пояснения к типам:
+
+* _string_ — строковый тип;
+* _int_ — целочисленный тип;
+* _float_ — нецелое число;
+
+### Пользователь ###
+
+* **id**(int) _[read only]_ — внутренний идентификатор пользователя в системе.
+* **username**(char[32]) _[read only]_ — имя пользователя.
+* **password**(char[32]) — зашифрованный пароль пользователя
+* **manager**(char[32]) _[read only]_ — владелец (менеджер) пользователя.
+* **accesslevel**(int) — уровень доступа пользователя.
+ + **10** — новый пользователь (ограничения — минимальный первый депозит)
+ + **11** — пользователь
+ + **22** — корпоративный пользователь (имеет доступ к управлению пользователями и тарифами)
+ + **25** — партнер (имеет права корпоративного пользователя плюс доступ к основным маршрутам)
+ + **33** — администратор системы
+ + **44** — Мастер-администратор системы
+* **active(int)** — состояние пользователя
+ + **-1** — заблокирован
+ + **0** — деактивирован (например, из-за нехватки баланса)
+ + **1** — активен
+ + **2** — блокировка внешних вызовов
+ + **3** — блокировка всех вызовов
+ + **99** — защита от блокировки
+* **account**(int) — номер лицевого счета пользователя
+* **currency**(char[3]) — код валюты пользователя
+ + По-умолчанию — **EUR**
+ + Доступные валюты можно получить посредством вызова метода **getCurrencies()**
+* **language**(char[20]) — язык интерфейса пользователя
+* **timezone**(float) — смещение часового пояса относительно UTC
+* **allowed_rates**(char[20]) — список разрешенных тарифов для пользователя, перечисленных через запятую
+* **allowed\_call\_len**(int) — максимально разрешенная длительность вызова для пользователя
+* **notify_email**(char[256]) — электронная почта для уведомлений
+* **notify_balance**(int) — отправлять уведомления на почту при достижении минимального баланса
+ + **0** — не отправлять
+ + **1** — отправлять
+* **notify\_balance\_limit**(float) — лимит баланса для уведомления (в системной валюте)
+* **notify_did**(int) — за какое количество дней до окончания действия аренды номера отправлять уведомление на почту
+ + **-1** — не уведомлять
+* **notify_ticket**(int) — отправлять уведомления на почту при получении ответа на тикет
+ + **0** — не отправлять
+ + **1** — отправлять
+* **invites**(int) — количество доступных приглашений
+* **comment**(char[1024]) — заметка о пользователе _(доступна только с уровнем доступа >= 33)_
+
+### Учетная запись SIP & DISA ###
+
+* **disa_pin**(int) — PIN-код для доступа к DISA
+* **disa\_trusted\_cli**(char[32]) — доверенный телефон для упрощенного доступа к DISA
+* **sip_extension**(char[32]) — учетная запись SIP (5 или 7 знаков)
+* **sip_password**(char[32]) — пароль SIP в открытом виде
+* **sip_server**(char[128]]) — адрес SIP-сервера
+* **sip_address**(char[128]]) — адрес SIP-сервера (DNS)
+* **sip_callerid**(char[32]) — текущий идентификатор звонящего (АОН)
+* **sip_language**(char[20]) — язык внутренних телефонных команд
+* **sip\_rates\_id**(int) — идентификатор тарифного плана для этого SIP-логина
+* **sip\_rates\_options**(char[128]) — идентификатор тарифных опций для этого SIP-логина, перечисленных через запятую
+* **sip_srtp**(int) — шифрование SRTP
+ + **0** — выключено
+ + **1** — включено принудительно
+* **sip_transport**(char[20]) — доступные транспорты для подключения к SIP-серверу
+ + **udp,tcp,tls** — разрешить UDP / TCP / TLS
+ + **udp,tcp** — разрешить UDP / TCP
+ + **tls** — только TLS
+ + **udp** — только UDP
+ + **tcp** — только TCP
+* **sip\_max\_call\_len**(int) — максимальная длительность вызова для данного SIP-логина
+* **sip_reach**(int) — доступность данного SIP-логина для звонка
+ + **0** — недоступен
+ + **2** — доступен
+* **sip_redirect**(char[64]) — переадресовать входящие на SIP-логин звонки
+* **sip\_force\_callback**(int) — принудительно обрывать вызов и создавать Callback на доверенный телефон
+* **sip\_realm**(char[16]) _[read only]_ — название SIP-сервера
+* **sip\_pitch\_shift**(int) — тон искажения голоса (-1 — выключено)
+* **sip_host**(char[32]) — IP-адрес для авторизации по хосту (billing v2.3-rt)
+* **sip_options**(char[128]) — дополнительные опции пира Asterisk (billing v2.3-rt)
+
+
+### Лицевой счет ###
+
+* **balance**(float) — текущий баланс пользователя в системной валюте (EUR)
+ + Пожалуйста, используйте метод **transferMoney()** для добавления средств пользователю.
+* **overdraft**(float) — текущий кредитный лимит пользователя в системной валюте (EUR)
+* **refill_allowed**(int) — разрешить проведения финансовых транзакций
+ + **0** — финансовые операции запрещены
+ + **1** — разрешены анонмные способы пополнения счета
+ + **2** — разрешены все способы пополнения счета
+* **postpaid**(int) — постоплатная система расчетов
+ + **0** — выключено (используется предоплата)
+ + **1** — включено (используется постоплата; раз в месяц выписывается счет)
+* **billing_name**(char[100]) — полное имя (используется для выписывания счетов)
+* **billing_address**(char[200]) — контактный адрес (используется для выписывания счетов)
+* **billing_email**(char[100]) — электронная почта для пересылки счетов
+* **billing\_bank\_account**(char[200]) — данные банковского счета для взаиморасчетов
+
+
+### Виртуальные атрибуты ###
+
+Данные атрибуты пользователя, служащие для удобства обработки информации, доступны только для чтения, и не записаны в БД.
+
+* **actualbalance** — актуальный баланс в системной валюте (EUR) с учетом овердрафта
+* **displaycurrency** — название выбранной валюты (знак)
+* **displaybalance** — текущий баланс в валюте пользователя
+* **displayoverdraft** — кредитный лимит в валюте пользователя
+* **displaynotifybalancelimit** — лимит баланса для уведомления в валюте пользователя
+* **unread_tickets** — количество непрочитанных тикетов во внутренней тикет-системе
+
+
+* * *
+
+## Функции API ##
+
+Обязательные параметры выделены жирным цветом.
+В случае, если необязательный параметр имеет значение по-умолчанию, оно указывается в [квадратных скобках]
+
+Пояснения к типам:
+
+* _string_ — строковый тип;
+* _ustring_ — строковый тип со строгими значениями; допустимые значения указаны в {фигурных скобках};
+* _num_ — численный тип;
+* _bool_ — булевый тип (может принимать значения «true» или «false»);
+
+В случае, если тип не указан — параметр может быть любого типа.
+
+В (скобках) после названия метода указан необходимый уровень доступа для исполнения данного метода.
+Методы с уровнем доступа _0_ являются анонимными и могут быть исполнены без авторизации.
+
+В примерах запросов к API используется версия API **2.2** и ключ «ffffffffff», а также опущены авторизационые данные.
+Пожалуйста, убедитесь в том, что Вы используете актуальные данные перед исполнением запроса!
+
+_NB!_ За исключением раздела **«Работа с пользователем»** результаты в «Примерах запроса» будут указаны без
+
+> {result: true,
+> response: "something"}
+
+а будут содержать в себе лишь значение **«response»**.
+
+Если в поле «Возвращает» указано «_true_ / _false_» — функция не имеет ответа, а имеет лишь результат исполнения **«result»** (_true_ или _false_), но в то же время **«response»** может содержать код ошибки в случае неудачного исполнения.
+
+
+## Пользователь ##
+
+**getInfo**(1) — Получение информации о пользователе.
+
+
+Возвращает: JSON-массив с информацией о пользователе
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getInfo?login=admin
+ __________________________________________________
+ {"атрибут": "значение (см. раздел «Объект Пользователь»)",
+ "sip_extensions": [ {"атрибут_SIP_аккаунта": "значение (см. раздел «Объект Пользователь»)"}, ... ],
+ "did_numbers:" [ {"атрибут_DID_номера": "значение (см. функции «Прямые номера»"}, ... ],
+ "sim_cards:" [ {"атрибут_SIM_карты": "значение (см. функции «SIM-карты»"}, ...],
+ "broadcasts": [ {"атрибут_широковещательной_новости": "значение (см. функции «Новости и широковещательные сообщения»"}, ... ] }
+
+
+
+
+
+
+**getValue**(1) — Получение конкретного параметра пользователя.
+
+
+Возвращает: Значение запрашиваемого параметра
+Аргументы:
+
+* **property**(string) — запрашиваемый параметр
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getValue?property=balance
+ _______________________________________________________
+ 1.00
+
+
+
+
+**updateUser**(1) — Изменение данных пользователя.
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* web\_password(string) — новый пароль пользователя (md5-хэш)
+* accesslevel(num) — уровень доступа
+* active(num) — состояние
+* account(num) — номер Лицевого счета
+* currency(string) — код валюты
+* language(string) — язык интерфейса
+* timezone(num) — смещение часового пояса относительно UTC
+* allowed\_rates(string) — список разрешенных тарифов (через запятую)
+* allowed\_call\_len(num) — максимально разрешенная длительность вызова (сек.)
+* notify\_email(string) — адрес e-mail для уведомлений
+* notify\_balance(num) — уведомлять при достижении минимального баланса
+* notify\_did(num) — уведомлять при достижении %i дней до конца срока аренды прямого номера
+* notify\_ticket(num) — уведомлять при ответах на тикет
+* notify\_balance\_limit(num) — минимальный баланс для уведомлений
+* invites(num) — количество доступных приглашений
+* comment(string) — примечание
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateUser?username=test&active=0
+ _______________________________________________________
+ true
+
+
+
+
+
+## Маршрутизация ##
+
+
+**getRoutes**(22) — Получение списка доступных маршрутов.
+
+
+Возвращает: JSON-массив со списком маршрутов и информацией о них.
+Аргументы:
+
+* update(bool) — обновить баланс запрашиваемых маршрутов _[false]_
+* type(ustring{all,sip,sms,default}) — тип запрашиваемых маршрутов _[all]_
+* all(bool) — запросить маршруты, принадлежащие корпоративным пользователям _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getRoutes?update=true
+ _______________________________________________________
+ [{"id": ID маршрута,
+ "prefix":"SIP-prefix маршрута",
+ "cli": тип АОН (1 — только RU, 2 — международный, 99 — без ограничений),
+ "route":"название маршрута",
+ "owner":"владелец",
+ "enabled": статус (0 или 1),
+ "type":"тип (default, sms, sip)",
+ "lastupdate":"дата последнего обновления баланса",
+ "clientlastupdate":"клиентская дата последнего обновления баланса",
+ "balance":"баланс"}]
+
+
+
+
+
+
+**getRouteInfo**(22) — Получение информации о маршруте по его ID
+
+
+Возвращает: Информация о маршруте (JSON)
+Аргументы:
+
+* **id**(num) — идентификатор маршрута
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getRouteInfo?id=1
+ _______________________________________________________
+ {"id": ID маршрута,
+ "prefix":"SIP-prefix маршрута",
+ "cli": тип АОН (1 — только RU, 2 — международный, 99 — без ограничений),
+ "route":"название маршрута",
+ "owner":"владелец",
+ "enabled": статус (0 или 1),
+ "type":"тип (default, sms, sip)",
+ "lastupdate":"дата последнего обновления баланса",
+ "clientlastupdate":"клиентская дата последнего обновления баланса",
+ "balance":"баланс"}
+
+
+
+
+**addRoute**(22) — Добавление нового маршрута в маршрутизацию
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **route**(string) — название маршрута
+* **type**(ustring{sip,sms}) — тип маршрута
+* **sip\_server**(string) — SIP-сервер для добавления маршрута
+* **prefix**(string) — SIP-префикс для добавления маршрута (outlineN/) либо название SMS-обработчика
+* host(string) — адрес хоста (домен либо IP), если необходимо _[]_
+* user(string) — имя пользователя для авторизации _[]_
+* fromuser(bool) — использовать имя пользователя как **fromuser** в настройках peer'а _[false]_
+* pass(string) — пароль для авторизации _[]_
+* callerid(num) — тип АОН (1 — только RU, 2 — международный, 99 — без ограничений) _[2]_
+* balance\_handler(string) — обработчик для проверки баланса _[]_
+* balance\_username(string) — имя пользователя для обработчика баланса _[]_
+* balance\_password(string) — пароль для обработчика баланса _[]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addRoute?route=test&type=sms&sip_server=sip.serv.er&prefix=ourhandler
+ _______________________________________________________
+ true
+
+
+
+
+**updateRoute**(22) — Обновление параметров маршрута
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — идентификатор маршрута
+* route(string) — название маршрута
+* prefix(string) — SIP-prefix (outlineN/) либо название SMS-обработчика
+* host(string) — адрес хоста (домен либо IP)
+* user(string) — имя пользователя для авторизации
+* pass(string) — пароль для авторизации
+* callerid(num) — тип АОН (1 — только RU, 2 — международный, 99 — без ограничений)
+* balance\_handler(string) — обработчик для проверки баланса
+* balance\_username(string) — имя пользователя для обработчика баланса
+* balance\_password(string) — пароль для обработчика баланса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateRoute?id=1&route=changedName
+ _______________________________________________________
+ true
+
+
+
+
+**updateRouteState**(22) — Изменение состояния маршрута
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — идентификатор маршрута
+* **state**(bool) — состояние маршрута (true или false)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateRouteState?id=1&state=false
+ _______________________________________________________
+ true
+
+
+
+
+**deleteRoute**(22) — Удаление маршрута из маршрутизации
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — идентификатор маршрута
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteRoute?id=1
+ _______________________________________________________
+ true
+
+
+
+
+
+## Направления и тарификация ##
+
+**resolveDirection**(0) — Разрешить направление по номеру телефона
+
+
+Возвращает: Выбранную информацию о направлении
+Аргументы:
+
+* **number**(string) — номер телефона
+* select(ustring{id,code,direction}) — Поле для вывода (ID направления, код или название) _[direction]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/resolveDirection?number=79271871234
+ _______________________________________________________
+ Russia Mobile - Megafon
+
+
+
+
+**getDirections**(0) — Получение списка всех направлений
+
+
+Возвращает: JSON-массив со списком всех направлений в системе
+Аргументы:
+
+* distinct(bool) — показывать только одно значение *code* для направления _[true]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDirections
+ _______________________________________________________
+ [{"code": код направления,
+ "id": ID направления,
+ "direction": "название направления",
+ "min_len": минимально допустимая длина номера,
+ "max_len": максимально допустимая длина номера}, ...]
+
+
+
+
+
+**getCurrentRates**(0) — Получение текущей тарификации
+
+
+Возвращает: JSON-массив в тарифами текущего пользователя
+Аргументы:
+
+* currency(string) — выбранная валюта _[EUR]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getCurrentRates
+ _______________________________________________________
+ {"ID направления":
+ {"direction":"Название направления",
+ "routing":[
+ {"routename":"Название маршрута",
+ "route": ID маршрута,
+ "displaycost": Цена в валюте пользователя,
+ "priority": Приоритет,
+ "cost": Цена в системной валюте
+ }
+ ]
+ }
+ ...
+ }
+
+
+
+
+**getRatesList**(1) — Получение списка тарифных планов
+
+
+Возвращает: JSON-массив — список доступных тарифных планов
+Аргументы:
+
+* all(bool) — Показать ТП, принадлежащие корпоративным пользователям _[false]_
+* is\_public(bool) — Показать только публичные тариыф _[false]_
+* is\_option(bool) — Показать тарифные опции (*true* — только тарифные опции, *false* — только тарифы, не установлено — показать все)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getRatesList
+ _______________________________________________________
+ [{"bill_type":"Тип тарификации",
+ "id":ID тарифа,
+ "is_public":Публичный ли тариф?,
+ "table_name":"Таблица в БД",
+ "owner":"Владелец тарифа",
+ "display_switch_price":Отображаемая цена подключения,
+ "name":"Название тарифа",
+ "switch_price":Цена подключение в системной валюте,
+ "did_multiplier":Множитель цен для DID-номеров,
+ "is_option":Тарифная опция?,
+ "multiplier":Множитель цен,
+ "description":"Описание тарифа"}, ...]
+
+
+
+
+
+**switchRates**(1) — Смена тарифного плана, подключение и отключение тарифных опций
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID тарифа (опции)
+* state(bool) — Состояние (только для тарифных опций)
+* sip\_extension(string) — Учетная запись SIP для изменения
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/switchRates?id=1&sip_extension=1000001
+ _______________________________________________________
+ true
+
+
+
+
+**getRates**(1) — Получение направлений в тарифе по ID тарифа (опции)
+
+
+Возвращает: JSON-список направлений в тарифном плане
+Аргументы:
+
+* **id**(num) — ID тарифа (опции)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getRates?id=1
+ _______________________________________________________
+ {"ID направления":
+ {"direction":"Название направления",
+ "routing":[
+ {"routename":"Название маршрута",
+ "route": ID маршрута,
+ "displaycost": Цена в валюте пользователя,
+ "priority": Приоритет,
+ "cost": Цена в системной валюте
+ }
+ ]
+ }
+ ...
+ }
+
+
+
+
+**getRatesInfo**(22) — Получение параметров тарифного плана
+
+
+Возвращает: Параметры тарифного плана (JSON)
+Аргументы:
+
+* **id**(num) — ID тарифа (опции)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getRatesInfo?id=1
+ _______________________________________________________
+ {"bill_type":"Тип тарификации",
+ "id":ID тарифа,
+ "is_public":Публичный ли тариф?,
+ "table_name":"Таблица в БД",
+ "owner":"Владелец тарифа",
+ "display_switch_price":Отображаемая цена подключения,
+ "name":"Название тарифа",
+ "switch_price":Цена подключение в системной валюте,
+ "did_multiplier":Множитель цен для DID-номеров,
+ "is_option":Тарифная опция?,
+ "multiplier":Множитель цен,
+ "description":"Описание тарифа"}
+
+
+
+
+
+**addRates**(22) — Добавление нового тарифного плана
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **table**(string) — Название таблицы в БД
+* **name**(string) — Название тарифного плана (опции)
+* bill\_type(string) — Тип тарификации _[by_minute]_
+* is\_option(bool) — Тарифная опция? _[false]_
+* is\_public(bool) — Публичный тариф? _[false]_
+* switch\_price(num) — Цена подключения _[0.00]_
+* multiplier(num) — Множитель цен _[1.00]_
+* did\_multiplier(num) — Множитель цен прямых номеров _[1.00]_
+* description(string) — Описание тарифа _[]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addRates?table=test&name=test
+ _______________________________________________________
+ true
+
+
+
+
+**updateRates**(22) — Обновление параметров тарифного плана
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID тарифа (опции)
+* name(string) — Название тарифного плана (опции)
+* bill\_type(string) — Тип тарификации
+* is\_option(bool) — Тарифная опция?
+* is\_public(bool) — Публичный тариф?
+* switch\_price(num) — Цена подключения
+* multiplier(num) — Множитель цен
+* did\_multiplier(num) — Множитель цен прямых номеров
+* description(string) — Описание тарифа
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateRates?id=1&name=etst
+ _______________________________________________________
+ true
+
+
+
+
+**deleteRates**(22) — Удаление тарифного плана
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID тарифа (опции)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteRates?id=1
+ _______________________________________________________
+ true
+
+
+
+
+**addDirection**(22) — Добавление направления в тарифный план
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **rates**(num) — ID тарифного плана (опции)
+* **direction**(num) — ID направления
+* **cost**(num) — Цена за единицу тарификации
+* **route**(num) — ID маршрута
+* priority(num) — Приоритет _[1]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addDirection?rates=1&direction=600&route=10&cost=0.15
+ _______________________________________________________
+ true
+
+
+
+
+**updateDirection**(22) — Обновление параметров направления в тарифном плане
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **rates**(num) — ID изменяемого тарифного плана (опции)
+* **direction**(num) — ID изменяемого направления
+* prior(num) — Приоритет изменяемого направления _[1]_
+* cost(num) — Цена за единицу тарификации
+* route(num) — ID маршрута
+* priority(num) — Приоритет
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateDirection?rates=1&direction=600&route=11&cost=0.18
+ _______________________________________________________
+ true
+
+
+
+
+**updateDirections**(22) — Обновление параметров направлений в тарифном плане
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **rates**(num) — ID изменяемого тарифного плана (опции)
+* **directions**(string) — JSON-массив со списком изменяемых направлений (формат см. в функции *updateDirection()*)
+
+Пример запроса:
+
+ POST /billing/api/2.2/ffffffffff/updateDirections?rates=1
+ _______________________________________________________
+ true
+
+
+
+
+**deleteDirection**(22) — Удаление направления из тарифного плана
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **rates**(num) — ID изменяемого тарифного плана (опции)
+* **direction**(num) — ID удаляемого направления
+* prior(num) — Приоритет удаляемого направления _[1]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteDirection?rates=1&direction=600
+ _______________________________________________________
+ true
+
+
+
+
+**updateMarkup**(22) — Автоматическая наценка в тарифном плане
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **rates**(num) — ID изменяемого тарифного плана (опции)
+* **markup**(num) — Множитель
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateMarkup?rates=1&markup=1.2
+ _______________________________________________________
+ true
+
+
+
+**copyDirections**(22) — Копирование текущего тарифного плана пользователя в выбранный ТП
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **rates**(num) — ID тарифного плана, куда будет скопирован текущий ТП
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/copyDirections?rates=2
+ _______________________________________________________
+ true
+
+
+
+
+**getBillTypes**(22) — Получение списка доступных типов тарификации
+
+
+Возвращает: JSON-массив — список доступных типов тарификации
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getBillTypes
+ _______________________________________________________
+ [{"type":"Название типа",
+ "free_threshold": Нетарифицируемый порог,
+ "step":Шаг тарификации}, ...]
+
+
+
+
+**getBillType**(33) — Получение информации о типе тарификации по его названию
+
+
+Возвращает: Информация о типе тарификации (JSON)
+Аргументы:
+
+* **bill\_type**(string) — Название типа тарификации
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getBillType?bill_type=by_second
+ _______________________________________________________
+ {"type":"Название типа",
+ "free_threshold": Нетарифицируемый порог,
+ "step":Шаг тарификации}
+
+
+
+
+
+**addBillType**(33) — Добавление типа тарификации
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **bill\_type**(string) — Название типа тарификации
+* **free\_threshold**(num) — Нетарифицируемый порог
+* **step**(num) — Шаг тарификации (сек.)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addBillType?bill_type=custom_type&free_threshold=3&step=10
+ _______________________________________________________
+ true
+
+
+
+
+**updateBillType**(33) — Обновление параметров типа тарификации
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **bill\_type**(string) — Название изменяемого типа тарификации
+* free\_threshold(num) — Нетарифицируемый порог
+* step(num) — Шаг тарификации (сек.)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateBillType?bill_type=custom&free_threshold=0
+ _______________________________________________________
+ true
+
+
+
+
+**deleteBillType**(33) — Удаление типа тарификации
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **bill\_type**(string) — Название удаляемого типа тарификации
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteBillType?bill_type=custom
+ _______________________________________________________
+ true
+
+
+
+
+
+## Обработка звонков ##
+
+**resolveCallerid**(0) — Получение текущего CallerID пользователя __! DEPRECATED: Используйте getValue?property=sip\_callerid !__
+
+
+Возвращает: CallerID пользователя
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/resolveCallerid
+ _______________________________________________________
+ 79010000001
+
+
+
+
+**createCallback**(1) — Инициация Callback
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* callerid(string) — CallerID (в случае, если не указан — используем CallerID профиля)
+* **destination1**(string) — Первое назначение
+* **destination2**(string) — Второе назначение
+* epitch(num) — Модификатор тона голоса (от 1 до 6)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/createCallback?destination1=79010000001&destination2=79020000002
+ _______________________________________________________
+ true
+
+
+
+
+**callPrepare**(50) — Инициация звонка
+
+
+Возвращает: Allowed/Declined MaxCallTime/ErrorCode Destination CallerID DirectionName RoutePrefix RouteName PitchRx PitchTx
+Аргументы:
+
+* callerid(string) — CallerID (в случае, если не указан — используем CallerID профиля)
+* **destination**(string) — Назначение
+* prior(num) — Приоритет _[1]_
+* from\_originate(string) — Если звонок был инициирован не напрямую, в параметре необходимо указать **true**, либо DID-номер, на который пришел звонок
+* source(string) — IP-адрес АТС, инициирующей звонок
+* originated\_by(string) — Инициатор звонка (например: user, system, slave и пр.)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/callPrepare?login=10000&destination=79010000001
+ _______________________________________________________
+ Allowed 99999 79010000001 79020000002 RussiaMobile-Tele2 outline1/ route1-cli -1 -1
+
+
+
+
+**callFinish**(50) — Завершение звонка
+
+
+Возвращает: Saved DirectionName [CallerID/Destination] via [route] time cost CURRENCY SIPSTATUS
+Аргументы:
+
+* callerid(string) — CallerID (в случае, если не указан — используем CallerID профиля)
+* **destination**(string) — Назначение
+* prior(num) — Приоритет _[1]_
+* **length**(num) — Длительность звонка в секундах
+* status(string) — SIP-статус звонка
+* is\_did(string) — Если звонок был совершен на DID-номер, параметр принимает значение данного DID-номера
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/callFinish?login=10000&destination=79020000002&length=0&status=0CANCEL
+ _______________________________________________________
+ Saved RussiaMobile-Tele2 [79010000001/79020000002] via [route1-cli] 0 0 EUR 0CANCEL
+
+
+
+
+**getTextBalance**(50) — Получение баланса пользователя в текстовом виде
+
+
+Возвращает: Баланс для проговаривания АТС
+Аргументы:
+
+* balance(num) — Баланс для преобразования в текст (если не указано, используется баланс пользователя)
+* balance(string) — Валюта (если не указано, используется валюта пользователя)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getTextBalance?login=10000
+ _______________________________________________________
+ ostatok&ноль&евро&ноль&центов&tadam3s
+
+
+
+
+**authorizeCall**(50) — Авторизация пользователя в системе DISA
+
+
+Возвращает: SIP extension авторизованного пользователя либо код ошибки (_Declined XXX_)
+Аргументы:
+
+* **callerid**(string) — CallerID, с которого поступил звонок на обработчик DISA
+* **auth**(string) — Строка авторизации (обычно, это SIP extension + PIN-код)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/authorizeCall?callerid=79010000001&auth=100006666
+ _______________________________________________________
+ 10000
+
+
+
+
+**authorizeRealm**(50) — Проверка подлинности запроса дочерней АТС
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **source**(string) — IP-адрес дочерней АТС
+* **auth**(string) — MD5-хэш от строки "${API-ключ}${IP-адрес АТС}${Имя API-ключа}"
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/authorizeRealm?params
+ _______________________________________________________
+ true
+
+
+
+
+**createTTS**(50) — Преобразование текста в звуковой файл
+
+
+Возвращает: аудиопоток в формате **wav**
+Аргументы:
+
+* **text**(string) — Текст
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/createTTS?text=hello+world
+ _______________________________________________________
+
+
+
+
+
+
+## Прямые номера ##
+
+**getDisaDIDList**(0) — Получение списка номеров DISA
+
+
+Возвращает: JSON-массив — список доступных номеров DISA
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDisaDIDList
+ _______________________________________________________
+ [{"did":"Номер доступа", "comment":"DISA\/Регион"}, ... ]
+
+
+
+
+**updateDIDState**(1) — Изменение состояния прямого номера
+
+
+Возвращает: _true_ / _ false_
+Аргументы:
+
+* **did**(string) — Изменяемый DID-номер
+* parameter(ustring{auto_renew, enabled}) — Изменяемый параметр _[auto_renew]_
+* **state**(bool) — Состояние
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateDIDState?did=78005555550¶meter=enabled&state=false
+ _______________________________________________________
+ true
+
+
+
+
+**getDIDPool**(1) — Получение пула прямых номеров (список стран, локаций либо DID-номеров)
+
+
+Возвращает: Пул прямых номеров
+Аргументы:
+
+* country(string) — Страна
+* area(string) — Регион
+* search\_pattern(string) — Поисковый запрос
+
+Примеры запросов:
+
+ GET /billing/api/2.2/ffffffffff/getDIDPool
+ _______________________________________________________
+ [{"country": "Страна"}, ...]
+
+
+ GET /billing/api/2.2/ffffffffff/getDIDPool?country=Страна
+ _______________________________________________________
+ [{"area": "Регион"}, ...]
+
+
+ GET /billing/api/2.2/ffffffffff/getDIDPool?country=Страна&area=Регион&search_pattern=666
+ _______________________________________________________
+ [{"displaycost": Цена аренды в валюте пользователя,
+ "displayinstallcost": Цена подключения в валюте пользователя,
+ "cost": Цена аренды в системной валюте,
+ "installcost": Цена подключения в системной валюте,
+ "country":"Страна",
+ "area":"Регион",
+ "voice_support":"Поддержка голоса",
+ "sms_support":"Поддержка SMS",
+ "did":"DID-номер",
+ "pool_id": ID пула,
+ "arg1": "Первый параметр для подключения",
+ "arg2": "Второй параметр для подключения",
+ "arg3": "Третий параметр для подключения"}, ...]
+
+
+
+
+
+**orderDID**(1) — Заказ прямого номера
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **pool\_id**(num) — ID пула
+* **did**(string) — прямой номер
+* arg1(string) — Первый параметр
+* arg2(string) — Второй параметр
+* arg3(string) — Третий параметр
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/orderDID?pool_id=1&did=78005555550&arg1=something&arg2=somewhere
+ _______________________________________________________
+ true
+
+
+
+
+**getDIDList**(1) — Получение списка прямых номеров
+
+
+Возвращает: JSON-массив — список прямых номеров
+Аргументы:
+
+* sort\_by(ustring{expiration, cost, did) — Сортировка по (истечение аренды, стоимость, номер) _[expiration]_
+* own(bool) — Показывать только собственные прямые номера _[true]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDIDList
+ _______________________________________________________
+ [{"displaycost": Цена аренды в валюте пользователя,
+ "pool": ID пула,
+ "renew_notify": Отправлено уведомление о просрочке,
+ "expiration":"Дата истечения в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС",
+ "enabled": Включен ли DID?,
+ "did": Прямой номер,
+ "auto_renew": Включено ли автопродление?,
+ "comment":"Комментарий",
+ "owner":"Владелец",
+ "cost":Цена аренды в системной валюте}, ...]
+
+
+
+
+**addDID**(22) — Добавление прямого номера
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **did**(string) — Прямой номер
+* **owner**(string) — Владелец прямого номера
+* comment(string) — Комментарий _[]_
+* cost(num) — Цена аренды _[0.00]_
+* expiration(string) — Дата истечения в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addDID?did=78005555550&owner=user&cost=100
+ _______________________________________________________
+ true
+
+
+
+
+**updateDID**(22) — Обновление параметров прямого номера
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **did**(string) — Изменяемый прямой номер
+* owner(string) — Новый владелец
+* comment(string) — Комментарий
+* cost(num) — Цена аренды
+* expiration(string) — Дата истечения в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateDID?did=78005555550&cost=101
+ _______________________________________________________
+ true
+
+
+
+
+**deleteDID**(22) — Удаление прямого номера
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **did**(string) — Удаляемый прямой номер
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteDID?did=78005555550
+ _______________________________________________________
+ true
+
+
+
+
+**getDIDInfo**(22) — Получение информации о прямом номере
+
+
+Возвращает: Информация о прямом номере (JSON)
+Аргументы:
+
+* **did**(string) — Прямой номер
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDIDInfo?did=78005555550
+ _______________________________________________________
+ {"displaycost": Цена аренды в валюте пользователя,
+ "expiration":"Дата истечения в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС",
+ "owner":"Владелец",
+ "comment":"Комментарий",
+ "did": Прямой номер,
+ "auto_renew": Включено ли автопродление?,
+ "enabled": Включен ли прямой номер?,
+ "renew_notify": Отправлено уведомление о просрочке,
+ "cost": Цена аренды в системной валюте}
+
+
+
+
+**renewDID**(22) — Продление прямого номера
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **did**(string) — Продлеваемый DID-номер
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/renewDID?did=78005555550
+ _______________________________________________________
+ true
+
+
+
+
+**addDIDPool**(33) — Добавление пула прямых номеров
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **country**(string) — Страна
+* **area**(string) — Регион
+* cost(num) — Цена аренды в месяц _[0.00]_
+* installcost(num) — Цена подключения _[0.00]_
+* provider(string) — Обработчик _[local]_
+* user(string) — Пользователь (передается в обработчик) _[]_
+* pass(string) — Пароль (передается в обработчик) _[]_
+* param1(string) — Параметр 1 (передается в обработчик) _[]_
+* param2(string) — Параметр 2 (передается в обработчик) _[]_
+* param3(string) — Параметр 3 (передается в обработчик) _[]_
+* qty(num) — Количество отображаемых номеров _[100]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addDIDPool?country=Russia&area=Moscow&cost=50
+ _______________________________________________________
+ true
+
+
+
+
+**updateDIDPool**(33) — Обновление параметров пула прямых номеров
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID изменяемого пула прямых номеров
+* country(string) — Страна
+* area(string) — Регион
+* cost(num) — Цена аренды в месяц
+* installcost(num) — Цена подключения
+* provider(string) — Обработчик
+* user(string) — Пользователь (передается в обработчик)
+* pass(string) — Пароль (передается в обработчик)
+* param1(string) — Параметр 1 (передается в обработчик)
+* param2(string) — Параметр 2 (передается в обработчик)
+* param3(string) — Параметр 3 (передется в обработчик)
+* qty(num) — Количество отображаемых номеров
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateDIDPool?id=1&cost=100
+ _______________________________________________________
+ true
+
+
+
+**getDIDPools**(33) — Получение списка пулов прямых номеров
+
+
+Возвращает: Список пула прямых номеров (JSON)
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDIDPools
+ _______________________________________________________
+ [{"id": ID пула,
+ "country":"Страна",
+ "area":"Зона"
+ "cost": Цена в месяц,
+ "installcost": Цена установки,
+ "displayinstallcost": Цена установки в валюте пользователя,
+ "displaycost": Цена в месяц в валюте пользователя,
+ "quantity": Количество номеров на странице,
+ "provider":"Провайдер (обработчик)"
+ "username":"Имя пользователя для обработчика",
+ "password":"Пароль для обработчика",
+ "param1":"Параметр №1 для обработчика",
+ "param2":"Параметр №2 для обработчика",
+ "param3":"Параметр №3 для обработчика"}, ...]
+
+
+
+
+**getDIDPoolInfo**(33) — Получение информации о пуле прямых номеров
+
+
+
+Возвращает: Информация о пуле прямых номеров (JSON)
+Аргументы:
+
+* **id**(num) — ID пула прямых номеров
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDIDPoolInfo?id=1
+ _______________________________________________________
+ {"id": ID пула,
+ "country":"Страна",
+ "area":"Зона"
+ "cost": Цена в месяц,
+ "installcost": Цена установки,
+ "displayinstallcost": Цена установки в валюте пользователя,
+ "displaycost": Цена в месяц в валюте пользователя,
+ "quantity": Количество номеров на странице,
+ "provider":"Провайдер (обработчик)"
+ "username":"Имя пользователя для обработчика",
+ "password":"Пароль для обработчика",
+ "param1":"Параметр №1 для обработчика",
+ "param2":"Параметр №2 для обработчика",
+ "param3":"Параметр №3 для обработчика"}
+
+
+
+
+**deleteDIDPool**(33) — Удаление пула прямых номеров
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID удаляемого пула прямых номеров
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteDIDPool?id=1
+ _______________________________________________________
+ true
+
+
+
+**getDIDCount**(50) — Проверка существования прямого номера
+
+
+Возвращает: Количество найденных DID-номеров
+Аргументы:
+
+* did(string) — Искомый DID-номер
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDIDCount?did=78005555550
+ _______________________________________________________
+ 1
+
+
+
+
+
+## Фильтры DIDTables ##
+
+**getDIDActions**(1) — Получение списка возможных действий
+
+
+Возвращает: Список возможных действий для DIDTables (JSON)
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDIDActions
+ _______________________________________________________
+ {"voice":
+ {"Действие1":"Значение destination по-умолчанию"},
+ {"Действие2":"Значение destination по-умолчанию"},
+ ...
+ },
+ "sms":{
+ {"Действие1 (SMS)":"Значение destination по-умолчанию"},
+ {"Действие2 (SMS)":"Значение destination по-умолчанию"},
+ ...
+ }
+
+
+
+**getFilters**(1) — Получение списка возможных фильтров
+
+
+Возвращает: Список возможных источников/паттернов для DIDTables (JSON)
+Аргументы:
+
+* resolver(string) — Получение списка доступных паттернов по конкретному обработчику
+* sources(bool) — Получить только источники _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getFilters
+ _______________________________________________________
+ {"Источник1":{ "Паттерн1", "Паттерн2" },...}
+
+
+
+
+**addDIDRule**(1) — Создание нового правила DIDTables
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **did**(string) — Прямой номер
+* source(string) — Используемый фильтр
+* pattern(string) — Паттерн
+* policy(ustring{ACCEPT,REJECT}) — Политика (принять/отклонить)
+* sms\_action(string) — Действие для обработки SMS-сообщения
+* sms\_destination(string) — Назначение (SMS)
+* action(string) — Действие для обработки входящего звонка
+* server(string) — Сервер, на котором выполняется правило
+* destination(string) — Назначение
+* callerid(string) — Передаваемый АОН (строка TRANSIT будет заменена на номер звонящего)
+* timeout(num) — Таймаут (сек.)
+* condition(string) — Условие (SUCCESS — успешный вызов, UNSUCCESS — неудачный вызов, BUSY — занят, NOANSWER — нет ответа, UNAVAIL — недоступен)
+* input(string) — Ввод (если «условие» выбрано «Совпадение ввода»)
+* position(ustring{start,end}) — Добавить правило в начало _[start]_ или в конец _[end]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addDIDRule?did=78005555550&source=number&pattern=*&policy=ACCEPT&destination=10000
+ _______________________________________________________
+ true
+
+
+
+**updateDIDRule**(1) — Обновление правила DIDTables
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **did**(string) — Прямой номер
+* **rule**(num) — Номер изменяемого правила
+* pos(num) — Новая позиция
+* source(string) — Используемый фильтр
+* pattern(string) — Паттерн
+* policy(ustring{ACCEPT,REJECT}) — Политика (принять/отклонить)
+* sms\_action(string) — Действие для обработки SMS-сообщения
+* sms\_destination(string) — Назначение (SMS)
+* action(string) — Действие для обработки входящего звонка
+* server(string) — Сервер, на котором выполняется правило
+* destination(string) — Назначение
+* callerid(string) — Передаваемый АОН (строка TRANSIT будет заменена на номер звонящего)
+* timeout(num) — Таймаут (сек.)
+* condition(string) — Условие,
+* input(string) — Ввод (если «условие» выбрано «Совпадение ввода»)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateDIDRule?did=78005555550&rule=1&pos=2
+ _______________________________________________________
+ true
+
+
+
+**deleteDIDRule**(1) — Удаление правила DIDTables
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **did**(string) — Прямой номер
+* **rule**(num) — Номер удаляемого правила
+* pattern(string) — Паттерн (для удаления по паттерну — указать *rule* как *-1* )
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteDIDRule?did=78005555550&rule=-1&pattern=74955555550
+ _______________________________________________________
+ true
+
+
+
+**getDIDRules**(1) — Получение списка правил для прямого номера
+
+
+Возвращает: Список правил для прямого номера (JSON)
+Аргументы:
+
+* **did**(string) — Прямой номер
+* rule(num) — Номер правила (если не указано — возвращает все правила)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getDIDRules?did=78005555550
+ _______________________________________________________
+ [{"timeout": Таймаут (с.),
+ "server":"Сервер, на котором выполняется правило",
+ "did": Прямой номер,
+ "policy":"Политика (принять/отклонить)",
+ "condition":"Условие","sms_action":"internal","source":"number","action":"playfile","pattern":"*","destination":"beep","rule":1,"callerid":"TRANSIT"},{"timeout":30,"server":"ptr-aa.narayana.im","did":78124099441,"policy":"ACCEPT","condition":"ALWAYS","sms_action":"internal","source":"number","action":"inputstr","pattern":"*","destination":"XXX beep 1","rule":2,"callerid":"TRANSIT"},{"timeout":30,"server":"ptr-aa.narayana.im","did":78124099441,"policy":"ACCEPT","condition":"ALWAYS","sms_action":"internal","source":"number","action":"tts","pattern":"*","destination":"Вы ввели ${input}","rule":3,"callerid":"TRANSIT"}]
+
+
+
+**resolveDIDRule**(50) — Получение правил обработки правила DIDTables
+
+
+Возвращает: OK ACCEPT/REJECT Владелец(extension) Действие(action) Сервер(sip_server) Назначение(destination) АОН(callerid) Таймаут(timeout) ДействиеSMS(sms_action) НазначениеSMS(sms_destination) — для выполнения правила
+Возвращает: SKIP НомерПравила — для перехода на следущее доступное к выполнению правило
+Возвращает: FIN — в случае, если правила закончились
+Аргументы:
+
+* **did**(string) — Прямой номер
+* rule(num) — ID правила _[1]_
+* **callerid**(string) — CallerID
+* status(string) — SIP-статус
+* input(string) — Ввод (SIP-статус должен быть передан как **99INPUT**)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/resolveDIDRule?params
+ _______________________________________________________
+ OK ACCEPT 10000 call rdx.narayana.im 10000 TRANSIT 30 internal 10000
+
+
+
+
+
+## Персональный план набора (алиасы) ##
+
+**getAliases**(1) — Получение списка алиасов
+
+
+Возвращает: Список алиасов (JSON)
+Аргументы:
+
+* all(bool) — Показать все алиасы (иначе — только свои алиасы)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getAliases
+ _______________________________________________________
+ [{"global": Глобальный алиас (0/1),
+ "id": ID алиаса,
+ "owner":"Владелец алиаса",
+ "alias": Алиас,
+ "destination": Назначение}, ...]
+
+
+
+
+**getAliase**(1) — Получение информации о алиасе
+
+
+Возвращает: Информация о алиасе (JSON)
+Аргументы:
+
+* **id**(num) — ID алиаса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getAlias?id=11
+ _______________________________________________________
+ {"global": Глобальный алиас (0/1),
+ "id": ID алиаса,
+ "owner":"Владелец алиаса",
+ "alias": Алиас,
+ "destination": Назначение}
+
+
+
+**addAlias**(1) — Добавление нового алиаса
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **alias**(string) — Алиас
+* **destination**(string) — Назначение
+* sip_extension(string) — SIP-логин, для которого устанавливается алиас
+* global(bool) — Является ли алиас глобальным
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addAlias?alias=111&destination=79010000001
+ _______________________________________________________
+ true
+
+
+
+**updateAlias**(1) — Обновление параметров алиаса
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID алиаса
+* destination(string) — Назначение
+* sip_extension(string) — SIP-логин, для которого устанавливается алиас
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateAlias?alias=111&destination=79010000002
+ _______________________________________________________
+ true
+
+
+
+**deleteAlias**(1) — Удаление алиаса
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID алиаса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteAlias?id=11
+ _______________________________________________________
+ true
+
+
+
+
+
+## Безопасность ##
+
+**getBans**(22) — Получение списка блокировок _iptables_
+
+
+Возвращает: Список блокировок (JSON)
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getBans
+ _______________________________________________________
+ [{"reason":Причина блокировки,
+ "source":"Источник (хост) блокировки либо whitelist",
+ "id":ID блокировки,
+ "target":"Цель (хост) блокировки",
+ "date":"Дата блокировки",
+ "clientdate":"Дата блокировки в часовом поясе пользователя",
+ "permanent": Является ли бан постоянным}, ...]
+
+
+
+
+**flushBans**(22) — Сброс блокировок на SIP-сервере пользователя
+
+
+Возвращает: _true_ / _false_
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/flushBans
+ _______________________________________________________
+ true
+
+
+
+**banIP**(33) — Блокировка IP-адреса
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **source**(string) — Источник (хост) блокировки либо whitelist
+* **target**(string) — Цель (хост) блокировки
+* reason(string) — Причина блокировки _[]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/banIP?source=whitelist&target=127.0.0.1&reason=ya+je+localhost
+ _______________________________________________________
+ true
+
+
+
+**unbanIP**(33) — Разблокировка IP-адреса
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID блокировки
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/unbanIP?id=1
+ _______________________________________________________
+ true
+
+
+
+**updateBanPermanent**(33) — Обновление статуса блокировки
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — ID блокировки
+* **state**(bool) — Статус блокировки (_true_ — постоянная, _false_ — временная)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateBanPermanent?id=1&state=true
+ _______________________________________________________
+ true
+
+
+
+**flushAllBans**(33) — Сброс всех блокировок на всех серверах Narayana
+
+
+Возвращает: _true_ / _false_
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/flushAllBans
+ _______________________________________________________
+ true
+
+
+
+**closeChannels**(50) — Закрыть все активные каналы пользователя
+
+
+Возвращает: _true_ / _false_
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/closeChannels?login=10000
+ _______________________________________________________
+ true
+
+
+
+
+
+## Предоплаченные коды (коды приглашения). Регистрация новых пользователей. ##
+
+
+**registerRequest**(0) — Запрос на регистрацию нового пользователя / Генерация кода приглашения
+
+
+Возвращает: Сгенерированный код приглашения
+Аргументы:
+
+* **signature**(string) — Уникальная подпись клиента (генерируется Web-сервером)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/registerRequest?signature=test
+ _______________________________________________________
+ 0000000000000000
+
+
+
+**registerByCode**(0) — Регистрация нового пользователя по коду приглашения
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **code**(string) — Инвайт-код (код предоплаченной карты)
+* register(bool) — Произвести регистрацию (в противном случае — симуляция регистрации) _[false]_
+* user(string) — Имя пользователя
+* web\_password(string) — MD5-хэш от пароля пользователя для входа в Web-интерфейс
+* language(string) — Язык Web-интерфейса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/registerByCode?code=0000000000000000®ister=true&user=test&web_password=098f6bcd4621d373cade4e832627b4f6&language=nenglish
+ _______________________________________________________
+ true
+
+
+
+**activatePrepaidCode**(1) — Активация кода приглашения (кода предоплаченной карты) на счет пользователя
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **code**(string) — Код приглашения
+* **amount**(num) — Сумма к зачислению (в случае, если указано _0_ — зачисляем весь доступный остаток)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/activatePrepaidCode?code=0000000000000000&amount=0
+ _______________________________________________________
+ true
+
+
+
+
+**getPrepaidCodes**(1) — Получение списка сгенерированных кодов приглашений (кодов предоплаченных карт)
+
+
+Возвращает: Список сгенерированных кодов приглашения (JSON)
+Аргументы:
+
+* active(bool) — Показывать только неактивированные коды _[false]_
+* all(bool) — Показать все коды (иначе — только коды, созданные лично вами) _[false]_
+* count(bool) — Показать только количество кодов _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getPrepaidCodes
+ _______________________________________________________
+ [{"created":"Дата создания",
+ "clientcreated": "Дата создания в часовом поясе пользователя",
+ "balance": Баланс,
+ "displaybalance": Баланс в валюте пользователя,
+ "code":"Код",
+ "accesslevel": Уровень доступа,
+ "owner":"Создатель кода",
+ "activated_to":"Кем активирован",
+ "activated_date":"Дата активации"
+ "client_activated_date":"Дата активации в часовом поясе пользователя"}, ...]
+
+
+
+
+**createPrepaidCode**(1) — Генерация нового кода приглашения (предоплаченного кода)
+
+
+Возвращает: Сгенерированный код приглашения
+Аргументы:
+
+* accesslevel(num) — Уровень доступа _[10]_
+* balance(num) — Баланс _[0.00]_
+* target(string) — Пользователь либо SIM-карта, который может активировать данный код (если не указано — без ограничений)_ _[]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/createPrepaidCode?balance=10.00
+ _______________________________________________________
+ true
+
+
+
+
+**deletePrepaidCode**(1) — Удаление неактивированного кода приглашения (кода предоплаченной карты)
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **code**(string) — Код приглашения
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deletePrepaidCode?code=0000000000000000
+ _______________________________________________________
+ true
+
+
+
+
+
+
+## Сообщения ##
+
+**receiveSMS**(0) — Получение нового сообщения от внешнего источника
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **msg\_handler**(string) — Идентификатор обработчика (обычно привязывается к API-ключу, поэтому, указывать не обязательно)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/receiveSMS?from=18005555550&to=78005555550&text=Hello+world
+ _______________________________________________________
+ true
+
+
+
+**receiveDeliveryReport**(0) — Получение отчета о доставке от внешнего источника
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+* **msg\_handler**(string) — Идентификатор обработчика (обычно привязывается к API-ключу, поэтому, указывать не обязательно)
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/receiveDeliveryReport?id=AAAAAAAAAAAAAAAAAA&status=DELIVERED
+ _______________________________________________________
+ true
+
+
+
+**msgCallback**(0) — Инициация обратного вызова с помощью SMS от внешнего источника
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **msisdn**(string) — Номер телефона, с которого пришел запрос на инициацию
+* **text**(string) — Текст запроса в формате "SIPEXTEN PIN [CALLERID] DESTINATION1 [DESTINATION2]" (в квадратных скобках указаны необязательные параметры)
+* **to**(string) — Номер телефона, на который пришел запрос на инициацию
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/msgCallback?msisdn=78005555550&to=18005555550&text=40000+1111+74999999999+79111111111
+ _______________________________________________________
+ true
+
+
+
+**readSMS**(1) — Отметить SMS-сообщения как прочитанные
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **status**(num) — Отмечать только сообщения с данным статусом
+* **did**(string) — Отмечать сообщения только для данного прямого номера
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/readSMS?status=0&did=18005555550
+ _______________________________________________________
+ true
+
+
+
+**sendSMS**(1) — Отправить SMS-сообщение
+
+
+Возвращает: Уникальный идентификатор сообщения
+Аргументы:
+
+* callerid(string) — Отображаемый номер (если не указан — берется из профиля пользователя)
+* **to**(string) — Номер телефона назначения
+* **text**(string) — Текст сообщения (urlencoded)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/sendSMS?to=18005555550&text=Hello+World!
+ _______________________________________________________
+ uniqueid
+
+
+
+**sendHLR**(1) — Отправить HLR-запрос
+
+
+Возвращает: Результат HLR-запроса OK,IMSI,MCC,MNC,LAC
+Аргументы: —
+
+* **to**(string) — Номер телефона для HLR-запроса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/sendHLR?to=18005555550
+ _______________________________________________________
+ OK,999881111111111,999,888,000000
+
+
+
+**sendVoiceMessage**(1) — Отправить голосовое сообщение
+
+
+Возвращает: Уникальный идентификатор сообщения
+Аргументы:
+
+* callerid(string) — Отображаемый номер (если не указан — берется из профиля пользователя)
+* **to**(string) — Номер телефона назначения
+* **text**(string) — Текст сообщения (urlencoded) либо ссылка на аудиофайл
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/sendVoiceMessage?callerid=18005555550&to=780055555550&text=hello,+world
+ _______________________________________________________
+ uniqueid
+
+
+
+**sendSIPMessage**(1) — Отправить SIP-сообщение абоненту сервиса
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* callerid(string) — Отображаемый номер (если не указан — берется из профиля пользователя)
+* **to**(string) — Номер телефона назначения
+* **text**(string) — Текст сообщения (urlencoded)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/sendVoiceMessage?to=40000&text=hello+world
+ _______________________________________________________
+ true
+
+
+
+**deliveryReport**(1) — Получить отчет о доставке уникальному ID сообщения
+
+
+Возвращает: SMS Sent (отправлено) / SMS Deliv (доставлено) / SMS Undeliv (не доставлено)
+Аргументы:
+
+* **string**(num) — ID записи в журнале вызовов
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deliveryReport?id=uniqueid
+ _______________________________________________________
+ SMS Deliv
+
+
+
+**setDeliveryReport**(95) — Установить отчет о доставке для SMS-сообщения
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — Идентификатор сообщения
+* **status**(num) — Статус
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/setDeliveryReport?id=1&status=0
+ _______________________________________________________
+ true
+
+
+
+**getSMS**(95) — Получение списка всех сообщений __! DEPRECATED: Используйте readSMS() !__
+
+
+Возвращает: Список SMS-сообщений (JSON)
+Аргументы:
+
+* **status**(num) — Статус для получения сообщений
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getSMS?status=0
+ _______________________________________________________
+ [{"id": идентификатор сообщения (для setDeliveryReport),
+ "date": "дата получения сообщения (server time)",
+ "src": "отправитель",
+ "dest": "назначение",
+ "msg": "сообщение",
+ "status": статус (0 — непрочитано, 1 — прочитано),
+ "type": "тип (in — входящее, out — исходящее)"}, ...]}
+
+
+
+
+
+## Управление пользователями ##
+
+**getUsers**(22) — Показать список пользователей
+
+
+Возвращает: Список пользователей (JSON)
+Аргументы:
+
+* all(bool) — показать пользователей, принадлежащих корпоративным пользователям _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getUsers
+ _______________________________________________________
+ [{"атрибут": "значение"}, ...]
+ Список аттрибутов см. в описании функции _getInfo()
+
+
+
+
+**registerUser**(22) — Создать нового пользователя
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **user**(string) — имя пользователя
+* **web\_password**(string) — md5-хэш от пароля пользователя
+* **accesslevel**(num) — уровень доступа
+* **sip\_server**(string) — SIP-сервер
+* **sip\_extension**(string) — SIP-логин
+* **sip\_password**(string) — SIP-пароль
+* balance(num) — Начальный баланс в валюте регистрирующего пользователя _[0.00]_
+* language(string) — Язык интерфейса пользователя _[config.default_language]_
+* currency(string) — Валюта пользователя _[EUR]_
+* sip\_srtp(bool) — Использовать шифрование SRTP _[false]_
+* account(string) — Номер лицевого счета (или auto для автоматического создания) _[auto]_
+
+_! NB: даже в случае, если указана валюта регистрируемого пользователя, в качестве начального баланса будет использована валюта регистрирующего пользователя._
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/registerUser?user=newuser&web_password=5f4dcc3b5aa765d61d8327deb882cf99&accesslevel=11&sip_server=sip.server.com&sip_extension=40000&sip_password=verysecretpassword&balance=10.00
+ _______________________________________________________
+ true
+
+
+
+**updateUser**(1) — Обновление параметров пользователя
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* user(string) — Логин пользователя
+* web\_password(string) — Новый пароль для авторизации (md5-хэш)
+* accesslevel(num) — Уровень доступа
+* active(num) — Состояние (1 — активен, 0 — неактивен, -1 — заблокирован)
+* account(num) — Номер лицевого счета
+* currency(string) — Валюта пользователя
+* language(string) — Язык интерфейса пользователя
+* timezone(num) — Часовой пояс (смещение от UTC)
+* rates(num) — Идентификатор тарифного плана
+* allowed\_rates(string) — Разрешенные к подключению тарифный план
+* allowed\_call\_len(num) — Максимальная длительность вызова
+* notify\_email(string) — E-Mail для уведомлений
+* notify\_balance(num) — Получать уведомления при снижении баланса до мин. порога
+* notify\_did(num) — Количество дней до отключения DID-номера для уведомлений
+* notify\_ticket(num) — Получать уведомления при ответе на тикеты
+* notify\_balance\_limit(num) — Минимальный порог баланса для уведомлений
+* invites(num) — Количество приглашений
+* comment(string) — Комментарий
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateUser?user=newuser&active=-1
+ _______________________________________________________
+ true
+
+
+
+
+**deleteUser**(22) — Удалние пользователя
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **user**(string) — Логин пользователя
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteUser?user=newuser
+ _______________________________________________________
+ true
+
+
+
+
+
+## Учетные записи SIP ##
+
+**getExtensions**(1) — Получение списка SIP-аккаунтов пользователя
+
+
+Возвращает: Список SIP-аккаунтов пользователя (JSON)
+Аргументы:
+
+* own(bool) — Получить только свои SIP-аккаунты _[true]_
+* all(bool) — Получить список всех SIP-аккаунтов _[false]_
+* owner(string) — Получить список SIP-аккаунтов указанного пользователя
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getExtensions?own=true
+ _______________________________________________________
+ [{"sip_transport":"Транспорт SIP (udp,tcp,tls/udp/tcp/tls/udp,tcp)",
+ "disa_pin": PIN-код,
+ "sip_callerid": "Идентификатор звонящего (АОН)",
+ "owner":"Владелец SIP-аккаунта",
+ "sip_password":"SIP-пароль",
+ "sip_host":"Хост для авторизации по IP",
+ "sip_srtp": Шифрование SRTP (0/1),
+ "sip_language":"Язык SIP-аккаунта (Язык внутренних телефонных команд)",
+ "sip_reach": Доступность абонента для вызова (2 — доступен, 0 — недоступен),
+ "sip_redirect": Переадресовать входящие звонки сюда,
+ "sip_extension": SIP-логин,
+ "sip_realm":"Краткое название SIP-сервера",
+ "disa_trusted_cli": "Доверенный CallerID",
+ "rates_name":"название тарифного плана",
+ "sip_max_call_len": Максимальная длительность вызова,
+ "sip_address":"Адрес SIP-сервера" (new in v2.3),
+ "sip_rates_id": идентификатор тарифного плана,
+ "sip_rates_options": тарифные опции, перечисленные через запятую,
+ "sip_server":"IP-адрес SIP-сервера",
+ "lastupdated":"Последнее обновление статуса" (для realtime),
+ "sip_force_callback": Принудительный Callback (0/1),
+ "sip_pitch_shift": Искажение голоса (-1 — выключено)}, ...]
+
+
+
+
+**getExtensionInfo**(1) — Получение информации о SIP-аккаунте
+
+
+Возвращает: Информация о SIP-аккаунте (JSON) либо значение запрошенного параметра
+Аргументы:
+
+* **sip\_extension**(string) — SIP-аккаунт для получения информации
+* property(string) — запрашиваемый параметр для получения значения конкретного параметра
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getExtensionInfo?sip_extension=40000
+ _______________________________________________________
+ {"sip_transport":"Транспорт SIP (udp,tcp,tls/udp/tcp/tls/udp,tcp)",
+ "disa_pin": PIN-код,
+ "sip_callerid": "Идентификатор звонящего (АОН)",
+ "owner":"Владелец SIP-аккаунта",
+ "sip_password":"SIP-пароль",
+ "sip_host":"Хост для авторизации по IP",
+ "sip_srtp": Шифрование SRTP (0/1),
+ "sip_language":"Язык SIP-аккаунта (Язык внутренних телефонных команд)",
+ "sip_reach": Доступность абонента для вызова (2 — доступен, 0 — недоступен),
+ "sip_redirect": Переадресовать входящие звонки сюда,
+ "sip_extension": SIP-логин,
+ "sip_realm":"Краткое название SIP-сервера",
+ "disa_trusted_cli": "Доверенный CallerID",
+ "rates_name":"название тарифного плана",
+ "sip_max_call_len": Максимальная длительность вызова,
+ "sip_address":"Адрес SIP-сервера" (new in v2.3),
+ "sip_rates_id": идентификатор тарифного плана,
+ "sip_rates_options": тарифные опции, перечисленные через запятую,
+ "sip_server":"IP-адрес SIP-сервера",
+ "lastupdated":"Последнее обновление статуса" (для realtime),
+ "sip_force_callback": Принудительный Callback (0/1),
+ "sip_pitch_shift": Искажение голоса (-1 — выключено)}
+
+
+
+
+**getAvailExtension**(1) — Получение ближайшего доступного для регистрации SIP-аккаунта
+
+
+Возвращает: Доступный SIP аккаунт для регистрации
+Аргументы:
+
+* own(bool) — Вернуть следущий доступный дополнительный (пользовательский) SIP аккаунт для регистрации (XXXXXyy) _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getAvailExtension?own=true
+ _______________________________________________________
+ 4000001
+
+
+
+**createExtension**(1) — Создание учетной записи SIP
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* owner(string) — Владелец SIP-аккаунта
+* **sip\_extension**(string) — SIP-аккаунт
+* **sip\_password**(string) — Пароль SIP
+* sip\_server(string) — Адрес SIP сервера
+* sip\_callerid(string) — Определяемый номер (АОН) по-умолчанию
+* sip\_language(string) — Язык SIP-аккаунта по-умолчанию
+* sip\_srtp(bool) — Использовать шифрование SRTP _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/createExtension?sip_extension=4000001&sip_password=password
+ _______________________________________________________
+ true
+
+
+
+**updateExtension**(1) — Изменение SIP-аккаунта
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* sip\_extension(string) — SIP-аккаунт для изменения
+* extension(string) — Новое название (номер) SIP-аккаунта
+* sip\_password(string) — Новый пароль SIP
+* sip\_server(string) — Новый SIP сервер
+* sip\_srtp(num) — Использовать шифрование SRTP (0/1)
+* sip\_transport(ustring) — Разрешенный SIP транспорт (udp,tcp,tls/udp/tcp/tls/udp,tcp)
+* sip\_callerid(string) — Определяемый номер (АОН)
+* sip\_max\_call\_len(num) — Максимальная длительность вызова
+* sip\_reach(num) — Доступность абонента для вызова (2 — доступен, 0 — недоступен)
+* sip\_redirect(string) — Куда переадресовывать входящие звонки на данный SIP-логин
+* sip\_force\_callback(num) — Принудительный Callback на доверенный номер (__disa_trusted_cli__) (0/1)
+* sip\_language(string) — Язык внутренних телефонных команд
+* sip\_rates\_id(num) — Идентификатор тарифного плана
+* disa\_pin(num) — PIN-код
+* disa\_trusted\_cli(string) — Доверенный телефон
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateExtension?sip_extension=40000&sip_srtp=1&sip_reach=2
+ _______________________________________________________
+ true
+
+
+
+**deleteExtension**(1) — Удаление учетной записи SIP
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **sip\_extension**(string) — SIP-аккаунт для удаления
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteExtension?sip_extension=40000
+ _______________________________________________________
+ true
+
+
+
+
+
+## Журнал событий ##
+
+**getLogs**(1) — Получение журнала событий
+
+
+Возвращает: Журнал событий (JSON)
+Аргументы:
+
+* limit(num) — Получить последние N записей _[100]_
+* only\_completed(bool) — Показать только успешные вызовы _[false]_
+* resolve\_info(bool) — Показать дополнительную информацию о вызываемом абоненте _[false]_
+* user(string) — пользователь для получения журнала вызовов
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getLogs?resolve_info=true
+ _______________________________________________________
+ [{"direction":"Направление",
+ "route":"Маршрут",
+ "cost": Цена,
+ "date":"Дата записи",
+ "displaycost": Цена в валюте пользователя,
+ "id": ID записи,
+ "username":"Имя пользователя",
+ "displaycurrency":"Валюта пользователя",
+ "status":"Статус",
+ "clientdate":"Дата с часовым поясом пользователя",
+ "destination":"Назначение",
+ "time":"Длительность вызова",
+ "callerid":"АОН",
+ "sip_extension": "SIP-логин",
+ "info": "Дополнительная информация о вызываемом абоненте",
+ "debug": "Отладочная информация о звонке"}, ...]
+
+
+
+
+**deleteLogs**(1) — Удаление журнала событий
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* user(string) — Имя пользователя для удаления журнала (если не указан — удаляем собственный журнал)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteLogs
+ _______________________________________________________
+ true
+
+
+
+
+
+## Функции интерфейса ##
+
+**getCourse**(0) — Получение внутреннего курса валют и прочих данных
+
+
+Возвращает: Курс валют (JSON)
+Аргументы:
+
+* **currency**(string) — Валюта для получения инфо
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getCourse?currency=EUR
+ _______________________________________________________
+ {"eur_course": Курс к Евро,"currency":"Код валюты","displayname":"€","transfer_fee":Стомость перевода между ЛС,"referral_reward":Вознаграждение за приглашение}
+
+
+
+
+**getCurrencies**(0) — Получение списка валют
+
+
+Возвращает: Список валют (JSON)
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getCurrencies
+ _______________________________________________________
+ [{"eur_course":1,"currency":"EUR","displayname":"€"},{"eur_course":68.917,"currency":"RUB","displayname":"руб. "}]
+
+
+
+
+
+## Новости и широковещательные сообщения ##
+
+**getNews**(0) — Получение новостей
+
+
+Возвращает: Список новостей или конкретная новость (JSON)
+Аргументы:
+
+* id(string) — Идентификатор новости для получения
+* all(bool) — Показать все новости
+* broadcast(bool) — Показать только новости с широковещательным сообщением
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getNews
+ _______________________________________________________
+ [{"is_broadcast": широковещательное? (0/1),
+ "id":"идентификатор новости",
+ "author":"автор новости",
+ "message":"Тестовое содержание",
+ "access": минимальный уровень доступа для просмотра,
+ "language":"язык для просмотра",
+ "lastupdated":"посленее обновление (часовой пояс сервера)",
+ "clientlastupdated":"последнее обновление (часовой пояс пользователя)",
+ "broadcast":"Широковещательное сообщение",
+ "date":"дата (часовой пояс сервера)",
+ "clientdate":"дата (часовой пояс клиента)",
+ "header":"Тестовое сообщение",
+ "lastupdated_by":"автор последнего обновления",
+ "typ":"тип (влияет только на отображение; warning/error/success/info)"}, ... ]
+
+
+
+**addNews**(33) — Добавление новости
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(string) — Идентификатор новости
+* is_broadcast(bool) — Широковещательная новость? _[false]_
+* user(string) — Кто может читать эту новость (если не указана — все могут читать новость)
+* access(num) — Минимальный уровень доступа (если 0 — даже неавторизованные пользователи) _[0]_
+* language(string) — Язык пользователей, которые могут читать новость (если не указан — могут читать пользователи с любым языком)
+* typ(ustring{info,warning,error,success}) — Тип (используется для отображение в web-интерфейсе) _[info]_
+* broadcast(string) — Широковещательное сообщение
+* header(string) — Заголовок новости
+* message(string) — Текст новости
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addNews?id=testnews&header=test&message=hello+world
+ _______________________________________________________
+ true
+
+
+
+**updateNews**(33) — Изменение новости
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(string) — Идентификатор новости
+* is_broadcast(bool) — Широковещательная новость? _[false]_
+* user(string) — Кто может читать эту новость (если не указана — все могут читать новость)
+* access(num) — Минимальный уровень доступа (если 0 — даже неавторизованные пользователи) _[0]_
+* language(string) — Язык пользователей, которые могут читать новость (если не указан — могут читать пользователи с любым языком)
+* typ(ustring{info,warning,error,success}) — Тип (используется для отображение в web-интерфейсе) _[info]_
+* broadcast(string) — Широковещательное сообщение
+* header(string) — Заголовок новости
+* message(string) — Текст новости
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateNews?id=testnews&message=hello+earth
+ _______________________________________________________
+ true
+
+
+
+**deleteNews**(33) — Удаление новости
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(string) — Идентификатор новости
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteNews?id=testnews
+ _______________________________________________________
+ true
+
+
+
+
+## Тикет-система ##
+
+**getUnreadTickets**(1) — Получение количества непрочитанных сообщений __! DEPRECATED: функция больше не используется !__
+
+
+Возвращает: Количество непрочитанных тикетов
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getUnreadTickets
+ _______________________________________________________
+ 1
+
+
+
+**createTicket**(1) — Создать тикет или ответить в существующий
+
+
+Возвращает: Номер созданного / существующего тикета
+Аргументы:
+
+* **destination**(string) — Логин получателя
+* **subject**(string) — Тема
+* **message**(string) — Сообщение
+* comment(string) — Комментарий (только для администраторов)
+* ticket(num) — Номер тикета для ответа в него
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/createTicket?destination=support&subject=Help&message=Phone+is+not+ringing!
+ _______________________________________________________
+ 5162
+
+
+
+**getTickets**(1) — Получение списка тикетов
+
+
+Возвращает: Список тикетов (JSON)
+Аргументы:
+
+* limit(num) — Получить N последних тикетов _[800]_
+* all(bool) — Получить все тикеты _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getTickets
+ _______________________________________________________
+ [{"status": статус тикета (1 — непрочитан, 0 — прочитан, -1 — закрыт),
+ "unread": непрочитан (true/false),
+ "subject":"тема",
+ "sender":"отправитель",
+ "recipient":"Dahog",
+ "ticket": номер тикета,
+ "msgid": номер сообщения,
+ "date":"дата в часовом поясе сервера",
+ "clientdate":"дата в часовом поясе сервера"}, ... ]
+
+
+**getTicket**(1) — Получение тикета
+
+
+Возвращает: Сообщения тикета (JSON)
+Аргументы:
+
+* **ticket**(num) — Номер тикета
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getTicket?params
+ _______________________________________________________
+ [{"type":"тип сообщения (in/out)",
+ "ticket": номер тикета,
+ "reply":"пользователь для ответа",
+ "message":"сообщение",
+ "status":статус (0 — прочитано, 1 — непрочитано, -1 — закрыто),
+ "subject":"тема",
+ "sender":"отправитель",
+ "username":"логин отправителя (для тех случаев, если sender == support)",
+ "date":"дата (часовой пояс сервера)",
+ "clientdate":"дата (часовой пояс клиента)",
+ "recipient":"получатель",
+ "msgid": идентификатор сообщения}, ... ]
+
+
+
+
+**updateTicket**(1) — Обновление статуса тикета
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **ticket**(num) — Номер тикета
+* action(ustring{close,open,mark_unread,assign_to) — Действие (close — закрыть, open — открыть, mark_unread — сделать непрочитаннм) _[open]_
+* assign_to(string) — Список пользователей (перечисленных через запятую), кому назначить данный тикет
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateTicket?ticket=5162&action=mark_unread
+ _______________________________________________________
+ true
+
+
+
+**deleteTicket**(33) — Удаление тикета
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **ticket**(num) — Номер тикета
+* username(string) — Пользователь (для удаления всех его тикетов)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteTicket?ticket=5162
+ _______________________________________________________
+ true
+
+
+
+**deleteMessage**(33) — Удаление конкретного сообщения
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **id**(num) — Идентификатор сообщения
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteMessage?id=10000
+ _______________________________________________________
+ true
+
+
+
+
+
+## Финансы и статистика ##
+
+**getPaymentMethods**(0) — Получение списка доступных методов оплаты
+
+
+Возвращает: Список доступных методов оплаты (JSON)
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getPaymentMethods
+ _______________________________________________________
+ {"private": {"метод оплаты для верифицированных пользователей":"Название Метода"},
+ "public":{"метод оплаты для всех пользователей":"Название метода"},
+ "default": "метод оплаты по-умолчанию"}
+
+
+
+**finishInvoice**(0) — Запрос от обработчика на завершение оплаты
+
+
+Возвращает: _зависит от обработчика_
+Аргументы: _зависит от обработчика_
+
+Пример запроса:
+
+ POST /billing/api/2.2/ffffffffff/finishInvoice
+ _______________________________________________________
+ ok
+
+
+
+**getStats**(1) — Получение статистики
+
+
+Возвращает: Статистика (JSON)
+Аргументы: —
+
+* financials(bool) — Получение финансовой информации _[false]_
+* statistic(bool) — Получение статистики _[false]_
+* date1(string) — Дата (от)
+* date2(string) — Дата (до)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getStats
+ _______________________________________________________
+ {"forecast": {
+ "forecast": на сколько дней пользователю хватит денежных средств,
+ "recommmend": рекомендуемый платеж в системной валюте (EUR),
+ "display_recommend": рекомендуемый платеж в валюте пользователя},
+ "financials": {
+ "gsm_cost": роуминговые расходы в системной валюте (EUR),
+ "display_gsm_cost": роуминговые расходы в валюте пользователя,
+ "call_cost": расходы на звонки в системной валюте (EUR),
+ "display_call_cost": расходы на звонки в валюте пользователя,
+ "sms_cost": расходы на SMS в системной валюте (EUR),
+ "display_sms_cost": расходы на SMS в валюте пользователя,
+ "gprs_cost": расходы на мобильный интернет в системной валюте (EUR),
+ "display_gprs_cost": расходы на мобильный интернет в валюте пользователя,
+ "other_cost": прочие расходы (в т.ч. переводы) в системной валюте (EUR)
+ "display_other_cost": прочие расходы (в т.ч. переводы) в валюте пользователя,
+ "total_cost": общие расходы в системной валюте (EUR),
+ "display_total_cost": общие расходы в валюте пользователя},
+ "stat":{
+ "total_calls": всего звонков,
+ "success_calls": успешных звонков,
+ "success_calls_percent": процент успешных звонков,
+ "calls_duration": общая длительность вызовов,
+
+ "total_sms": всего SMS-сообщений,
+ "success_sms": успешных SMS-сообщений,
+ "success_sms_percent": процент доставленных SMS-сообщений,
+
+ "total_gsm_calls": всего GSM-вызовов¸
+ "success_gsm_calls": успешных GSM-вызовов,
+ "success_gsm_calls_percent": процент успешных GSM-вызовов,
+ "gsm_calls_duration": длительность GSM-вызовов,
+
+ "gprs_traffic": получено/передано трафика (моб.интернет) КбайтЪ}
+ }
+
+
+
+
+**transferMoney**(1) — Перевод средств на счет другого пользователя
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **destination**(string) — Получатель (логин или номер лицевого счета)
+* **amount**(num) — Сумма в валюте запрашивающего пользователя
+* comment(string) — Комментарий
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/transferMoney?destination=100000000&amount=100&comment=Enjoy
+ _______________________________________________________
+ true
+
+
+
+**createInvoice**(1) — Создать счет для оплаты
+
+
+Возвращает: Информация для оплата счета (JSON)
+Аргументы: —
+
+* **payment\_method**(string) — Обработчик оплаты
+* **payment\_type**(string) — Способ оплаты
+* **payment\_amount**(num) — Сумма в валюте запрашивающего пользователя
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/createInvoice?payment_method=pscb&payment_type=qiwi
+ _______________________________________________________
+ {"comission": комиссия (процент),
+ "transaction": номер транзакции (инвойса),
+ "msg": "произвольное сообщение о особенностях оплаты",
+ "method": "метод запроса в URL (GET/POST)",
+ "url": "URL, по которому нужно перейти для оплаты инвойса",
+ -- Внимание: последущие параметры нужно передать в указанный URL указанным в «method» способом! --
+ "параметр1": "значение1",
+ "параметр2": "значнение2"
+
+
+
+**generateInvoice**(1) — Генерация PDF-инвойса по указанным данным __! DEPRECATED: Используйте viewInvoice(invoice) !__
+
+
+Возвращает: PDF-инвойс
+Аргументы:
+
+* **invoice**(num) — Номер инвойса
+* **date**(string) — Дата выставления
+* **deadline**(string) — Дата
+* **services**(string) — Услуги в формате Услуга@Единиц тарифицировано@Название единицы@Стоимость единицы,Услуга2@Единиц@Название единицы@Стоимость,..
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/generateInvoice?invoice=1&date=2017-06-24 00:00:00&deadline=2017-06-25 00:00:00&services=Service@1@Unit@100
+ _______________________________________________________
+ %PDF-1.4\n1 0 obj\n<< BINARY PDF FILE
+
+
+
+**monthlyInvoice**(1) — Генерация счета (инвойса) за один месяц
+
+
+Возвращает: PDF-инвойс
+Аргументы:
+
+* month(num) — Номер месяца для генерации инвойса (используется прошлый, если не указано)
+* email(bool) — Прислать инвойс на электронную почту _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/monthlyInvoice
+ _______________________________________________________
+ %PDF-1.4\n1 0 obj\n<< BINARY PDF FILE
+
+
+
+
+**getInvoices**(1) — Получить список инвойсов
+
+
+Возвращает: Список инвойсов (JSON)
+Аргументы:
+
+* own(bool) — Показать только свои инвойсы _[true]_
+* bank(bool) — Показать только банковские переводы _[false]_
+* done(bool) — Показать только завершенные инвойсы
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getInvoices?params
+ _______________________________________________________
+ [{"id": номер инвойса,
+ "owner":"владелец инвойса (кому выставлен)",
+ "comission": комиссия,
+ "vat": НДС,
+ "amount": сумма в системной валюте (EUR),
+ "displayamount": сумма в валюте пользователя,
+ "status": статус,
+ "msg":"Произвольное сообщение о особенностях оплаты",
+ "method":"метод оплаты",
+ "handler": "обработчик (системная информация)",
+ "billing_data":"ФИО, адрес пользователя",
+ "txdata": "системная информация о транзакции (см. функцию _createInvoice()_)",
+ "date":"дата выставления инвойса (время сервера)",
+ "clientdate":"дата выставления инвойса (время с часовым поясом клиента)",
+ "validthru":"инвойс валиден до (время сервера)",
+ "clientvalidthru": "инвойс валиден до (время с часовым поясом клиента)}, ... ]
+
+
+
+
+**getInvoiceInfo**(1) — Получение информации о инвойсе
+
+
+Возвращает: Информация о инвойсе (JSON)
+Аргументы:
+
+* **invoice**(num) — Номер инвойса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getInvoiceInfo?id=1
+ _______________________________________________________
+ {"id": номер инвойса,
+ "owner":"владелец инвойса (кому выставлен)",
+ "comission": комиссия,
+ "vat": НДС,
+ "amount": сумма в системной валюте (EUR),
+ "displayamount": сумма в валюте пользователя,
+ "status": статус,
+ "msg":"Произвольное сообщение о особенностях оплаты",
+ "method":"метод оплаты",
+ "handler": "обработчик (системная информация)",
+ "billing_data":"ФИО, адрес пользователя",
+ "txdata": "системная информация о транзакции (см. функцию _createInvoice()_)",
+ "date":"дата выставления инвойса (время сервера)",
+ "clientdate":"дата выставления инвойса (время с часовым поясом клиента)",
+ "validthru":"инвойс валиден до (время сервера)",
+ "clientvalidthru": "инвойс валиден до (время с часовым поясом клиента)}
+
+
+
+
+**viewInvoice**(1) — Загрузить PDF-инвойс
+
+
+Возвращает: Бинарный PDF-файл
+Аргументы:
+
+* **invoice**(num) — Номер инвойса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/viewInvoice?params
+ _______________________________________________________
+ %PDF-1.4\n1 0 obj\n<< BINARY PDF FILE
+
+
+
+**deleteInvoice**(33) — Удаление инвойса
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **invoice**(num) — Номер инвойса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteInvoice?invoice=1
+ _______________________________________________________
+ true
+
+
+
+
+
+## Лицевые счета ##
+
+**updateAccount**(1) — Изменение параметров лицевого счета
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* account(num) — Номер лицевого счета
+* balance(num) — Баланс в валюте __запрашивающего__ пользователя
+* overdraft(num) — Кредитный лимит в валюте __запрашивающего__ пользователя
+* refill\_allowed(num) — Финансовые операции разрешены (0 — запрещены, 1 — разрешены, 2 — верифицирован)
+* billing\_name(string) — ФИО для выставления счетов
+* billing\_address(string) — Адрес для выставления счетов
+* billing\_email(string) — Электронный адрес для выставления счетов
+* billing\_bank\_account(string) — Номер банковского счета для получения и выставления счетов
+* postpaid(num) — Постоплатный аккаунт (присылать счет в конце месяца) (0/1)
+
+_! NB: пользователи с уровнем доступа выше 33 (администраторы) не могут менять баланс пользователей! Используйте функцию transferMoney()_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateAccount?account=100000000&postpaid=1
+ _______________________________________________________
+ true
+
+
+
+**getAccounts**(22) — Получение списка лицевых счетов пользователей
+
+
+Возвращает: Списо лицевых счетов и информация по ним (JSON)
+Аргументы:
+
+* all(bool) — Показать лицевые счета клиентов реселлеров _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getAccounts
+ _______________________________________________________
+ [ {"account": номер лицевого счета,
+ "users":["список", "пользователей", "на лицевом счете"],
+ "balance": баланс в системной валюте (EUR),
+ "displaybalance": баланс в валюте запрашивающего пользователя,
+ "overdraft": кредитный лимит в системной валюте,
+ "displayoverdraft": кредитный лимит в валюте запрашивающего пользователя,
+ "displaycurrency":"€ ($/руб./и т.д.)",
+ "refill_allowed": финансовые операции разрешены (0 — запрещены, 1 — разрешены, 2 — верифицирован),
+ "postpaid": Постоплатный аккаунт (присылать ли счета в конце месяца) }, ... ]
+
+
+
+
+**getAccountInfo**(22) — Получение информации о лицевом счете
+
+
+Возвращает: Информация о лицевом счете (JSON)
+Аргументы:
+
+* **account**(num) — Номер лицевого счета
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getAccountInfo?account=100000000
+ _______________________________________________________
+ {"account": номер лицевого счета,
+ "users":["список", "пользователей", "на лицевом счете"],
+ "balance": баланс в системной валюте (EUR),
+ "displaybalance": баланс в валюте запрашивающего пользователя,
+ "overdraft": кредитный лимит в системной валюте,
+ "displayoverdraft": кредитный лимит в валюте запрашивающего пользователя,
+ "displaycurrency":"€ ($/руб./и т.д.)",
+ "refill_allowed": финансовые операции разрешены (0 — запрещены, 1 — разрешены, 2 — верифицирован),
+ "postpaid": postpaid-аккаунт (присылать ли счета в конце месяца) }
+
+
+
+
+**deleteAccount**(22) — Удаление лицевого счета
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **account**(num) — Номер лицевого счета
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteAccount?account=100000000
+ _______________________________________________________
+ true
+
+
+
+
+
+## Доступ к API ##
+
+**getKey**(33) — Получение данных API-ключа
+
+
+Возвращает: Информацию о API-ключе (JSON)
+Аргументы:
+
+* **name**(string) — Идентфикатор API-ключа
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getKey?name=TESTKEY1
+ _______________________________________________________
+ {"maintenance":"Дата последнего тех.обслуживания (для системных целей)",
+ "auth_by":"Авторизация по",
+ "dnsname":"DNS-имя (для SIP-серверов)",
+ "source":"IP-адрес или маска (*.*.*.*)",
+ "name":"Идентификатор ключа",
+ "secure_only": Только HTTPS (0/1),
+ "enabled": Активен (0/1),
+ "accesslevel": Уровень доступа,
+ "key":"API-ключ"}
+
+
+
+
+**getKeys**(33) — Получение списка
+
+
+Возвращает: Список API-ключей (JSON)
+Аргументы: —
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getKeys
+ _______________________________________________________
+ [{"maintenance":"Дата последнего тех.обслуживания (для системных целей)",
+ "auth_by":"Авторизация по",
+ "dnsname":"DNS-имя (для SIP-серверов)",
+ "source":"IP-адрес или маска (*.*.*.*)",
+ "name":"Идентификатор ключа",
+ "secure_only": Только HTTPS (0/1),
+ "enabled": Активен (0/1),
+ "accesslevel": Уровень доступа,
+ "key":"API-ключ"}, ...]
+
+
+
+**addKey**(33) — Создание нового API-ключа
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **name**(string) — Идентификатор API-клиента
+* **auth\_by**(string) — Авторизация по (id,username,sip_extension,msisdn,iccid...)
+* **source**(string) — IP-адрес (или маска)
+* **apikey**(string) — API ключ
+* **accesslevel**(num) — Уровень доступа (0 для клиентских ключей)
+* default\_user(string) — Привязанный пользователь
+* allowed\_methods(string) — Разрешенные к исполнению методы
+* secure\_only(num) — Запросы только по _https://_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addKey?params
+ _______________________________________________________
+ answer example
+
+
+
+**updateKey**(33) — Изменение данных API-ключа
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **name**(string) — Идентификатор API-клиента
+* auth\_by(string) — Авторизация по (id,username,sip_extension,msisdn,iccid...)
+* source(string) — IP-адрес (или маска)
+* apikey(string) — API ключ
+* accesslevel(num) — Уровень доступа (0 для клиентских ключей)
+* default\_user(string) — Привязанный пользователь
+* allowed\_methods(string) — Разрешенные к исполнению методы
+* secure\_only(num) — Запросы только по _https://_
+* enabled(num) — Статус (1 — активен, 0 — выключен)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateKey?name=TESTKEY1&secure_only=1
+ _______________________________________________________
+
+
+
+
+**revokeKey**(33) — Отзыв API-ключа
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **name**(string) — Идентификатор API-клиента
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/revokeKey?name=TESTKEY1
+ _______________________________________________________
+ true
+
+
+
+
+
+## GSM ##
+
+**gsmRequest**(0) — Запрос к GSM-обработчику
+
+
+Возвращает: _зависит от обработчика_
+Аргументы:
+
+* **provider**(string) — Имя обработчика (размещенного в директории **inc/gsm/**)
+* action(string) — Название субпрограммы для вызова (в ином случае — вызывается Default)
+
+Пример запроса:
+
+ POST /billing/api/2.2/ffffffffff/gsmRequest
+ _______________________________________________________
+ ok
+
+
+
+
+
+## SIM-карты ##
+
+**getSIMList**(1) — Получение списка SIM-карт
+
+
+Возвращает: Список SIM-карт (JSON)
+Аргументы:
+
+* all(bool) — Показать все доступные SIM-карты (в том числе, неактивные) _[true]_
+* own(bool) — Показать только SIM-карты, принадлежащие текущему пользователю _[false]_
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getSIMList
+ _______________________________________________________
+ [{"allow_direct_sms": Разрешить прямые SMS в обход сети Narayana,
+ "msisdn": MSISDN (номер абонента),
+ "owner":"Владелец SIM-карты",
+ "lastnetworkdate":"Дата последней регистрации в сети",
+ "iccid":"ICCID SIM-карты",
+ "puk1":PUK1-код,
+ "puk2":PUK2-код,
+ "callback_cid":CallerID для Callback,
+ "sip_extension":SIP-профиль,
+ "provider":"Провайдер (обработчик)",
+ "enabled": Состояние SIM-карты (1/0),
+ "lastnetwork":MCCMNC сети}, ...]
+
+
+
+
+**getSIMInfo**(1) — Получение информации о SIM-карте
+
+
+Возвращает: Информация о SIM-карте (JSON)
+Аргументы:
+
+* **iccid**(string) — ICCID SIM-карты
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/getSIMInfo?iccid=89372
+ _______________________________________________________
+ {"allow_direct_sms": Разрешить прямые SMS в обход сети Narayana,
+ "msisdn": MSISDN (номер абонента),
+ "owner":"Владелец SIM-карты",
+ "lastnetworkdate":"Дата последней регистрации в сети",
+ "iccid":"ICCID SIM-карты",
+ "puk1":PUK1-код,
+ "puk2":PUK2-код,
+ "callback_cid":CallerID для Callback,
+ "sip_extension":SIP-профиль,
+ "provider":"Провайдер (обработчик)",
+ "enabled": Состояние SIM-карты (1/0),
+ "lastnetwork":MCCMNC сети}
+
+
+
+
+**bindSIM**(1) — Инициация процесса привязки SIM-карты
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **iccid**(string) — ICCID SIM-карты
+* **puk1**(string) — PUK1-код
+* **puk2**(string) — PUK2-код
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/bindSIM?iccid=89372&puk1=1111&puk2=2222
+ _______________________________________________________
+ true
+
+
+
+**unbindSIM**(1) — Инициация процесса отвязки SIM-карты
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **iccid**(string) — ICCID SIM-карты
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/unbindSIM?iccid=89372
+ _______________________________________________________
+ true
+
+
+
+**updateSIM**(1) — Обновление параметров SIM-карты
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **iccid**(string) — ICCID SIM-карты
+* owner(string) — Владелец SIM-карты
+* puk1(string) — PUK1-код
+* puk2(string) — PUK2-код
+* sip\_extension(string) — Используемый SIP-профиль
+* callback\_cid(string) — CallerID для Callback
+* directsms(num) — Разрешить прямые SMS в обход сети Narayana (0 — нет, 1 — да)
+* enabled(num) — Активация SIM-карты (0 — выключена, 1 — включена)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateSIM?iccid=89372&sip_extension=12345
+ _______________________________________________________
+ true
+
+
+
+**addSIM**(33) — Добавление SIM-карты
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **provider**(string) — Провайдер (обработчик)
+* **msisdn**(string) — MSISDN (абонентский номер)
+* **iccid**(string) — ICCID/IMSI (уникальный номер SIM-карты)
+* puk1(string) — PUK1-код (необходим для активации)
+* puk2(string) — PUK2-код (необходим для активации)
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/addSIM?provider=test&msisdn=111&iccid=89372&puk1=0000&puk2=0000
+ _______________________________________________________
+ true
+
+
+
+**deleteSIM**(33) — Удаление SIM-карты
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **iccid**(string) — ICCID SIM-карты
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/deleteSIM?iccid=89372
+ _______________________________________________________
+ true
+
+
+
+**notifySIM**(50) — Отправка SMS-сообщения на SIM-карту
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **sim**(string) — ICCID SIM-карты
+* **from**(string) — Номер отправителя
+* **text**(string) — Текст сообщения
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/notifySIM?sim=89372&from=111&text=hello+world
+ _______________________________________________________
+ true
+
+
+
+
+
+## Техническое обслуживание ##
+
+
+**asteriskRequest**(22) — Запрос к АТС
+
+
+Возвращает: Ответ АТС
+Аргументы:
+
+* **asterisk**(string) — IP-адрес АТС
+* **destination**(string) — Назначение запроса (к примеру, **interface**)
+* **process**(string) — Первый аргумент (обычно, название метода)
+* params(string) — Параметры запроса
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/asteriskRequest?asterisk=127.0.0.1&destination=sipreload&process=sipreload
+ _______________________________________________________
+ ok
+
+
+
+**updateDialplan**(33) — Обновление версии диалплана
+
+
+Возвращает: OK <версия dialplan>
+Аргументы:
+
+* **asterisk**(string) — IP-адрес АТС
+* **url**(string) — URL файла dialplan, где слэш **/** заменен тильдой **~**
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateDialplan?asterisk=127.0.0.1&url=localhost~dialplan
+ _______________________________________________________
+ OK 0082R20170626_205
+
+
+
+**restoreDialplan**(33) — Откат версии диалплана к предыдущей
+
+
+Возвращает: OK <версия dialplan>
+Аргументы:
+
+* **asterisk**(string) — IP-адрес АТС
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/restoreDialplan
+ _______________________________________________________
+ OK 0082R20170626_205
+
+
+
+**updateInterface**(33) — Обновление файла _interface_
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+
+* **asterisk**(string) — IP-адрес АТС
+* **url**(string) — URL файла interface, где слэш **/** заменен тильдой **~**
+
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/updateInterface?asterisk=127.0.0.1&url=localhost~interface
+ _______________________________________________________
+ OK 0.12.4
+
+
+
+**doMaintenance**(90) — Провести регулярные процедуры в БД (курсы валют, инвойсы, DID-номера и пр.)
+
+
+Возвращает: _true_ / _false_
+Аргументы:
+Пример запроса:
+
+ GET /billing/api/2.2/ffffffffff/doMaintenance
+ _______________________________________________________
+ true
+
+
+