# Evolvex API

#### Введение

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

#### Проверка доступа

Проверка доступа

GET /api/index/check

<table border="1" id="bkmrk-" style="border-collapse: collapse; width: 100%; height: 89.1051px;"><colgroup><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col></colgroup><thead><tr style="height: 29.7017px;"><td>Параметр</td><td>Тип</td><td>Обязательный</td><td>Описание</td></tr></thead><tbody><tr style="height: 29.7017px;"><td style="height: 29.7017px;">api\_key</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">API Ключ</td></tr><tr style="height: 29.7017px;"><td style="height: 29.7017px;">context</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Нет</td><td style="height: 29.7017px;">Маршрутизация</td></tr><tr><td>uniqueid</td><td>String</td><td>Нет</td><td>Уникальный идентификатор звонка</td></tr></tbody></table>

Ответ в Json:

```json
{
  "data": {
    "api_user": {
      "uuid": "5485137a-3c6d-454e-9801-d3b875f7a5e0",
      "name": "API",
      "description": "",
      "enable": "yes",
      "api_key": "84f8fc34-82ad-46b0-b5f3-3cfd0462beeb",
      "group_uuid": "4c343af6-4a91-469a-a717-f682e52c830f"
    },
    "access": {
      "uuid": "0eb1bc58-b259-4c88-be02-a059d50cecc3",
      "name": "incoming",
      "description": "Входящая маршрутизация",
      "group_uuid": "4c343af6-4a91-469a-a717-f682e52c830f"
    },
    "file": true
  }
```

#### Получение файла mp3

GET /api/index/get\_file\_mp3

<table border="1" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9E%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5" style="border-collapse: collapse; width: 100%; height: 89.1051px;"><colgroup><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col></colgroup><thead><tr style="height: 29.7017px;"><td>Параметр</td><td>Тип</td><td>Обязательный</td><td>Описание</td></tr></thead><tbody><tr style="height: 29.7017px;"><td style="height: 29.7017px;">api\_key</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">API Ключ</td></tr><tr><td>uniqueid</td><td>String</td><td>Нет</td><td>Уникальный идентификатор звонка</td></tr></tbody></table>

Ответ:

Потоковое аудио

#### Получение файла wav

GET /api/index/get\_file\_wav

<table border="1" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9E%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5-1" style="border-collapse: collapse; width: 100%; height: 89.1051px;"><colgroup><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col></colgroup><thead><tr style="height: 29.7017px;"><td>Параметр</td><td>Тип</td><td>Обязательный</td><td>Описание</td></tr></thead><tbody><tr style="height: 29.7017px;"><td style="height: 29.7017px;">api\_key</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">API Ключ</td></tr><tr><td>uniqueid</td><td>String</td><td>Нет</td><td>Уникальный идентификатор звонка</td></tr></tbody></table>

Ответ:

Потоковое аудио

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

GET /api/index/status

<table border="1" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9E%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5-2" style="border-collapse: collapse; width: 100%; height: 89.1051px;"><colgroup><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col></colgroup><thead><tr style="height: 29.7017px;"><td>Параметр</td><td>Тип</td><td>Обязательный</td><td>Описание</td></tr></thead><tbody><tr style="height: 29.7017px;"><td style="height: 29.7017px;">api\_key</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">API Ключ</td></tr><tr><td>calleridnum</td><td>String</td><td>Нет</td><td>АОН</td></tr><tr><td>connectedlinenum</td><td>String</td><td>Нет</td><td>Соединенная линия</td></tr><tr><td>context</td><td>String</td><td>Нет</td><td>Маршрутизация</td></tr><tr><td>exten</td><td>String</td><td>Нет</td><td>Расширение</td></tr></tbody></table>

Ответ в Json:

