Integration with CRM
Телефония Binotel интегрируется с 70+ CRM-системами. Все интеграции бесплатны!
Базовые функции при интеграции Binotel с CRM:
- Информация о клиенте при входящем звонке
- Быстрое создание карточки клиента при входящих / Новые клиенты попадают в CRM автоматически
- Вся история звонков и записи разговоров с клиентами в CRM
- Звонки от клиентов идут на их личных менеджеров (привязка клиент-сотрудник)
- Набор номера в один клик из карточки клиента в СRM
Видео примеры работы интеграций:
- Интеграция Binotel + amoCRM
- Интеграция Binotel + Битрикс24 CRM
- Интеграция Binotel + Terrasoft bpm'online CRM
Для реализации этих функций вам нужно использовать:
WebHooks
API CALL SETTINGS
Используется для интеграции виртуальной АТС Binotel с Вашей CRM и/или управления звонками.
Метод HTTP запроса: POST
Пример: обслуживание запросов только с серверов Binotel
<?php
/**
* List of Binotel servers
*/
$listOfBinotelServers = array(
'194.88.218.116' => 'my.binotel.ua',
'194.88.218.114' => 'sip1.binotel.com',
'194.88.218.117' => 'sip2.binotel.com',
'194.88.218.118' => 'sip3.binotel.com',
'194.88.219.67' => 'sip4.binotel.com',
'194.88.219.78' => 'sip5.binotel.com',
'194.88.219.70' => 'sip6.binotel.com',
'194.88.219.71' => 'sip7.binotel.com',
'194.88.219.72' => 'sip8.binotel.com',
'194.88.219.79' => 'sip9.binotel.com',
'194.88.219.80' => 'sip10.binotel.com',
'194.88.219.81' => 'sip11.binotel.com',
'194.88.219.82' => 'sip12.binotel.com',
'194.88.219.83' => 'sip13.binotel.com',
'194.88.219.84' => 'sip14.binotel.com',
'194.88.219.85' => 'sip15.binotel.com',
'194.88.219.86' => 'sip16.binotel.com',
'194.88.219.87' => 'sip17.binotel.com',
'194.88.219.88' => 'sip18.binotel.com',
'194.88.219.89' => 'sip19.binotel.com',
'194.88.219.92' => 'sip20.binotel.com',
'194.88.218.119' => 'sip21.binotel.com',
'194.88.218.120' => 'sip22.binotel.com',
'185.100.66.145' => 'sip50.binotel.com',
'185.100.66.146' => 'sip51.binotel.com',
'185.100.66.147' => 'sip52.binotel.com',
);
/**
* Allow access only from Binotel server
*/
if (!isset($listOfBinotelServers[$_SERVER['REMOTE_ADDR']])) {
die(sprintf('Access denied!%s', PHP_EOL));
}
Пример 1: быстрое создание карточки клиента при при входящем звонке
<?php
die(json_encode(array(
'customerData' => array(
'linkToCrmUrl' => 'https://my.binotel.ua/?module=addClient&number=0443334023',
'linkToCrmTitle' => 'Создать клиента'
)
)));
Пример 2: информация о клиенте при входящем звонке + привязка клиент-сотрудник
<?php
die(json_encode(array(
'customerData' => array(
'name' => 'Имя клиента в CRM',
'description' => 'Дополнительное описание в нотификации плагина для Chrome',
'assignedToEmployeeEmail' => 'ic@binotel.ua',
'linkToCrmUrl' => 'http://crm.crm.crm/show-client.php?id=142',
'linkToCrmTitle' => 'Перейти в CRM'
)
)));
Пример 3: переопределения сценария входящего звонка для данного звонка
<?php
die(json_encode(array(
'routeData' => array(
'type' => 'route',
'id' => '3810'
)
)));
Пример 4: передача данных в сценарий входящего звонка
<?php
die(json_encode(array(
'variables' => array(
'variableName' => 'value'
)
)));
Интеграция виртуальной АТС Binotel с Вашей CRM.
Как это работает:
- При поступлении звонка на виртуальную АТС Binotel, отправляется запрос по адресу WebHook-а в CRM для получение данных: имени клиента, ответственного сотрудника и ссылки на контакт в CRM системе
- В плагине для Chrome производиться вывод информации сотрудникам у которых звонит телефон
- Сотрудник в нотификации нажимая на ссылку и переходит на контакт в CRM системе
Управление звонком.
Как это работает:
- При поступлении звонка на виртуальную АТС Binotel, отправляется запрос по адресу WebHook-а
- Ваш скрипт имеет возможность: сменить сценарий для обработки данного звонка, передать переменные для сценария
Структура данных POST запроса API CALL SETTINGS
Parameter | Description |
---|---|
requestType | тип запроса: apiCallSettings |
pbxNumber | номер, на который поступил звонок (параметр доступен только при входящем звонке) |
internalNumber | внутренний номер сотрудника (параметр доступен только при исходящем звонке) |
externalNumber | телефонный номер клиента |
companyID | номер компании в виртуальной АТС Binotel |
callType | тип звонка: входящий - 0, исходящий - 1 |
Структура данных JSON ответа с WebHook-а
Parameter | Description |
---|---|
name | имя клиента будет отображенно на телефоне сотрудника и в плагине для Chrome. Рекомендуем использовать до 43 символов (ограничение в плагине для Chrome). |
description | дополнительное описание в нотификации плагина для Chrome. Рекомендуем использовать до 70 символов. Ограничение в плагине для Chrome около 115 символов в 3-х строках. Описание сдвигает стандартную информацию в этом поле. |
customerData[assignedToEmployeeEmail] | email отвественного сотрудника в MyBinotel для обработки входящего звонка |
customerData[assignedToEmployeeNumber] | email отвественного сотрудника в MyBinotel для обработки входящего звонка |
customerData[assignedToEmployeeID] | идентификатор отвественного сотрудника в MyBinotel для обработки входящего звонка |
customerData[linkToCrmUrl] | ссылка, которая будет отображатся сотруднику в плагине для Chrome |
customerData[linkToCrmTitle] | текст ссылки, которая будет отображатся сотруднику в плагине для Chrome |
customerData[linkToCrm2Url] | ссылка №2, которая будет отображатся сотруднику в плагине для Chrome |
customerData[linkToCrm2Title] | текст ссылки №2, которая будет отображатся сотруднику в плагине для Chrome |
routeData[type] | тип сценария (route - обычный сценарий, routeWithTime - временной сценарий) |
routeData[id] | идентификатор сценария |
API CALL COMPLETED
Используется для уведомления Вашего скрипта о каждом завершенном звонке. Обычно используется для интеграции виртуальной АТС Binotel с Вашей CRM.
Метод HTTP запроса: POST
API CALL COMPLETED имеет 7 попыток отправки информации о звонке:
- 1 попытка: сразу после завершения звонка
- 2 попытка: через 20 минут от последней попытки (от завершения звонка: 20 минут)
- 3 попытка: через 40 минут от последней попытки (от завершения звонка: 1 час)
- 4 попытка: через 60 минут от последней попытки (от завершения звонка: 2 часа)
- 5 попытка: через 4 часа от последней попытки (от завершения звонка: 6 часов)
- 6 попытка: через 8 часов от последней попытки (от завершения звонка: 14 часов)
- 7 попытка: через 24 часа от последней попытки (от завершения звонка: 38 часов)
Структура данных POST запроса API CALL COMPLETED
Parameter | Description |
---|---|
requestType | тип запроса: apiCallCompleted |
callDetails | информация о звонке: cтруктура данных |
WebSocket
Документация в разработке.
REST API
Introduction
REST API используется для:
- получения всей инфомрации с личного кабинета (звонки, клиенты, задачи, настройки)
- создание и управление звонком
Готовые API библиотеки к использованию
PHP:
- binotel-api-4.0.0-samples.zip
- Установка зависимостей на Ubuntu: apt-get install php5 php5-curl
Как создать собственную API библиотеку
REST API реализовано по RESTful принцыпу. Это POST запросы, с уникальными ссылками для каждого метода.
Основная информация для написания своей API библиотеки:
- для авторизации используется: key, secret
- ссылка каждого метода описана в HTTP full path
- метод HTTP запроса: POST
- формат передачи данных: raw post data в json
Фактически, Вы шлете raw post data в json на адрес метода.
Пример:
- ссылка: https://api.binotel.com/api/4.0/stats/all-incoming-calls-since.json
- содержимое:
{"timestamp":1390528862,"key":"6po1f4-7oPzCo1","secret":"8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb"}
где timestamp - это необходимый параметр для метода all-incoming-calls-since, key и secret - параметры для авторизации.
REST API: STATS
Данный раздел используется для работы со статистикой звонков.
Структура данных, возвращаемая сервером в разделе STATS
Структура данных, возвращаемая сервером в разделе STATS
{
"status": "success",
"callDetails": {
"1387100932": {
"companyID": 26912,
"generalCallID": 1387100932,
"startTime": 1505591081,
"callType": 0,
"internalNumber": "930",
"internalAdditionalData": "801 >",
"externalNumber": "0675639050",
"waitsec": 22,
"billsec": 478,
"disposition": "ANSWER",
"isNewCall": 1,
"customerData": {
"id": 48945487,
"name": "Руслан"
},
"employeeData": {
"name": "Алина",
"email": "al1985@urk.net"
},
"pbxNumberData": {
"number": "0443339292",
"name": "Отдел продаж"
},
"historyData": [
{
"internalNumber": "930",
"internalAdditionalData": "801 >",
"employeeData": {
"name": "Алина",
"email": "al1985@urk.net"
},
"waitsec": 7,
"billsec": 478,
"disposition": "ANSWER"
},
{
"internalNumber": "805",
"internalAdditionalData": "",
"employeeData": {},
"waitsec": 15,
"billsec": 0,
"disposition": "NOANSWER"
}
]
}
}
}
Структура данных звонка
Parameter | Description |
---|---|
companyID | номер компании в виртуальной АТС Binotel |
generalCallID | идентификатор звонка |
startTime | время начала звонка в формате Unix time |
callType | тип звонка: входящий - 0, исходящий - 1 |
internalNumber | внутренний номер сотрудника / группы в виртуальной АТС (если звонок не был принят) |
internalAdditionalData | номер группы в виртуальной АТС (если звонок был принят) |
externalNumber | телефонный номер клиента |
waitsec | ожидание до соединения |
billsec | длительность разговора |
disposition | состояние звонка (коды описаны ниже) |
isNewCall | входящий звонок новый - 1, звонил ранее - 0 |
customerData | информация о клиенте в Binotel CRM (формат данных: массив) |
customerData[name] | имя сотрудника |
customerData[email] | email сотрудника |
employeeData | информации о сотруднике (формат данных: массив) |
employeeData[name] | имя сотрудника |
employeeData[email] | email сотрудника |
pbxNumberData | информации о телефонном номере (формат данных: массив) |
pbxNumberData[number] | телефонный номер на который пришел звонок или с которого осуществлялся звонок |
pbxNumberData[name] | название телефонного номера |
historyData | детализация истории звонка, используются теже параметры что и в структуре звонка (формат данных: массив, описание ниже) |
callTrackingData | информации CallTracking звонка (формат данных: массив, описание ниже) |
getCallData | информации GetCall звонка (формат данных: массив, описание ниже) |
smsContent | содержимое SMS сообщения |
Коды состояния звонка (disposition)
Parameter | Description |
---|---|
ANSWER | успешный звонок |
TRANSFER | успешный звонок который был переведен |
ONLINE | звонок в онлайне |
BUSY | неуспешный звонок по причине занято |
NOANSWER | неуспешный звонок по причине нет ответа |
CANCEL | неуспешный звонок по причине отмены звонка |
CONGESTION | неуспешный звонок |
CHANUNAVAIL | неуспешный звонок |
VM | голосовая почта без сообщения |
VM-SUCCESS | голосовая почта с сообщением |
SMS-SENDING | SMS сообщение на отправке |
SMS-SUCCESS | SMS сообщение успешно отправлено |
SMS-FAILED | SMS сообщение не отправлено |
SUCCESS | успешно принятый факс |
FAILED | непринятый факс |
Структура historyData (детализация истории звонка)
Parameter | Description |
---|---|
internalNumber | внутренний номер сотрудника / группы в виртуальной АТС (если звонок не был принят) |
internalAdditionalData | номер группы в виртуальной АТС (если звонок был принят) |
employeeData | информации о сотруднике (формат данных: массив, описание выше) |
waitsec | ожидание до соединения |
billsec | длительность разговора |
disposition | состояние звонка |
Структура callTrackingData (информации CallTracking звонка)
Parameter | Description |
---|---|
id | Call Tracking id |
gaClientId | Google Analytics Client ID |
gaTrackingId | идентификатор отслеживания сайта в Google Analytics |
utm_source | метка utm_source |
utm_medium | метка utm_medium |
utm_campaign | метка utm_campaign |
utm_content | метка utm_content |
utm_term | метка utm_term |
ipAddress | IP адрес клиента |
geoipCountry | страна по geoip |
geoipRegion | регион по geoip |
geoipCity | город по geoip |
geoipOrg | организация по geoip |
domain | сайт |
timeSpentOnSiteBeforeMakeCall | пребывания на сайте до совершения звонка в секундах |
firstVisitAt | клиент зашел на сайт впервые |
Структура getCallData (информации GetCall звонка)
Parameter | Description |
---|---|
id | GetCall id |
gaClientId | Google Analytics Client ID |
gaTrackingId | идентификатор отслеживания сайта в Google Analytics |
utm_source | метка utm_source |
utm_medium | метка utm_medium |
utm_campaign | метка utm_campaign |
utm_content | метка utm_content |
utm_term | метка utm_term |
ipAddress | IP адрес клиента |
geoipCountry | страна по geoip |
geoipRegion | регион по geoip |
geoipCity | город по geoip |
geoipOrg | организация по geoip |
domain | сайт |
isNewNumber | заказ сделан впервые |
createdAt | звонок заказан в |
callAt | звонок заказан на |
processedAt | звонок обработан в |
isProcessed | звонок обработан - 1, не обработан - 0 |
requestsCounter | количество попыток заказа звонка клиентом |
attemptsCounter | количество попыток соединения сотрудника с клиентом |
employeesDontAnswerCounter | сколько раз не взяли трубку сотрудники |
fullUrl | заказ сделан со страницы |
description | дополнительное описание |
incoming-calls-for-period
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/incoming-calls-for-period', array(
'startTime' => 1370034000, // Sat, 01 Jun 2013 00:00:00 +0300
'stopTime' => 1370120399 // Sat, 01 Jun 2013 23:59:59 +0300
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие звонки за период времени
Query Parameters
Parameter | Required | Description |
---|---|---|
startTime | yes | Время начала выбора звонков (в формате unix timestamp) |
stopTime | yes | Время окончания выбора звонков (в формате unix timestamp) |
HTTP full path
https://api.binotel.com/api/4.0/stats/incoming-calls-for-period.json
outgoing-calls-for-period
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/outgoing-calls-for-period', array(
'startTime' => 1370034000, // Sat, 01 Jun 2013 00:00:00 +0300
'stopTime' => 1370120399 // Sat, 01 Jun 2013 23:59:59 +0300
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Исходящие звонки за период времени
Query Parameters
Parameter | Required | Description |
---|---|---|
startTime | yes | Время начала выбора звонков (в формате unix timestamp) |
stopTime | yes | Время окончания выбора звонков (в формате unix timestamp) |
HTTP full path
https://api.binotel.com/api/4.0/stats/outgoing-calls-for-period.json
calltracking-calls-for-period
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/calltracking-calls-for-period', array(
'startTime' => 1370034000, // Sat, 01 Jun 2013 00:00:00 +0300
'stopTime' => 1370120399 // Sat, 01 Jun 2013 23:59:59 +0300
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
CallTracking звонки за период времени
Query Parameters
Parameter | Required | Description |
---|---|---|
startTime | yes | Время начала выбора звонков (в формате unix timestamp) |
stopTime | yes | Время окончания выбора звонков (в формате unix timestamp) |
HTTP full path
https://api.binotel.com/api/4.0/stats/calltracking-calls-for-period.json
all-incoming-calls-since
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$lastRequestTimestamp = 1370034000; // Sat, 01 Jun 2013 00:00:00 +0300
$result = $api->sendRequest('stats/all-incoming-calls-since', array(
'timestamp' => $lastRequestTimestamp
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие звонки с N времени по настоящее время
Query Parameters
Parameter | Required | Description |
---|---|---|
timestamp | yes | Время начала выбора звонков (в формате unix timestamp) |
HTTP full path
https://api.binotel.com/api/4.0/stats/all-incoming-calls-since.json
all-outgoing-calls-since
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$lastRequestTimestamp = 1370034000; // Sat, 01 Jun 2013 00:00:00 +0300
$result = $api->sendRequest('stats/all-outgoing-calls-since', array(
'timestamp' => $lastRequestTimestamp
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Исходящие звонки с N времени по настоящее время
Query Parameters
Parameter | Required | Description |
---|---|---|
timestamp | yes | Время начала выбора звонков (в формате unix timestamp) |
HTTP full path
https://api.binotel.com/api/4.0/stats/all-outgoing-calls-since.json
list-of-calls-by-internal-number-for-period
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/list-of-calls-by-internal-number-for-period', array(
'internalNumber' => '901',
'startTime' => 1370034000, // Sat, 01 Jun 2013 00:00:00 +0300
'stopTime' => 1370638799 // Fri, 07 Jun 2013 23:59:59 +0300
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие и исходящие звонки по внутреннему номеру сотрудника за период времени (ограничение: период не может быть больше 7 дней).
Query Parameters
Parameter | Required | Description |
---|---|---|
internalNumber | yes | внутренний номер сотрудника |
startTime | yes | Время начала выбора звонков (в формате unix timestamp) |
stopTime | yes | Время окончания выбора звонков (в формате unix timestamp) |
HTTP full path
https://api.binotel.com/api/4.0/stats/list-of-calls-by-internal-number-for-period.json
list-of-calls-per-day
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/list-of-calls-per-day', array(
'dayInTimestamp' => mktime(0, 0, 0, 11, 25, 2015)
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие и исходяшие звонки за день.
Query Parameters
Parameter | Required | Description |
---|---|---|
dayInTimestamp | no | День в формате unix timestamp. При отсутствии этого параметра звонки буду взяты за сегодня. |
HTTP full path
https://api.binotel.com/api/4.0/stats/list-of-calls-per-day.json
list-of-calls-for-period
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/list-of-calls-for-period', array(
'startTime' => 1370034000, // Sat, 01 Jun 2013 00:00:00 +0300
'stopTime' => 1370048400 // Sat, 01 Jun 2013 04:00:00 +0300
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие и исходящие звонки за период времени (! но не больше 24 часов).
Query Parameters
Parameter | Required | Description |
---|---|---|
startTime | yes | Время начала выбора звонков (в формате unix timestamp) |
stopTime | yes | Время окончания выбора звонков (в формате unix timestamp) |
HTTP full path
https://api.binotel.com/api/4.0/stats/list-of-calls-for-period.json
list-of-lost-calls-for-today
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/list-of-lost-calls-for-today', array());
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Потерянные звонки за сегодня.
HTTP full path
https://api.binotel.com/api/4.0/stats/list-of-lost-calls-for-today.json
online-calls
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/online-calls', array());
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Звонки которые в онлайне.
HTTP full path
https://api.binotel.com/api/4.0/stats/online-calls.json
history-by-external-number
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/history-by-external-number', array(
'externalNumbers' => array('0443334023', '0443334444')
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие и исходящие звонки по номеру телефона.
Query Parameters
Parameter | Required | Description |
---|---|---|
externalNumbers | yes | Номер или номера в массиве |
HTTP full path
https://api.binotel.com/api/4.0/stats/history-by-external-number.json
history-by-customer-id
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/history-by-customer-id', array(
'customerID' => array('8916611', '8281940')
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие и исходящие звонки по идентификатору клиента.
Query Parameters
Parameter | Required | Description |
---|---|---|
customerID | yes | идентификатор клиента или идентификаторы клиентов в массиве |
HTTP full path
https://api.binotel.com/api/4.0/stats/history-by-customer-id.json
recent-calls-by-internal-number
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/recent-calls-by-internal-number', array(
'internalNumber' => '901'
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Входящие и исходящие звонки недавние звонки по внутреннему номеру сотрудника (ограничение: звонки за последние 2 недели, не более 50 звонков).
Query Parameters
Parameter | Required | Description |
---|---|---|
internalNumber | yes | внутренний номер сотрудника |
HTTP full path
https://api.binotel.com/api/4.0/stats/recent-calls-by-internal-number.json
call-details
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/call-details', array(
'generalCallID' => array('2255713', '2256039', '2252553')
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Данные о звонке по идентификатору звонка.
Query Parameters
Parameter | Required | Description |
---|---|---|
generalCallID | yes | Идентификаторы звонков в массиве |
HTTP full path
https://api.binotel.com/api/4.0/stats/call-details.json
call-record
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('stats/call-record', array(
'generalCallID' => '12501059'
));
if ($result['status'] === 'success') {
var_dump($result['callDetails']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Ссылка на запись разговора.
Query Parameters
Parameter | Required | Description |
---|---|---|
generalCallID | yes | идентификатор звонка |
HTTP full path
https://api.binotel.com/api/4.0/stats/call-record.json
REST API: CUSTOMERS
Данный раздел используется для работы с Binotel CRM.
Структура данных, возвращаемая сервером в разделе CUSTOMERS
Структура данных, возвращаемая сервером в разделе CUSTOMERS
{
"status": "success",
"customerData": {
"48945487": {
"id": 48945487,
"name": "Руслан",
"description": "",
"email": "rusl.go@gmail.com",
"assignedToEmployee": {
"id": 99132,
"email": "alina@gmail.com",
"internalNumber": "932",
"name": "Алина",
},
"numbers": [
"0675639050",
"0445221717"
],
"labels": [
{
"id": 9025,
"name": "Окна Rehau"
},
{
"id": 8401,
"name": "20000+"
},
]
}
}
}
Структура данных о клиенте в Binotel CRM
Parameter | Description |
---|---|
id | идентификатор клиента |
name | имя клиента |
description | информация о клиенте |
email клиента | |
assignedToEmployee | информация об ответственном сотруднике (формат данных: массив) |
assignedToEmployee[id] | идентификатор ответственного сотрудника |
assignedToEmployee[email] | email ответственного сотрудника |
assignedToEmployee[internalNumber] | внутренний номер ответственного сотрудника |
assignedToEmployee[name] | имя ответственного сотрудника |
numbers | список номеров клиента |
labels | список меток (формат данных: массив) |
labels[id] | идентификатор метки |
labels[name] | название метки |
list
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/list', array());
if ($result['status'] === 'success') {
var_dump($result['customerData']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Выбор всех клиентов.
HTTP full path
https://api.binotel.com/api/4.0/customers/list.json
take-by-id
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/take-by-id', array(
'customerID' => array('6611')
));
if ($result['status'] === 'success') {
var_dump($result['customerData']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Выбор клиентов по идентификатору клиента.
Query Parameters
Parameter | Required | Description |
---|---|---|
customerID | yes | Идентификаторы клиентов в массиве |
HTTP full path
https://api.binotel.com/api/4.0/customers/take-by-id.json
take-by-label
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/take-by-label', array(
'labelID' => 18274
));
if ($result['status'] === 'success') {
var_dump($result['customerData']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Выбор клиентов по метке.
Query Parameters
Parameter | Required | Description |
---|---|---|
labelID | yes | Идентификатор метки |
HTTP full path
https://api.binotel.com/api/4.0/customers/take-by-label.json
search
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/search', array(
'subject' => 'Генадий'
));
if ($result['status'] === 'success') {
var_dump($result['customerData']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Поиск клиентов по имени или номеру телефона.
Query Parameters
Parameter | Required | Description |
---|---|---|
subject | yes | Часть имени или номера телефона |
HTTP full path
https://api.binotel.com/api/4.0/customers/search.json
create
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/create', array(
'name' => 'New client',
'numbers' => array(
'0970003322', '0939990099'
),
'description' => 'Информаиця о клиенте!',
'email' => 'new.client@gmail.com',
'assignedToEmployee' => array(
'internalNumber' => '904'
),
));
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
The above command returns JSON structured like this:
{
"status": "success",
"customerID": 51813101
}
Создание клиента.
Query Parameters
Parameter | Required | Description |
---|---|---|
name | yes | Имя клиента |
numbers | yes | Номера телефонов в массиве, номера должны быть уникальными |
description | no | Информация о клиенте |
no | Email клиента | |
assignedToEmployee[internalNumber] | no | Внутренний номер сотрудника в АТС Binotel (пример: 904, важно чтобы линия была закреплена за сотрудником в MyBinotel!) |
assignedToEmployee[id] | no | Идентификаторв сотрудника в АТС Binotel |
labels | no | Идентификаторы меток в массиве |
HTTP full path
https://api.binotel.com/api/4.0/customers/create.json
update
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/update', array(
'id' => '51813101',
'name' => 'Георгий',
'numbers' => array(
'0971553605', '0939990099'
),
'description' => '',
'assignedToEmployee' => array(
'internalNumber' => ''
),
));
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Редактирование клиента.
Query Parameters
Parameter | Required | Description |
---|---|---|
id | yes | Имя клиента |
name | no | Имя клиента |
numbers | no | Номера телефонов в массиве, номера должны быть уникальными |
description | no | Информация о клиенте |
no | Email клиента | |
assignedToEmployee[internalNumber] | no | Внутренний номер сотрудника в АТС Binotel (пример: 904, важно чтобы линия была закреплена за сотрудником в MyBinotel!) |
assignedToEmployee[id] | no | Идентификаторв сотрудника в АТС Binotel |
labels | no | Идентификаторы меток в массиве |
HTTP full path
https://api.binotel.com/api/4.0/customers/update.json
delete
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/delete', array(
'customerID' => array(51813101)
));
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Удаление клиента.
Query Parameters
Parameter | Required | Description |
---|---|---|
customerID | yes | Идентификаторы клиентов в массиве. |
HTTP full path
https://api.binotel.com/api/4.0/customers/delete.json
listOfLabels
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('customers/listOfLabels', array());
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
The above command returns JSON structured like this:
{
"status": "success",
"listOfLabels": {
"9025": {
"id": 9025,
"name": "Окна Rehau"
},
"8401": {
"id": 8401,
"name": "20000+"
},
}
}
Выбор всех меток.
Структура данных меток в Binotel CRM
Parameter | Description |
---|---|
id | идентификатор метки |
name | имя метки |
HTTP full path
https://api.binotel.com/api/4.0/customers/listOfLabels.json
REST API: CALLS
Создание и управление звонком.
internal-number-to-external-number
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('calls/internal-number-to-external-number', array(
'internalNumber' => '910',
'externalNumber' => '0443334023'
));
if ($result['status'] === 'success') {
var_dump($result['generalCallID']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Создание двустороннего звонка. Внутреннюю линию с внешним телефонным номером.
Query Parameters
Parameter | Required | Description |
---|---|---|
internalNumber | yes | Внутренний номер сотрудника |
externalNumber | yes | Внешний телефонный номер |
pbxNumber | no | Номер через который будет совершаться звонок на телефонный номер |
limitCallTime | no | Ограничение длительности звонка в секундах |
callTimeToExt | no | Длительность дозвона на внутреннюю линию (по умолчанию 30 секунд) |
playbackWaiting | no | Проигрывание, первому участнику разговора, сообщения: "ожидайте пожалуйста на линии, происходит соединение со 2-м участником разговора". По умолчанию TRUE, принимает значения: TRUE или FALSE. |
callerIdForEmployee | no | Смена отображения информации о номере куда будем звонить на экране телефона у сотрудника, по умолчанию отображается внешний телефонный номер. В основном данный параметр используется для скрытия телефонного номера от сотрудника (примеры: Private или CRM client id 3320) |
async | no | Не дожидаться результата звонка на внутреннюю линию. По умолчанию FALSE, принимает значения: TRUE или FALSE |
HTTP full path
https://api.binotel.com/api/4.0/calls/internal-number-to-external-number.json
external-number-to-external-number
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('calls/external-number-to-external-number', array(
'externalNumber1' => '0970002233',
'externalNumber2' => '0443334333',
'pbxNumber' => '0443334023'
));
if ($result['status'] === 'success') {
var_dump($result['generalCallID']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Создание двустороннего звонка. Внешний телефонный номер с внешним телефонным номером.
Query Parameters
Parameter | Required | Description |
---|---|---|
externalNumber1 | yes | Первый внешний телефонный номер |
externalNumber2 | yes | Второй внешний телефонный номер |
pbxNumber | yes | Номер через который будут совершаться оба звонка |
limitCallTime | no | Ограничение длительности звонка в секундах |
playbackWaiting | no | Проигрывание, первому участнику разговора, сообщения: "ожидайте пожалуйста на линии, происходит соединение со 2-м участником разговора". По умолчанию TRUE, принимает значения: TRUE или FALSE. |
HTTP full path
https://api.binotel.com/api/4.0/calls/external-number-to-external-number.json
external-number-to-incoming-call
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('calls/external-number-to-incoming-call', array(
'externalNumber' => '0968487126',
'pbxNumber' => 'CB_0800330683',
'pbxNumberInExternalCall' => '0443339283',
));
if ($result['status'] === 'success') {
var_dump($result['generalCallID']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Создание двустороннего звонка. Внешний телефонный номер с внешним телефонным номером.
Query Parameters
Parameter | Required | Description |
---|---|---|
externalNumber | yes | Внешний телефонный номер |
pbxNumber | yes | Номер на который будет поступать входящий звонок |
pbxNumberInExternalCall | no | Номер через который будет совершаться исходящий звонок |
HTTP full path
https://api.binotel.com/api/4.0/calls/external-number-to-incoming-call.json
attended-call-transfer
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('calls/attended-call-transfer', array(
'generalCallID' => '22661563',
'externalNumber' => '912'
));
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Перевод звонка с участием.
Query Parameters
Parameter | Required | Description |
---|---|---|
generalCallID | yes | Идентификатор звонка |
externalNumber | yes | Номер на который переводится звонок |
HTTP full path
https://api.binotel.com/api/4.0/calls/attended-call-transfer.json
hangup-call
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('calls/hangup-call', array(
'generalCallID' => '22661891'
));
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Принудительное завершение звонка.
Query Parameters
Parameter | Required | Description |
---|---|---|
generalCallID | yes | Идентификатор звонка |
HTTP full path
https://api.binotel.com/api/4.0/calls/hangup-call.json
call-with-announcement
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('calls/call-with-announcement', array(
'externalNumber' => '0443334023',
'voiceFileID' => '4'
));
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
Звонок с оповещением голосового файла.
Query Parameters
Parameter | Required | Description |
---|---|---|
externalNumber | yes | Телефонный номер |
voiceFileID | yes | Идентификатор голосового файла (список голосовых файлов) |
HTTP full path
https://api.binotel.com/api/4.0/calls/call-with-announcement.json
call-with-interactive-voice-response
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('calls/call-with-interactive-voice-response', array(
'externalNumber' => '0443334023',
'ivrName' => 'confirmation-call'
));
if ($result['status'] === 'success') {
var_dump($result);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
звонок с голосовым меню.
Query Parameters
Parameter | Required | Description |
---|---|---|
externalNumber | yes | Телефонный номер |
ivrName | yes | Имя голосового меню |
rewriteInternalNumber | no | для изменения отображения "Кто звонил" в MyBusiness |
HTTP full path
https://api.binotel.com/api/4.0/calls/call-with-interactive-voice-response.json
REST API: SETTINGS
Настройки виртуальной АТС Binotel.
list-of-employees
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('settings/list-of-employees', array());
if ($result['status'] === 'success') {
var_dump($result['listOfEmployees']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
The above command returns JSON structured like this:
{
"status": "success",
"listOfEmployees": {
"al1985@urk.net": {
"employeeID": 99132,
"email": "al1985@urk.net",
"name": "Алина",
"mobileNumber": "",
"presenceState": "active",
"department": "Отдел продаж",
"isAdministrator": "0",
"crmIsEnabled": 1,
"chatIsEnabled": 0,
"callCenterIsEnabled": 0,
"language": "",
"endpointData": {
"id": 81190,
"login": "dafc933e",
"internalNumber": "932",
"status": "offline"
},
}
}
Выбор всех сотрудников.
Структура данных списка сотрудников
Parameter | Description |
---|---|
employeeID | идентификатор сотрудника |
email сотрудника | |
name | имя сотрудника |
mobileNumber | мобильный номер сотрудника (в разработке) |
presenceState | статус сотрудника (активен / перерыв в работе / неактивен, используется для функции липкости и модуля Call Center) |
department | название отдела |
isAdministrator | функции администратора |
crmIsEnabled | модуль CRM |
chatIsEnabled | модуль Chat |
callCenterIsEnabled | модуль Call Center |
language | язык интерфейса MyBusiness |
endpointData | информация о SIP устройстве сотрудника |
endpointData[id] | идентификатор SIP устройства |
endpointData[login] | логин SIP устройства |
endpointData[internalNumber] | внутренний номер сотрудника (пример: 902) |
endpointData[status] | состояние внутренней линии сотрудника (online - онлайн, inuse - разговаривает, ringing - совершается вызов на эту линию, offline - офлайн) |
HTTP full path
https://api.binotel.com/api/4.0/settings/list-of-employees.json
list-of-routes
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('settings/list-of-routes', array());
if ($result['status'] === 'success') {
var_dump($result['listOfRoutes']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
The above command returns JSON structured like this:
{
"status": "success",
"listOfRoutes": {
"routeWithTime": {
"193249": {
"id": 193249,
"name": "Время работы отдела продаж",
"description": ""
},
},
"route": {
"377010": {
"id": 377010,
"name": "Рабочее время",
"description":""
},
"377012": {
"id": 377012,
"name": "Нерабочее время",
"description":""
}
}
},
}
Выбор всех сценариев для обработки входящих звонков.
Структура данных списка сценариев
Parameter | Description |
---|---|
routeWithTime | временной сценарий |
route | сценарий с правилами обработки звонка |
id | идентификатор сценария (внимение, в сценариях route и routeWithTime могут быть одинаковые идентификаторы) |
name | имя сценария |
description | информация о сценарии |
HTTP full path
https://api.binotel.com/api/4.0/settings/list-of-routes.json
list-of-voice-files
<?php
require_once(__DIR__ .'/BinotelApi.php');
$key = '6po1f4-7oPzCo1';
$secret = '8weKdP-o2b12d-f6a2P8-eBw4c4-0d2g88wb';
$api = new BinotelApi($key, $secret);
$result = $api->sendRequest('settings/list-of-voice-files', array());
if ($result['status'] === 'success') {
var_dump($result['listOfVoiceFiles']);
} else {
printf('REST API ошибка %s: %s %s', $result['code'], $result['message'], PHP_EOL);
}
The above command returns JSON structured like this:
{
"status": "success",
"listOfVoiceFiles": {
"45529": {
"id": 45529,
"name": "Стандартное приветствие в рабочее время",
"type": "greeting"
},
"46517": {
"id": 46517,
"name": "Приветствие в не рабочее время",
"type": "off-hoursvm"
},
"46890": {
"id": 46890,
"name": "Извините, все операторы заняты",
"type": "sorryvm"
}
}
}
Выбор всех голосовых сообщений.
Структура данных списка голосовых сообщений
Parameter | Description |
---|---|
id | идентификатор голосового файла |
name | имя голосового файла |
type | тип голосового файла (в разработке) |
HTTP full path
https://api.binotel.com/api/4.0/settings/list-of-voice-files.json
REST API: Common problems
REST API: List of errors
Error Code | Meaning |
---|---|
102 | No such method |
103 | Not enough data |
104 | Wrong data |
105 | Something went wrong |
106 | Requests are too frequent |
120 | Your company is disabled |
121 | Your key or secret is wrong |
150 | Can't call to the ext |
151 | Can't call to the external number |