BB_gears390.jpg

API

На сегодняшний день мы поддерживаем два способа интеграции приложений, WebSocket API позволит вам создавать веб приложения для управления звонками в реальном режиме времени, а HTTP API предназначено для получения и обработки статической информации.

Все примеры websocket api приведенные ниже работают с библиотекой api.onlinepbx.ru/lib/onpbx_ws_api_2.js

onpbx.connect({параметры}) - Инициализация подключения

{ // параметры
     domain : "demo.onpbx.ru", // [обязательно] Доменное имя для подключения
     key : "123",              // [обязательно] API ключ
     secure : true,            // Использовать шифрование. Значения true | false. По умолчанию true
     port : 8093               // Порты используемые для подключения 8093 (с шифрованием) и 8094 (без шифрования)
}

onpbx.connected - Переменная содержит сстатус подключения к WS:// ( true | false )

onpbx.command("команда", {параметры}, [колбэк функция])

"make_call" - совершить звонок
{ // параметры
     from : "77777777777",              // [обязательно] Кто (номер абонента или внешний)
     to : "88001006729",                // [обязательно] Кому соединить (любой номер)
     from_orig_number : "88001006729",  // Номер, который высветится у вызываемого
     from_orig_name : "onlinePBX inc.", // Имя, который высветится у вызываемого
     domain_to : "example.onpbx.ru",    // Домен, на который нужно отправить звонок по умолчанию совпадает с доменом звонящего
     from_name : "Vasya",               // Имя, которое высветится у того, для кого вызываем
     gate_from : "73432048020",         // Транк для звонка вызываемого (если не указан, то выбирается автоматически
                                        // в соответствии с правилами набора, если указан то правила игнорируются
                                        // и изменения номера не производится.)
     gate_to : "73432048020"            // Транк для звонка тому, с кем нужно соединить
}
"transfer" - перевод активной сессии на другой номер
{ // параметры
     uuid : "19ff59fb-2cfc-1230-66b7-00199988ac0c",   // [обязательно] uuid сессии
     to : "222",                // [обязательно] куда нужно перевести (любой номер)
     gate_to : "73432048020"    // Аналогично make_call
     domain_to : "73432048020"    // Аналогично make_call
"bridge" - соединение двух активных сессий
{ // параметры
     uuid : "19ff59fb-2cfc-1230-66b7-00199988ac0c",   // [обязательно] uuid сессии
     to_uuid : "c519f6b8-283f-4c1b-bfec-5042a1592d68",   // [обязательно] uuid второй сессии
}
"eavesdrop" - подключение к активной сессии для прослушки
{ // параметры
     uuid : "19ff59fb-2cfc-1230-66b7-00199988ac0c",  // [обязательно] uuid сессии к которой нужно подключиться
     from : "222",    // [обязательно] внутренний или внешний номер
     gate_from : ""   // Аналогично make_call
}
"hangup_call" - завершение звонка
{ // параметры
     uuid : "19ff59fb-2cfc-1230-66b7-00199988ac0c",  // [обязательно] uuid сессии
}
"subscribe" - изменение подписки на события
{ // параметры
     events : { // [обязательно] объект событий для изменения, либо строка 'list' для вывода списка.
                // Ниже указаны параметры по умолчанию, не забудьте включить нужный:
          'calls':false,        // Каналы / звонки
          'blf':true,           // Статусы абонентов
          'messages':false,     // Сообщения
          'callback':true,      // Колбэк строчка
          'api':false,          // Функция в разработке
          'registration':false  // Регистрации
     }
}
"reboot_phone" - перезагрузить телефон (работает только на cisco и некоторых yealink)
{ // параметры
     num : "222",          // [обязательно] номер телефона
     model : "yealink"     // модель телефона ( yealink | cisco)
}
"restart_gate" - перезагрузить транк
{ // параметры
     num : "73432048020"   // - [обязательно] номер транка
}
"sip_message" - отправить sip сообщение (не поддерживается некоторыми телефонами и веб-клиентами)
{ // параметры
     num : "222",          // [обязательно] номер телефона
     text : "Hello World!" // [обязательно] текст сообщения (максимум 200 символов)
}
"flush_reg" - удалить регистрацию абонента (не сможет принимать звонки до повторной регистрации)
{ // параметры
     num : "222"           // [обязательно] номер телефона
}
"trunk_list" - список транков и их состояние (нет параметров)
data:[ // переменная data в колбэк функции
     {
         extension:"88001006729",    // Номер транка
         desc:"zebra",               // Название транка
         dest:"6201",                // Номер назначения в АТС
         uri:"005815@sip.zebra.ru",  // SIP адрес
         status:"REGED"              // статус регистрации
     }
]
"user_list" - список зарегистрированных пользователей (нет параметров)
data:[ // переменная data в колбэк функции
     {
          name:"Vyacheslav",          // Имя пользователя
          local_ip:"172.27.0.58",     // Локальный адрес
          local_port:"5060",          // Локальный порт
          exp:1375525567000,          // UNIX timestamp времени когда закончится регистрация
          realm:"example.onpbx.ru",   // SIP домен
          uid:"222",                  // Внутренний номер
          ip:"213.222.45.85",         // Внешний адрес
          port:"5060",                // Внешний порт
          agent:"Cisco/SPA303-7.4.9c" // Устройство пользователя
     }
]
"message" - рассылка сообщения другим подключенным клиентам в этом домене
{ // параметры
     data : "Hi All!" // [обязательно] информация, которую нужно отправить (строка, объект или число)
     target : "domain" // По умолчанию - 'domain'. Допустимо два значения :
                       // 'domain' - отправит сообщение всем в пределах домена и
                       // 'browser' - отправит сообщения во все открытые вкладки отправителя
}

onpbx.on("событие", function(data){...})

"connect" - Событие о подключении к WS://
data:{
  // undefined
}
"disconnect" - Событие о отключении от WS://
data:{
  // undefined
}
"blf" - состояние абонентов (в сети, разговаривает, звонит)
data:{
     uid:"204",        // Внутренний номер пользователя
     status:"ringing", // Статус (событие)
     direction:"out",  // Направление звонка ("in" / "out")
     rank:"master",    // Приоритет вкладки в браузере ("master" / "slave"). Master всегда только одна, остальные slave.
     other_leg:"73432048020",      // Второй Участник
     uuid:"22c9e591-3784-4c64-8ebf-c8bfcef17776",    // Уникальный идентификатор сессии
     timestamp: 1452498750 //Время создания эвента (в формате UNIX timestamp - http://www.unixtimestamp.com/index.php)
}
"registration" - попытки регистрации пользователей
data: {
     uid: 201,       // Номер пользователя
     agent: "Cisco SPA303-g2", // Устройство пользователя
     state: "register", // Состояние регистрации:
                        // "pre_register" - первичный запрос на регистрацию
                        // "register_attempt" - запрос с логином/паролем
                        // "register" - регистрация прошла успешно
     ip : "8.8.8.8", // Внешний IP адрес устройства
     port : 5060,    // Внешний порт
     expires : 3600  // Секунд до окончания регистрации
}
"channel_create" - создание нового канала
data: {
	 uuid: "5dc1cdca-9e80-4b94-9633-asdasdadasa", // Идентификатор канала
	 direction: "inbound", // "Направление канала" относительно АТС. (inbound/outbound)
	 created_stamp: 1440864124272, // Время создания канала в формате unix timestamp
	 state: "CS_INIT", // Состояние канала
	 endpoint: "9090001122", // Конечная точка
	 domain: "example.onpbx.ru", // SIP Домен
	 caller_number: "9090001122", // номер звонящего
	 caller_name: "9090001122", // Имя звонящего
	 destination_number: "555", // Номер назначения
	 destination_host: "555.127.255.XXX", // SIP Домен назначения
	 gate: "4951112233", // Транк (номер телефона)
	 diversion: "555@XXX.145.43.XXX:5061" // RDNIS промежуточный номер при переадресации
}
"channel_destroy" - удаление канала
data: {
     uuid : "22c9e591-3784-4c64-8ebf-c8bfcef17776", // Идентификатор канала
     direction : "inbound",             // "Направление канала" относительно АТС. (inbound/outbound)
     created_stamp : "1375466463124",   // Время создания канала в формате unix timestamp
     state : "CS_DESTROY",              // Состояние канала
     endpoint : "222@example.onpbx.ru", // Конечная точка в АТС
     hangup_cause : "NORMAL_CLEARING"   // Причина завершения звонка - http://api.onlinepbx.ru/lib/hangup_cause.js
}
"channel_answer" - канал перешёл в состояние отвеченных
data: {
     uuid : "22c9e591-3784-4c64-8ebf-c8bfcef17776", // идентификатор канала
     answered_stamp : "1375466463124",              // время ответа (таймстамп)
     read_codec : "PCMU",    // кодек приема
     read_rate : "8000",     // частота приёма
     read_bitrate : "64000", // битрейт приёма
     write_codec : "PCMA"    // кодек отправки
     write_rate : "8000",    // частота отправки
     write_bitrate : "64000" // битрейт отправки
}
"channel_bridge" - соединение каналов
data: {
     aleg_uuid: "22c9e591-3784-4c64-8ebf-c8bfcef17776", // uuid А ноги
     bleg_uuid: "129d1446-0063-122c-15aa-001a923f6a0f" // uuid Б ноги
}
"channel_application" - выполнена команда на канале
data:{
     uuid : "22c9e591-3784-4c64-8ebf-c8bfcef17776", // - идентификатор канала
     application : "transfer", // Пока поддержевается только один тип команды, в будущем будут еще.
     application_data : { ... } // Аргументы команды
}

Подключение, звонки и события - api.onlinepbx.ru/example/ws_connect_call.html

HTTP API onlinePBX по принципу авторизации похож на Amazon REST API. API ключ полученный вами в панели управления используется для получения закрытого ключа и его идентификатора, все дальнейшие запросы не связанные с авторизацией должны осуществляются при помощи них. Перед отправкой запроса вам необходимо подсчитать хеш сумму (подпись) отправляемого вами запроса, при помощи закрытого ключа и передать сообщение с этой подписью и идентификатором закрытого ключа. Также необходимо добавить специальные HTTP заголовки в запрос. В свою очередь на нашем сервере, мы также подсчитываем хеш сумму принятого сообщения и сравниваем с переданной вами. Таким способом гарантируется целостность данных и защита от подделки запроса в процессе передачи.Подробнее рассмотреть механизм работы API вы можете в одной из наших библиотек, указанных ниже. Тело запроса должно быть в формате "application/x-www-form-urlencoded".

Получение ключа

Запрос
GET:
POST:
api.onlinepbx.ru/example.onpbx.ru/auth.json
{
     auth_key : "ouetgs3t2g6423ps747vnfuf83tfw2", // [обязательно] API ключ
     new : true // параметр указывающий на необходимость обновления ключа, обязательное значение "true"
}
Ответ
JSON:
{
     "status":1,
     "comment":"",
     "data":{
          "key":"e6c3dauhy56k637k467k4fb1f1c676612dbc1df2h0bgi2bn2bp8uf03rfygf83...", // Ключ для дальнейшей работы с API
          "key_id":"f23g24g4j567l6468l2grfg24h4ed541"  // Идентификатор ключа
     }
}

Мгновенные

Запрос
GET:
POST:
api.onlinepbx.ru/example.onpbx.ru/call/now.json
{
     from : "2222222",          // [обязательный] Кто, первый вызываемый номер (любой)
     to : "7777777777",         // [обязательный] Кому, второй вызываемый номер (любой)
     gate_from: "73432048020",  // Номер транка для первого номера
     gate_to : "3509907",       // Номер транка для второго номера
     to_domain : "example.onpbx.ru",   // Указываете домен на который должен быть совершен звонок (для прямых звонков)
     from_orig_number : "77777777777", // Телефонный номер который увидит первый вызываемый номер
     from_orig_name : "Best inc."      // Имя пользователя которое увидит первый вызываемый номер
}
Ответ
JSON:
{
     "status":"1",
     "comment":"",
     "data":""
}

Отложенные

Отложенные звонки обрабатываются раз в 5 минут. Поэтому если назначить звонок через 2 минуты, то он может состояться в любой момент в промежутке от 2 до 5 минут. Если отложить звонок больше чем на 5 минут, то он произойдёт вовремя — разница во времени не больше нескольких секунд.

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/call/later.json
{
     from : "2222222",          // [обязательный] Кто, первый вызываемый номер (любой)
     to : "7777777777",         // [обязательный] Кому, второй вызываемый номер (любой)
     gate_from: "73432048020",  // Номер транка для первого номера
     gate_to : "3509907",       // Номер транка для второго номера
     to_domain : "example.ru",  // Указываете домен на который должен быть совершен звонок (для прямых звонков)
     date : "1 Dec 2013 16:50:58 GMT" // Дата в формате (RFC-2822)
}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data":""
}
Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/history/search.json
{
     duration_from : "100",                 // Длительность (всего звонка) от (сек.)
     duration_to : "300",                   // Длительность (всего звонка) до (сек.)
     billsec_from : "100",                  // Продолжительность разговора от (сек.)
     billsec_to : "300",                    // Продолжительность разговора до (сек.)
     date_from : "1 Apr 2013 00:00:01 GMT", // Звонок начался (дата) от (RFC-2822)
     date_to : "1 Apr 2013 23:59:59 GMT",   // Звонок кончился (дата) до (RFC-2822)
     start_date_from : "1 Apr 2013 23:59:59 GMT",   // Звонок начался (дата) от (RFC-2822)
     start_date_to : "1 Apr 2013 23:59:59 GMT",   // Звонок начался (дата) до (RFC-2822)
     end_date_from : "1 Apr 2013 23:59:59 GMT",   // Звонок кончился (дата) от (RFC-2822)
     end_date_to : "1 Apr 2013 23:59:59 GMT",   // Звонок кончился (дата) до (RFC-2822)
     number : "222",                        // По точному номеру
     out_number : "203",                    // По части номера (выдается любой номер содержащий в себе эти цифры).
     type : "inbound"                     // По типу - inbound/outbound/local
     uuid : "73181a6f-17d6-4c91-9222-e871760e544f", // Выдача конкретного звонка по уникальному ID
     uuid_array : ["73181a6f-17d6-4c91-9222-e871760e544f", "ea734b25-a6f5-4557-91b8-7b26088bc748"], // Выдача нескольких звонков по списку ID
     download : true   // Если параметр указан то вместо массива данных будет
                       // возвращен URL для скачивания файла записей звонков.
                       // Если найден 1 звонок, то время жизни ссылки 200 секунд, иначе 1 час.
}
Ответ