```json
{
  "data": [
    {
      "Event": "Status",
      "Privilege": "Call",
      "Channel": "PJSIP/user-00000011",
      "ChannelState": "5",
      "ChannelStateDesc": "Ringing",
      "CallerIDNum": "109",
      "CallerIDName": "",
      "ConnectedLineNum": "110",
      "ConnectedLineName": "",
      "Language": "ru",
      "AccountCode": "",
      "Context": "outgoing",
      "Exten": "109",
      "Priority": "1",
      "Uniqueid": "1711279935.61",
      "Linkedid": "1711279935.60",
      "Type": "PJSIP",
      "DNID": "",
      "EffectiveConnectedLineNum": "110",
      "EffectiveConnectedLineName": "",
      "TimeToHangup": "0",
      "BridgeID": "",
      "Application": "AppDial",
      "Data": "(Outgoing Line)",
      "Nativeformats": "(alaw|ulaw)",
      "Readformat": "alaw",
      "Readtrans": "",
      "Writeformat": "alaw",
      "Writetrans": "",
      "Callgroup": "0",
      "Pickupgroup": "0",
      "Seconds": "5",
      "Variable": "DIALEDPEERNUMBER=user/sip:user@1.1.1.1:5937",
      "DIALEDPEERNUMBER": "user/sip:company@1.1.1.1:5937",
      "ActionID": "66000f44594c1"
    },
    {
      "Event": "Status",
      "Privilege": "Call",
      "Channel": "PJSIP/user",
      "ChannelState": "4",
      "ChannelStateDesc": "Ring",
      "CallerIDNum": "110",
      "CallerIDName": "",
      "ConnectedLineNum": "109",
      "ConnectedLineName": "",
      "Language": "ru",
      "AccountCode": "",
      "Context": "outgoing",
      "Exten": "109",
      "Priority": "7",
      "Uniqueid": "1711279935.60",
      "Linkedid": "1711279935.60",
      "Type": "PJSIP",
      "DNID": "109",
      "EffectiveConnectedLineNum": "109",
      "EffectiveConnectedLineName": "",
      "TimeToHangup": "0",
      "BridgeID": "",
      "Application": "Dial",
      "Data": "PJSIP/user/sip:user@1.1.1.1:5937,60,tT",
      "Nativeformats": "(alaw|ulaw)",
      "Readformat": "alaw",
      "Readtrans": "",
      "Writeformat": "alaw",
      "Writetrans": "",
      "Callgroup": "0",
      "Pickupgroup": "0",
      "Seconds": "5",
      "Variable": "SIPDOMAIN=pbx1.ru",
      "RINGTIME_MS": "298",
      "RINGTIME": "0",
      "PROGRESSTIME_MS": "",
      "PROGRESSTIME": "",
      "DIALEDTIME_MS": "",
      "DIALEDTIME": "",
      "ANSWEREDTIME_MS": "",
      "ANSWEREDTIME": "",
      "DIALEDPEERNAME": "",
      "DIALEDPEERNUMBER": "",
      "DIALSTATUS": "",
      "MIXMONITOR_FILENAME": "/var/spool/asterisk/monitor/1711279935.60.wav",
      "SIPDOMAIN": "pbx1.ru",
      "ActionID": "66000f44594c1"
    }
  ]
}
```

#### Создание звонка

GET /api/index/originate

<table border="1" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9E%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5-3" style="border-collapse: collapse; width: 100%; height: 178.21px;"><colgroup><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col></colgroup><thead><tr style="height: 29.7017px;"><td style="height: 29.7017px;">Параметр</td><td style="height: 29.7017px;">Тип</td><td style="height: 29.7017px;">Обязательный</td><td style="height: 29.7017px;">Описание</td></tr></thead><tbody><tr style="height: 29.7017px;"><td style="height: 29.7017px;">api\_key</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">API Ключ</td></tr><tr style="height: 29.7017px;"><td style="height: 29.7017px;">channel</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">Канал</td></tr><tr style="height: 29.7017px;"><td style="height: 29.7017px;">exten</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">Расширение</td></tr><tr style="height: 29.7017px;"><td style="height: 29.7017px;">context</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">Маршрутизация</td></tr><tr style="height: 29.7017px;"><td style="height: 29.7017px;">priority</td><td style="height: 29.7017px;">Integer</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">Приоритет</td></tr><tr><td>callerid</td><td>String</td><td>Нет</td><td>АОН</td></tr><tr><td>variable</td><td>String</td><td>Нет</td><td>Переменные</td></tr><tr><td>async</td><td>Boolean</td><td>Нет</td><td>Асинхронный ввод</td></tr></tbody></table>

