версия от 2023-02-13
Группа методов позволяет менять тариф, а также подключать и отключать дополнительные услуги.
Адрес: https://restapi.plusofon.ru
GET
api/v1/current-tariff
Метод позволяет получить данные текущего тарифа.
Не имеет параметров.
curl -X GET \
-G "https://restapi.plusofon.ru/api/v1/current-tariff" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}"
const url = new URL(
"https://restapi.plusofon.ru/api/v1/current-tariff"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "GET",
headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://restapi.plusofon.ru/api/v1/current-tariff',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/current-tariff'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('GET', url, headers=headers)
response.json()
В ответе возвращается (описание тарифа и все дополнительные услуги):
tariff_description
объект с основными свойствами тарифа
/ id
ИД тарифа
/ name
название тарифа
/ description
краткое описание тарифа
links
массив справочных ссылок
/ title
описание справочной ссылки
/ href
справочная ссылка
tariff
массив тарифных опций
/ name
название опции
/ desc
описание опции
/ inuse
использовано квоты опции
/ amount
доступная квота опции
/ details
массив расшифровок использования квот по ресурсам
/ / name
название ресурса опции
/ / amount
использовано квоты опции
/ option
объект с дополнительными атрибутами опции
/ / id
ИД дополнительного атрибута опции
/ / active
признак активации дополнительного атрибута опции
services
массив дополнительных услуг
/ id
ИД дополнительной услуги
/ name
название дополнительной услуги
/ desc
описание дополнительной услуги
/ access
признак доступности дополнительной услуги
/ active
признак активность дополнительной услуги
/ fee
стоимость дополнительной услуги
{
"tariff_description": {
"id": "701b8682-3a17-657c-f528-5d67c4a6f4d6",
"name": "Базовый",
"description": "Тариф для небольшой команды, которая только начинает свое дело"
},
"links": [
{
"title": "подробнее о тарифе",
"href": "https:\/\/docs.plusofon.ru\/legal\/2022-02_vpbx_terms.html"
},
{
"title": "цены на звонки",
"href": "https:\/\/docs.plusofon.ru\/legal\/vpbx_price_basic.html"
}
],
"tariff": [
{
"alias": "num",
"name": "Городские номера",
"desc": "",
"inuse": 1,
"amount": 3,
"details": null,
"option": null
},
{
"alias": "num_mob",
"name": "Мобильные номера",
"desc": "",
"inuse": 1,
"amount": 5,
"details": null,
"option": null
},
{
"alias": "num_800",
"name": "Номера 8-800",
"desc": "",
"inuse": 0,
"amount": 3,
"details": null,
"option": null
},
{
"alias": "num_personal",
"name": "Персональные номера",
"desc": "",
"inuse": 1,
"amount": 100,
"details": null,
"option": null
},
{
"alias": "serv",
"name": "Сервисные аккаунты",
"desc": "",
"inuse": 1,
"amount": 5,
"details": [
{
"name": "сценарии",
"inuse": 1
},
{
"name": "группы",
"inuse": 0
}
],
"option": null
},
{
"alias": "sip",
"name": "SIP аккаунты",
"desc": "SIP аккаунт сверх лимита 99 руб.\/мес.",
"inuse": 1,
"amount": 10,
"details": null,
"option": null
},
{
"alias": "in",
"name": "Входящие линии",
"desc": "+15 входящих и +15 исходящих за 990 руб.\/мес.",
"inuse": 5,
"amount": 5,
"details": null,
"option": {
"id": "6b7fe186-a90c-b206-b608-5d726d89f9b9",
"active": false
}
},
{
"alias": "out",
"name": "Исходящие линии",
"desc": "+15 входящих и +15 исходящих за 990 руб.\/мес.",
"inuse": 5,
"amount": 5,
"details": null,
"option": {
"id": "6b7fe186-a90c-b206-b608-5d726d89f9b9",
"active": false
}
}
],
"services": [
{
"id": "api",
"name": "Доступ к API",
"desc": "",
"access": true,
"active": false,
"fee": null
},
{
"id": "per_second",
"name": "Посекундная тарификация",
"desc": "Посекундная тарификация разговоров",
"access": true,
"active": true,
"fee": null
},
{
"id": "record2",
"name": "Запись разговоров",
"desc": "Хранение записей 1 год",
"access": true,
"active": true,
"fee": "890.00000"
},
{
"id": "record",
"name": "Запись разговоров",
"desc": "Хранение записей 3 месяца",
"access": false,
"active": false,
"fee": "290.00000"
},
{
"id": "webhook",
"name": "Webhook",
"desc": "Система уведомлений о звонках",
"access": true,
"active": true,
"fee": null
}
],
"success": true
}
GET
api/v1/tariffs
Метод позволяет получить список всех тарифов, доступных для текущего пользователя.
Не имеет параметров.
curl -X GET \
-G "https://restapi.plusofon.ru/api/v1/tariffs" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}"
const url = new URL(
"https://restapi.plusofon.ru/api/v1/tariffs"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "GET",
headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://restapi.plusofon.ru/api/v1/tariffs',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/tariffs'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('GET', url, headers=headers)
response.json()
В ответе возвращается:
categories
массив категорий тарифов
/ id
ИД категории
/ name
название категории
/ description
описание категории
tariffs
объект с общим списком тарифов
/ <ИД категории>
массив тарифов внутри категории
/ / id
ИД тарифа
/ / name
название тарифа
/ / description
описание тарифа
/ / fee_month
абонентская плата за тариф
/ / items
массив тарифных опций
/ / / name
название опции
/ / / desc
описание опции
/ / / amount
квота опции
/ / links
массив справочных ссылок
/ / / name
описание справочной ссылки
/ / / url
справочная ссылка
{
"categories": [
{
"id": "e712e47a-f5c9-06fc-9b70-62323ce886e3",
"name": "Облачная АТС",
"description": ""
},
{
"id": "7db515f2-6b1b-d3af-36d4-623244053d85",
"name": "Транк",
"description": "для подключения к офисной АТС"
}
],
"tariffs": {
"e712e47a-f5c9-06fc-9b70-62323ce886e3": [
{
"id": "28de2759-2083-57dd-eace-623355deadcd",
"name": "Первый",
"description": "Идеальный тариф для индивидуального предпринимателя",
"fee_month": null,
"fee_description": null,
"fee_year": null,
"items": [
{
"name": "SIP аккаунты",
"desc": "",
"amount": "3.0000"
},
{
"name": "Городские номера",
"desc": null,
"amount": "1.0000"
},
{
"name": "Мобильные номера",
"desc": null,
"amount": "1.0000"
},
{
"name": "Номера 8-800",
"desc": null,
"amount": "1.0000"
},
{
"name": "Сервисные аккаунты",
"desc": null,
"amount": "2.0000"
},
{
"name": "Входящие линии",
"desc": null,
"amount": "3.0000"
},
{
"name": "Исходящие линии",
"desc": null,
"amount": "3.0000"
},
{
"name": "Персональные номера",
"desc": null,
"amount": "1.0000"
},
{
"name": "Доступ к АПИ",
"desc": null,
"amount": "1.0000"
}
],
"links": [
{
"name": "подробнее о тарифе",
"url": "https:\/\/docs.plusofon.ru\/legal\/vpbx_terms.html"
},
{
"name": "цены на звонки",
"url": "https:\/\/docs.plusofon.ru\/legal\/vpbx_price_promo.html"
}
]
},
{
"id": "420b8aa2-6883-cc68-4595-62336263caf1",
"name": "Базовый",
"description": "Тариф для небольшой команды, которая только начинает свое дело",
"fee_month": "490.0000",
"fee_description": null,
"fee_year": null,
"items": [
{
"name": "SIP аккаунты",
"desc": "SIP аккаунт сверх лимита 99 руб.\/мес.",
"amount": "10.0000"
},
{
"name": "Городские номера",
"desc": null,
"amount": "3.0000"
},
{
"name": "Мобильные номера",
"desc": null,
"amount": "5.0000"
},
{
"name": "Номера 8-800",
"desc": null,
"amount": "3.0000"
},
{
"name": "Сервисные аккаунты",
"desc": null,
"amount": "5.0000"
},
{
"name": "Входящие линии",
"desc": "+15 входящих и +15 исходящих за 990 руб.\/мес.",
"amount": "5.0000"
},
{
"name": "Исходящие линии",
"desc": "+15 входящих и +15 исходящих за 990 руб.\/мес.",
"amount": "5.0000"
},
{
"name": "Персональные номера",
"desc": null,
"amount": "10.0000"
},
{
"name": "Доступ к АПИ",
"desc": null,
"amount": "1.0000"
}
],
"links": [
{
"name": "подробнее о тарифе",
"url": "https:\/\/docs.plusofon.ru\/legal\/vpbx_terms.html"
},
{
"name": "цены на звонки",
"url": "https:\/\/docs.plusofon.ru\/legal\/vpbx_price_basic.html"
}
]
},
{
"id": "6d2f32db-6914-49ee-cf4b-62336145fd1c",
"name": "Корпоративный",
"description": "Тариф для малого и среднего бизнеса, а также для местных представительств",
"fee_month": "1990.0000",
"fee_description": null,
"fee_year": null,
"items": [
{
"name": "SIP аккаунты",
"desc": "SIP аккаунт сверх лимита 99 руб.\/мес.",
"amount": "50.0000"
},
{
"name": "Городские номера",
"desc": null,
"amount": "25.0000"
},
{
"name": "Мобильные номера",
"desc": null,
"amount": "50.0000"
},
{
"name": "Номера 8-800",
"desc": null,
"amount": "50.0000"
},
{
"name": "Сервисные аккаунты",
"desc": null,
"amount": "999.0000"
},
{
"name": "Входящие линии",
"desc": "+15 входящих и +15 исходящих за 990 руб.\/мес.",
"amount": "30.0000"
},
{
"name": "Исходящие линии",
"desc": "+15 входящих и +15 исходящих за 990 руб.\/мес.",
"amount": "30.0000"
},
{
"name": "Персональные номера",
"desc": null,
"amount": "50.0000"
},
{
"name": "Доступ к АПИ",
"desc": null,
"amount": "1.0000"
}
],
"links": [
{
"name": "подробнее о тарифе",
"url": "https:\/\/docs.plusofon.ru\/legal\/vpbx_terms.html"
},
{
"name": "цены на звонки",
"url": "https:\/\/docs.plusofon.ru\/legal\/vpbx_price_basic.html"
}
]
}
],
"7db515f2-6b1b-d3af-36d4-623244053d85": [
{
"id": "35a86929-ee39-eb07-a6fc-623363ee324e",
"name": "SIP-транк",
"description": "Тариф только для подключения к Вашей собственной офисной АТС, без функций облачной АТС (без IVR, сценариев, групп и т.д.)",
"fee_month": "0.0000",
"fee_description": null,
"fee_year": null,
"items": [
{
"name": "Городские номера",
"desc": null,
"amount": "50.0000"
},
{
"name": "Мобильные номера",
"desc": null,
"amount": "50.0000"
},
{
"name": "Номера 8-800",
"desc": null,
"amount": "50.0000"
},
{
"name": "Входящие линии",
"desc": "+15 входящих и +15 исходящих за 1 990 руб.\/мес.",
"amount": "30.0000"
},
{
"name": "Исходящие линии",
"desc": "+15 входящих и +15 исходящих за 1 990 руб.\/мес.",
"amount": "30.0000"
}
],
"links": [
{
"name": "подробнее о тарифе",
"url": "https:\/\/docs.plusofon.ru\/legal\/siptrunk_terms.html"
},
{
"name": "цены на звонки",
"url": "https:\/\/docs.plusofon.ru\/legal\/siptrunk_price.html"
}
]
}
]
},
"current_tariff_id": "28de2759-2083-57dd-eace-623355deadcd",
"current_category": "e712e47a-f5c9-06fc-9b70-62323ce886e3",
"success": true
}
PATCH
api/v1/tariffs/{tariff_id}
Метод позволяет активировать выбранный тариф для текущего пользователя.
Path
tariff_id
stringi
curl -X PATCH \
"https://restapi.plusofon.ru/api/v1/tariffs/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}"
const url = new URL(
"https://restapi.plusofon.ru/api/v1/tariffs/1"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "PATCH",
headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://restapi.plusofon.ru/api/v1/tariffs/1',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/tariffs/1'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('PATCH', url, headers=headers)
response.json()
В ответе может возвращаться:
success
признак успешно выполненного запроса
message
объект с сообщением об ошибке
/ message
текст сообщения
/ field
ошибочное поле
code
код ошибки
Тариф успешно изменен:
{
"success": true
}
Передан некорректный ИД тарифа:
{
"message": {
"message": "The tariff_id field is required",
"field": "tariff_id"
},
"code": 400
}
Пользователь не найден:
{
"message": "User not found.",
"code": 500
}
GET
api/v1/tariffs/{tariff_id}/rate
Метод позволяет получить стоимость звонка на конкретный номер с конкретным тарифом.
curl -X GET \
-G "https://restapi.plusofon.ru/api/v1/tariffs/1/rate" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}" \
-d '{"phone":"79993332210"}'
const url = new URL(
"https://restapi.plusofon.ru/api/v1/tariffs/1/rate"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
let body = {
"phone": "79993332210"
}
fetch(url, {
method: "GET",
headers: headers,
body: body
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://restapi.plusofon.ru/api/v1/tariffs/1/rate',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
'json' => [
'phone' => '79993332210',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/tariffs/1/rate'
payload = {
"phone": "79993332210"
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()
В ответе может возвращаться:
rate
стоимость звонка
message
объект с сообщением об ошибке
/ message
текст сообщения
/ field
ошибочное поле
code
код ошибки
Получена стоимость звонка:
{
"rate": 1.95
}
Некорректно передан ИД тарифа:
{
"message": {
"message": "The tariff_id field is required.",
"field": "tariff_id"
},
"code": 400
}
PATCH
api/v1/tariff/services/{service_id}
Метод позволяет активировать конкретную дополнительную услугу.
Path
service_id
stringi
curl -X PATCH \
"https://restapi.plusofon.ru/api/v1/tariff/services/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}"
const url = new URL(
"https://restapi.plusofon.ru/api/v1/tariff/services/1"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "PATCH",
headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://restapi.plusofon.ru/api/v1/tariff/services/1',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/tariff/services/1'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('PATCH', url, headers=headers)
response.json()
В ответе может возвращаться:
success
признак успешно выполненного запроса
message
объект с сообщением об ошибке
/ message
текст сообщения
/ field
ошибочное поле
code
код ошибки
Услуга успешно подключена:
{
"success": true
}
Передан некорректный ИД услуги:
{
"message": {
"message": "The service_id field is required.",
"field": "service_id"
},
"code": 400
}
Пользователь не найден:
{
"message": "User not found.",
"code": 500
}
DELETE
api/v1/tariff/services/{service_id}
Метод позволяет удалить определённую подключенную услугу.
Path
service_id
stringi
curl -X DELETE \
"https://restapi.plusofon.ru/api/v1/tariff/services/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}"
const url = new URL(
"https://restapi.plusofon.ru/api/v1/tariff/services/1"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "DELETE",
headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://restapi.plusofon.ru/api/v1/tariff/services/1',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/tariff/services/1'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
В ответе может возвращаться:
success
признак успешно выполненного запроса
message
объект — сообщение об ошибке
/ message
текст сообщения
/ field
ошибочное поле
code
код ошибки
Услуга успешно отключена:
{
"success": true
}
Передан некорректный ИД услуги:
{
"message": {
"message": "The service_id field is required",
"field": "service_id"
},
"code": 400
}
Пользователь не найден:
{
"message": "User not found",
"code": 500
}
PATCH
api/v1/tariff/options/{option_id}
Метод позволяет подключить конкретную тарифную опцию.
Path
option_id
stringi
curl -X PATCH \
"https://restapi.plusofon.ru/api/v1/tariff/options/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}"
const url = new URL(
"https://restapi.plusofon.ru/api/v1/tariff/options/1"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "PATCH",
headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://restapi.plusofon.ru/api/v1/tariff/options/1',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/tariff/options/1'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('PATCH', url, headers=headers)
response.json()
В ответе может возвращаться:
success
признак успешно выполненного запроса
message
объект с сообщением об ошибке
/ message
текст сообщения
/ field
ошибочное поле
code
код ошибки
Тарифная опция успешно подключена:
{
"success": true
}
Передан некорректный ИД тарифной опции:
{
"message": {
"message": "The option_id field is required.",
"field": "option_id"
},
"code": 400
}
Пользователь не найден:
{
"message": "User not found.",
"code": 500
}
DELETE
api/v1/tariff/options/{option_id}
Метод позволяет отключить конкретную подключенную тарифную опцию.
Path
option_id
stringi
curl -X DELETE \
"https://restapi.plusofon.ru/api/v1/tariff/options/1" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Client: 10553" \
-H "Authorization: Bearer {token}"
const url = new URL(
"https://restapi.plusofon.ru/api/v1/tariff/options/1"
);
let headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Client": "10553",
"Authorization": "Bearer {token}",
};
fetch(url, {
method: "DELETE",
headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://restapi.plusofon.ru/api/v1/tariff/options/1',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Client' => '10553',
'Authorization' => 'Bearer {token}',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = 'https://restapi.plusofon.ru/api/v1/tariff/options/1'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Client': '10553',
'Authorization': 'Bearer {token}'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
В ответе может возвращаться:
success
признак успешно выполненного запроса
message
объект с сообщением об ошибке
/ message
текст сообщения
/ field
ошибочное поле
code
код ошибки
Тарифная опция успешно отключена:
{
"success": true
}
Передан некорректный ИД тарифной опции:
{
"message": {
"message": "The option_id field is required.",
"field": "option_id"
},
"code": 400
}
Пользователь не найден:
{
"message": "User not found.",
"code": 500
}