JSON:

{
     "status":1,
     "comment":"",
     "data":[{
          "uuid":"73181a6f-17d6-4c91-9222-e871760e544f", // Уникальный идентификатор сессии
          "caller":"203",      // Звонящий
          "from_domain":"test.onpbx.ru",   // Домен звонящего
          "to":"222",          // Кому звонили
          "to_domain":"test.onpbx.ru",   // Домен того, кому звонили
          "gateway":"",        // Транк
          "date":"1353930061", // Дата в формате UNIX timestamp - http://www.unixtimestamp.com/index.php
          "duration":"26",     // Общая длительность звонка
          "billsec":"23",      // Длительность разговора
          "hangup_cause":"NORMAL_CLEARING" // Причина завершения звонка - http://api.onlinepbx.ru/lib/hangup_cause.js
          "type" : "local"  // Тип звонка - inbound/outbound/local
     }]
}
Ответ (при использовании параметра "download")

JSON:

{
     "status":1,
     "comment":"",
     "data":"http://example.com/somefile.zip"
}

Поиск контакта

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/icm/search.json
{
     out_num : "3432048020",    // Внешний номер
     int_num : "222",           // Внутренний номер сотрудника
     date_from : "1 Apr 2013 00:00:01 GMT",          // Дата последнего изменения от (RFC-2822)
     date_to : "1 Apr 2013 23:59:59 GMT",            // Дата последнего изменения до (RFC-2822)
     creation_date_from : "1 Apr 2013 00:00:01 GMT", // Дата создания от (RFC-2822)
     creation_date_to : "1 Apr 2013 23:59:59 GMT",   // Дата создания до (RFC-2822)
}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data": [{
           "out_num":3432048020,
           "out_name":3432048020,
           "num":224,
           "block":0,
           "note":"0",
           "date":1371619021,
           "creation_date":1364812681
     }]
}