variable - позволяет передать несколько переменных через запятую. Например variable=file=123,idcall=456

#### Загрузка файла

POST /api/index/uploads

<table border="1" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9E%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5-4" style="border-collapse: collapse; width: 100%; height: 178.21px;"><colgroup><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col></colgroup><thead><tr style="height: 29.7017px;"><td style="height: 29.7017px;">Параметр</td><td style="height: 29.7017px;">Тип</td><td style="height: 29.7017px;">Обязательный</td><td style="height: 29.7017px;">Описание</td></tr></thead><tbody><tr style="height: 29.7017px;"><td style="height: 29.7017px;">api\_key</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">API Ключ</td></tr><tr style="height: 29.7017px;"><td style="height: 29.7017px;">file</td><td style="height: 29.7017px;">File</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">Файл</td></tr></tbody></table>

Пример загрузки файла:

```php
$curl_file = curl_file_create("/home/user/test.wav");

$post = array("file"=> $curl_file);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http:/192.168.0.2/pbx/api/index/uploads?api_key=11111111-2222-3333-4444-555555555555");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);
curl_close($ch);
```

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

POST /api/index/get\_log\_cdr

<table border="1" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9E%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5-5" style="border-collapse: collapse; width: 100%; height: 178.21px;"><colgroup><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col><col style="width: 24.9663%;"></col></colgroup><thead><tr style="height: 29.7017px;"><td style="height: 29.7017px;">Параметр</td><td style="height: 29.7017px;">Тип</td><td style="height: 29.7017px;">Обязательный</td><td style="height: 29.7017px;">Описание</td></tr></thead><tbody><tr style="height: 29.7017px;"><td style="height: 29.7017px;">api\_key</td><td style="height: 29.7017px;">String</td><td style="height: 29.7017px;">Да</td><td style="height: 29.7017px;">API Ключ</td></tr><tr style="height: 29.7017px;"><td style="height: 29.7017px;">start</td><td style="height: 29.7017px;">Datetime</td><td style="height: 29.7017px;">Нет</td><td style="height: 29.7017px;">Начало записей логов, если не указано берется начало дня.</td></tr><tr><td>end</td><td>Datetime</td><td>Нет</td><td>Конец записей логов, если не указано берется конец дня.</td></tr></tbody></table>

Ответ в Json:

```
{
  "data": [
    {
      "accountcode": null,
      "src": "79123456789",
      "dst": "110",
      "dcontext": "local-evolvex",
      "clid": "\"Сергей\" <79123456789>",
      "channel": "Local/110@local-evolvex-00000167;2",
      "dstchannel": "PJSIP/user-110-evolvex-000002a0",
      "lastapp": "Dial",
      "lastdata": "PJSIP/user-110-evolvex/sip:user-110-evolvex@1.1.1.1:10110,60,t",
      "start": "2024-10-30 09:59:15",
      "answer": null,
      "end": "2024-10-30 09:59:22",
      "duration": "7",
      "billsec": "0",
      "disposition": "NO ANSWER",
      "amaflags": "DOCUMENTATION",
      "userfield": null,
      "uniqueid": "1730267955.2409",
      "linkedid": "1730267935.2405",
      "peeraccount": null,
      "sequence": "1923",
      "source": null,
      "destination": null,
      "direction": null,
      "group_uuid": null
    }
  ]
}
```