Добавить контакт

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/icm/add.json
{
     out_num : "4955055757", // [обязательно] Внешний номер
     out_name : "Pronto",    // Имя контакта
     int_num : "222",        // [обязательно] Внутренний номер сотрудника
     block : "1",            // Защита от изменений 1/0 (включена/выключена)
     note : "Pizza"          // Примечание
}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data":""
}

Изменить контакт

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/icm/edit.json
{
     out_num : "4955055757", // [обязательно] Внешний номер
     out_name : "Pronto",    // Имя контакта
     int_num : "222",        // [обязательно] Внутренний номер сотрудника
     block : "1",            // Защита от изменений 1/0 (включена/выключена)
     note : "Pizza"          // Примечание
} 
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data":""
}

Добавить

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/user/add.json
{
     num : "222",            // [обязательно] Внутренний номер пользователя
     pass : "2vbub293jidm2", // [обязательно] Пароль
     name : "Vyacheslav",    // Имя (латинскими буквами)
     delay1 : "30",          // Задержка 1
     tr1 :    "223",         // Номер при недоступности 1
     delay2 : "30",          // Задержка 2
     tr2 :    "224",         // Номер при недоступности 2
     delay3 : "30",          // Задержка 3
     tr3 :    "3432048020"   // Номер при недоступности 3
}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data":""
}

Изменить

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/user/edit.json

{
     num : "222",            // [обязательно] Внутренний номер пользователя
     pass : "2vbub293jidm2", // [обязательно] Пароль
     name : "Vyacheslav",    // Имя (латинскими буквами)
     delay1 : "30",          // Задержка 1
     tr1 :    "223",         // Номер при недоступности 1
     delay2 : "30",          // Задержка 2
     tr2 :    "224",         // Номер при недоступности 2
     delay3 : "30",          // Задержка 3
     tr3 :    "3432048020"   // Номер при недоступности 3
}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data":""
}

Получить

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/user/get.json

{
     num : "222"            // [обязательно] Внутренний номер пользователя
}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data": {
        name : "Vyacheslav",    // Имя (латинскими буквами)
        delay1 : "30",          // Задержка 1
        tr1 :    "223",         // Номер при недоступности 1
        delay2 : "30",          // Задержка 2
        tr2 :    "224",         // Номер при недоступности 2
        delay3 : "30",          // Задержка 3
        tr3 :    "3432048020"   // Номер при недоступности 3
     }
}

Получить список внутренних номеров пользователей

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/user/get.json

{

}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data": [
        "222",
        "223",
        "224",
        "225",
        "250",
        "301",
        "102",
        "111"
     ]
}

Загрузить PDF на сервер

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/fax/upload.json
{
     line : "30",                // [обязательно] Внутренний номер факс линии
     file : "@/temp/fax30.pdf",  // [обязательно] Наша библиотека обратится к файлу на вашем сервере
                                 // и перекодирует его в base64, после чего отправит его на наш сервер

}
Ответ

JSON:

{
     "status":"1",
     "comment":"",
     "data":""
}

Получить список очередей

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/queues/list.json
      // Параметры отсутствуют
Ответ

JSON:

{
  "status":1,
  "comment":"",
  "data":{
    "queues":[
        {
          "id":"6",  // Идентификатор очереди
          "name":"test for all", // Название очереди
          "active":"0", // Статус очереди ("1"-активирована/ "2"-не активирована)
          "operators":["201","202","203","204","204"] // Массив операторов
        },
        {
          "id":"23",
          "name":"test prefill",
          "active":"0",
          "operators":["202","203"]
        }
    ]
  }
}

Создать очередь

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/queues/add.json
{
  title : "название"
  operators : [201,202,203], // массив операторов
  active : 1,  // Статус очереди ("1"-активирована/ "2"-не активирована)
  fields :  [{ // Массив  полей
      id: "some_id",  // Идентификатор поля
      name : "Ф.И.О." ,  // Название поля
      type : "input",  // Тип поля
      hint : "Иванов Иван Иванович",  // Подсказка
      select  : "" // Дополнительное для поля
  }],
  clients : [{ // Массив клиентов
    state : "0", // Состояние 0-4 (0 - ждёт обработки, 1 - в обработке, 2 - лид, 3 - отказ, 4 - не отвечает)
    number : ["8800106728","2222222"], // Массив телефонных номеров
    operator : [201,202,203], // Массив операторов для этого клиента
    call_on :  1364812681, // Время, до которого клиент считается неактивным (в виде timestamp)
    call_uuid : "", // Идентификатор последнего звонка клиенту
    имя поля : // Значение
  }]
}
Ответ

JSON:

{
  "status": "1",
  "comment": "",
  "data": {id: 5} // Идентификатор очереди
}

Получить очередь

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/queues/[id]/export.json
{
  fetch_clients : 1, // 1 или 0. выводить/не выводить клиентов, необязательный.
  export_type : "json" // json или csv. формат, обязательный.
}
Ответ

JSON:

{
  "status": "1",
  "comment": "",
  "data": {
    "title":"Пробная очередь", // Название очереди
    "operators":["201","202"], //Операторы
    "active":"0",  // Статус
    "fields":[   // Массив с полями
      {
        "id":"editable",
        "name":"Редактируемое поле",
        "type":"input",
        "hint":"подсказка"
      },
      {
        "id":"something",
        "name":"Ещё одно поле",
        "type":"select",
        "select":{
            "test1": "Вариант 1",
            "test2": "Вариант 2",
            "test3": "Вариант 3"
        }
      },
      {
        "id":"field1",
        "name":"Первое статик-поле",
        "type":"static",
        "hint":""
      },
      {
        "id":"site",
        "name":"Веб-сайт",
        "type":"static",
        "hint":""
      },
      {
        "id":"field1",
        "name":"field1",
        "type":"static",
        "hint":""
      },
      {
        "id":"field2",
        "name":"field2",
        "type":"static",
        "hint":""
      }
    ],
    "clients":[ // Массив с клиентами
      {
        "state":"2",
        "number":["123456789"],
        "operator":"201",
        "test1":"значение1",
        "test2":"значение2",
        "test3":"значение3",
        "call_on": 1400248569,
        "call_uuid":"a4cc1003-97d7-4790-b7ea-a3766c54e743"
      }
    ]
  }
}

CSV:

{
  "status":1,
  "comment":"",
  "data":  "state;num;operator;test1;test2;test3;call_on;call_uuid
            2;0123456789;201;value1;value2;value3;1400228456;b9f076d6-a152-4581-a064-7cff4309c510
            1;9876543210;202;value1;value2;value3;1400248569;a4cc1003-97d7-4790-b7ea-a3766c54e743
            1;0123698745;203;value1;value2;value3;1400475182;4152a0ea-c050-4e7c-8afb-695fc11c89b7"
}

Импортирует клиентов в очередь

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/queues/[id]/import.json    //([id] - идентификатор очереди очереди)
// Для JSON >>
{
  format:"json", // Формат импортируемых данных csv или json
  clients : [{
    number : ["88001006728","2222222"], // Массив с телефонами
    operator : 201, // Добавочный номер оператора за которым закреплен данный клиент
    state : 0, // Состояние клиента 0-4 (0 - ждёт обработки, 1 - в обработке, 2 - лид, 3 - отказ, 4 - не отвечает)
    field1 : "Значение поля 1",  // Кастомные поля
    field2 : "Значение поля 2",
  }]
}

// Для CSV >>
{
  format:"csv", // Формат импортируемых данных csv или json
  csv :"state;num;operator;test1;test2;test3;call_on;call_uuid
        2;0123456789;201;value1;value2;value3;1400228456;b9f076d6-a152-4581-a064-7cff4309c510
        1;9876543210;202;value1;value2;value3;1400248569;a4cc1003-97d7-4790-b7ea-a3766c54e743
        1;0123698745;203;value1;value2;value3;1400475182;4152a0ea-c050-4e7c-8afb-695fc11c89b7"
        // CSV строка

}
Ответ

JSON:

{
 "status": "1", // 1 или 0 (выполнено/не выполнено)
 "comment": "",
 "data": ""
}

Активировать очередь

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/queues/[id]/start.json    //([id] - идентификатор очереди очереди)
      // Параметры отсутствуют
Ответ

JSON:

{
 "status": "1", // 1 или 0 (выполнено/не выполнено)
 "comment": "",
 "data": ""
}

Остановить очередь

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/queues/[id]/stop.json    //([id] - идентификатор очереди очереди)
      // Параметры отсутствуют
Ответ

JSON:

{
 "status": "1", //
 "comment": "",
 "data": ""
}

Удалить очередь

Запрос

GET:
POST:

api.onlinepbx.ru/example.onpbx.ru/queues/[id]/delete.json    //([id] - идентификатор очереди очереди)
      // Параметры отсутствуют
Ответ

JSON:

{
 "status": "1", //
 "comment": "",
 "data": ""
}

Пример на PHP

Библиотека api.onlinepbx.ru/lib/onpbx_http_api.php_v1.1.zip

// Подключаем библиотеку
require_once './onpbx_http_api.php';

// Получение секретного ключа
$domain = 'demo.onpbx.ru';        // Ваш SIP домен
$apikey = '56ofsz1scn3r790324l4fw2843597822';      // API ключ, возьмите его из панели управления
$new = false;                     // указание на обязательное получение нового ключа
$data_key_array = onpbx_get_secret_key($domain, $apikey, $new);     // Получаем готовый PHP массив с ключами

// Совершение запросов
$secret_key = $data_key_array['data']['key'];            // Секретный ключ, полученный в предыдущем запросе
$key_id = $data_key_array['data']['key_id'];             // Открытый ключ, точнее его идентификатор
$url = 'api.onlinepbx.ru/'.$domain.'/call/now.json';   // Указываем URL запроса
$post = array('from' => '202', 'to'=>'203');             // Указываем POST данные запроса
$data_array = onpbx_api_query($secret_key, $key_id, $url, $post);   // Получаем готовый массив с ответом

Пример на Javascript

Библиотека api.onlinepbx.ru/lib/onpbx_http_api.js

<!-- Подключаем библиотеку -->
<script type="text/javascript" src="http://api.onlinepbx.ru/lib/onpbx_http_api.js"></script>
<script type="text/javascript" >

// Определяем переменные
var domain = 'demo.onpbx.ru';     // Ваш SIP домен
var apikey = '56ofsz1scn3r790324l4fw2843597822';     // API ключ, возьмите его из панели управления
var new_key = false;              // сгенерировать новый ключ
var secret_key = "";
var key_id = "";

// Получаем секретный ключ и идентификатор
onpbx_get_secret_key(domain, apikey, new_key, function(json){
    if(!json['status']){
            return alert(json['status'] + ':' + json['comment']); //ошибка при получении секретного ключа
    }

    var secret_key = json['data']['key'];   // Секретный ключ
    var key_id = json['data']['key_id'];    // Идентификатор ключа

        // Определяем переменные запроса
        var url = 'api.onlinepbx.ru/' + domain + '/call/now.json';    // Указываем URL запроса
        var post = {'from':'202', 'to':'203'};                       // Указываем POST данные запроса

        // Объявляем callback функцию которая будет вызвана после получения ответа от сервера.
        function query_callback(json){ alert(json['status'] + ':' + json['comment']); }

        // Совершаем запрос
        onpbx_api_query(secret_key, key_id, url, post, query_callback );   // Получаем готовый объект с ответом

});
</script>

      

Пример правильного запроса

POST /demo.onpbx.ru/history/search.json HTTP/1.1
Host: api.onlinepbx.ru
Connection: keep-alive
Content-Length: 45
x-pbx-authentication: 6f2437904f1e1697adbcb6578a2cb4b7:YjcwMyh5Mjg3YThhNmI5YjA5YmU4ZTY1YWE3Zh50ZDYu5mZlOGI3OA==
Origin: http://api.onlinepbx.ru
Content-MD5: 0b89d9a9c52a343b8c3f154448793a598
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
x-pbx-date: Mon Aug 05 2013 19:27:42 GMT+0600 (YEKT)
Content-Type: application/x-www-form-urlencoded; charset=UTF-8;
Accept: application/json
Referer: http://example.com/test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

date_from=1%20Aug%202013%2000%3A00%3A01%20GMT
      

Пояснения к примерам

Не запрашивайте ключ при каждом запросе, а только если в ответ получите: {"status":0,"comment":"not authenticated","data":""}
Время жизни секретного ключа 3 дня с момента последнего обращения.
Поддержка HTTPS протокола будет осуществлена в ближайшее время.

Тестовый запрос

Запрос

POST:

{
  "action" : "test" // Тип запроса
}
Ответ

JSON:

{
  "status" : "1" // 1- успешно, 0 - неуспешно
}

Поиск карточки по номеру

Запрос

POST:

{
  "action" : "contact_info", // Тип запроса
  "data" : {
      "phone": "2222222" // Телефонный номер.
                         // Не подлежит какому-либо форматированию с нашей стороны и отправляется ровно
                         // в том формате в котором он был передан оператором связи либо пользователем.
                         // Номера: +7(495)222-22-22, +74952222222, 74952222222, 84952222222,
                         // 8 495 222 22 22, 4952222222, 2222222, 222-22-22, 2222222 доб.211 и т.д,
                         // могут принадлежать одному и тому-же контакту, важно это учитывать.
                         // Оптимальным способом поиска по номеру, считается поиск только по цифрам
                         // начиная с конца номера.
  }
}
Ответ

JSON:

{
  "status" : "1", // 1- успешно, 0 - неуспешно
  "comment" : "", // Комментарий или ошибка
  "data" : {
      "contact" : {
          "id" : "1665", // Идентификатор контакта
          "url" : "http://192.168.0.10/crm/contact.php?id=1665",
                    // Адрес карточки контакта
          "name" : "Иван Иванов", //  Имя, фамилия котакта
          "email" : "ivan@example.com", // Email котакта
          "photo" : "http://192.168.0.10/crm/contact_foto.png?id=1665"
                    // Адрес фото контакта
      }
      "company" : {
          "id" : "1587", // Идентификатор компании
          "url" : "http://192.168.0.10/crm/company.php?id=1587",
                    // Адрес карточки компании
          "title" : "Рога и копыта", // Название компании
          "email" : "info@example.com", // Email компании
          "logo" :  "http://192.168.0.10/crm/company_logo.png?id=1587"
                    // Адрес логотипа компании
      }
      "lead" : {
          "id" : "111", // Идентификатор компании
          "url" : "http://192.168.0.10/crm/lead.php?id=111",
                    // Адрес карточки Лида
          "title" : "Запрос на свинную грудку", // Название лида
          "email" : "info@example.com" // Email компании
      }
      "deal" : {
          "id" : "243", // Идентификатор сделки
          "url" :"http://192.168.0.10/crm/deal.php?id=243",
                    // Адрес карточки Лида
          "title" : "35 Голов быка" // Название сделки
      }
  }
}

Загрузка звонков

Запрос

POST:

{
  "action" : "call_upload", // Тип запроса
  "data" : [{  // Массив звонков
      "id" : "12345",  // Идентификатор звонка в базе
      "uuid" : "73181a6f-17d6-4c91-9222-e871760e544f",  // UUID звонка (для получения записи и поиска через апи)
      "caller" : "+73432048020",  // Номер звонящего
      "callee" : "111",  // Добавочный номер того, кому звонили
      "trunk" : "88001006729",  // Номер транка
      "start_stamp" : "1375466463124",  // timestamp начала звонка
      "duration" : "250",  // Общая продолжительность звонка в секундах
      "billsec" : "220",  // Время разговора после ответа в секундах
      "type" : "inbound"  // Тип звонка - inbound/outbound/local
  }]
}
Ответ

JSON:

{
  "status" : "1", // 1- успешно, 0 - неуспешно
  "comment" : "", // Комментарий или ошибка
  "data" : [{ // Массив с результатами обработки
       "id" : "", // Идентификатор звонка из запроса
       "call_id" : "", // Идентификатор звонка в базе или false
       "lead_id" : "", // Идентификатор лида если создан или false
       "contact_id" : "" // Идентификатор контакта если создан или false
  }]
}

Создание контакта

Запрос

POST:

{
  "action" : "create_contact", // Тип запроса
  "data" : {  // Информация по контакту
      "name" :"", // Имя контакта
      "phone" :"", // Номер телефона
      "comment" :"", // Комментарий
      "company_name" :"" // Имя компании, в которой состоит контакт.
                         // Если такой не существует, то её нужно создать.
}
Ответ

JSON:

{
  "status" : "1", // 1- успешно, 0 - неуспешно
  "comment" : "", // Комментарий или ошибка
  "data" : { // Результат обработки
      "contact_id" : "", // Идентификатор контакта или false
      "company_id" : ""  // Идентификатор компании или false
  }
}

Создание Лида

Запрос

POST:

{
  "action" : "create_lead", // Тип запроса
  "data" : {  // Информация по Лиду
      "name" :"", // Имя контакта
      "phone" :"", // Номер телефона
      "comment" :"", // Комментарий
      "user_id" : "" // Идентификатор пользователя, за которым будет закреплён лид>
}
Ответ

JSON:

{
  "status" : "1", // 1- успешно, 0 - неуспешно
  "comment" : "", // Комментарий или ошибка
  "data" : { // Результат обработки
      "lead_id" : "" // Идентификатор созданного лида или false
  }
}

Показать список пользователей

Запрос

POST:

{
  "action" : "list_users" // Тип запроса
}
Ответ

JSON:

{
  "status" : "1", // 1- успешно, 0 - неуспешно
  "comment" : "", // Комментарий или ошибка
  "data" : [{ // Массив с пользователями
      "id" : "", // Идентификатор пользователя
      "name" : "", // Имя пользователя
      "phone" : "", // Добавочный номер пользователя
      "photo" : "" // Ссылка на фото
  }]
}

Добавить комментарий к звонку

Запрос

POST:

{
  "action" : "comment_call", // Тип запроса
  "data" : {
      "call_id" : "", // Идентификатор звонка в базе
      "text" : "" // Текст коментария
  }
}
Ответ

JSON:

{
  "status" : "1", // 1- успешно, 0 - неуспешно
  "comment" : "" // Комментарий или ошибка
}

	

	
data-атрибуты
	data-onpbxcb-id =  ID виджета. Обязательный параметр.
	data-dest = номер назначения (тогда с этой страницы звонки будут совершаться на другой номер)
	
OnlinePBXWebWidget.expand() - Принудительно развернуть виджет, показав форму ввода номера
OnlinePBXWebWidget.collapse() - Принудительно свернуть развёрнутый виджет
OnlinePBXWebWidget.disable() - Спрятать и запретить разворачиваться
OnlinePBXWebWidget.destroy() - Убрать код виджета из страницы