# FAX API

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MJ13BxO0xF3OPYCi9I1%2F-MJ13IkJHMXTfrfV9Lzk%2F2020-10-07_10-55-25.jpg?alt=media\&token=97d53716-de0f-4136-b125-e829efcbcf8a)

## API управления

\
\
Внешние системы должны обращаться на адрес http(s)://fqdn\_ws\_role/api/token/v1/{token}/files/{command}

* **fqdn\_ws\_role** - адрес URL роли WS (Веб-сервера управления)
* **{token}** - значение локального токена из созданного публичного канала
* **{command}** - команда управления (описаны ниже)

## Команды управления

### Загрузка файлов в домен

#### upload

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MP0v_a_g5xgFAw1xaeE%2F-MP0wCT3BJG3onLqRyrf%2F2020-12-20_23-56-36.jpg?alt=media\&token=5f3bf124-9d71-4bc2-88a1-a4b47e313c8d)

&#x20;http(s)://fqdn\_ws\_role/api/token/v1/{token}/files/upload\
&#x20;**Метод** - POST\
&#x20;**Content-Type** - multipart/form-data\
&#x20;**Body** -  Form  \
\
В ответе json приходит результат загрузки файла. \
\
Успешный ответ содержит "resultcode": 0, "resultmsg": "OK". \
\
Пример успешного ответа:

```
{
"resultcode": 0,
"resultmsg": "OK",
"data":{
"upload":[
{
"name": "002.mp3",
"res": "ok"
}
]
}
}
```

Неуспешный ответ содержит код ошибки и ее описание.

&#x20;Пример неуспешного ответа:

```
{ 
 "resultcode": 1501,
  "resultmsg": "Not enough free disk space"
 }
```

&#x20;

### Получение списка файлов.&#x20;

#### list

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MJ1_KnPUh1H4tJkXUv0%2F-MJ1gRLeeyf7xMj7ZdwG%2F2020-10-07_13-53-13.jpg?alt=media\&token=8a73d93c-d86f-427a-84ae-4a74d28d1493)

&#x20;http(s)://fqdn\_ws\_role/api/token/v1/{token}/files/list

Метод - GET

&#x20;В ответе json с полным списком файлов следующего вида

```
{
 "resultcode": 0,
  "resultmsg": "OK",
   "data": { "files": [ 
   {
    "file": {
     "name": "205-a10-02.zip"
    }
     },
      { 
      "file": {
       "name": "queue_wait_sgk.mp3" 
       }
      }
    ] 
  } 
}
```

### Скачивание файла в браузере.

#### download

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MJ1_KnPUh1H4tJkXUv0%2F-MJ1gE3zOSd7J9jZtRAo%2F2020-10-07_13-52-12.jpg?alt=media\&token=15c48d27-ef61-4332-a7ca-4a4d2194dae9)

&#x20;http(s)://fqdn\_ws\_role/api/token/v1/{token}/files/download?file={filename}

&#x20;Метод - GET\
{filename} - имя файла для скачивания

Пример успешного ответа:

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MP0v_a_g5xgFAw1xaeE%2F-MP0x1p6qKDyXIqN1nAk%2F2020-12-20_23-59-56.jpg?alt=media\&token=35bea4ac-80a1-4262-87c8-1b6c6b5defc2)

{% hint style="info" %}
Скачанный файл будет иметь название **download** и не будет иметь расширения.\
Чтобы открыть этот файл нужно будет изменить его расширение на указанное в запросе.
{% endhint %}

### &#x20;Удаление файла.

#### delete

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MJ1_KnPUh1H4tJkXUv0%2F-MJ1glZ42RBd3jTsRVoX%2F2020-10-07_13-54-39.jpg?alt=media\&token=7a89f016-6ffa-44dd-9db1-708f95b5a9e9)

&#x20;http(s)://fqdn\_ws\_role/api/token/v1/{token}/files/delete?file={filename}<br>

Метод - GET\
{filename} - имя файла для удаления

Хранение файла и получение доступа из сценариев Файл хранится в директории **fsync** домена в поддиректории **/data/tokens/**.

Пример ...**/syncfolder/domains/domain.demo.axatell/data/tokens/205-a10-02.zip**\
Для получения доступа к файлу в IVR/SVC сценарии можно через формирования пути к файлу следующего вида:

путь = syn\_domain()\
файл = tokens/205-a10-02.zip

&#x20;Пример получения файла в Выражениях Сценария:

&#x20;makepath(syn\_domain(),"tokens/002.mp3")

* 002.mp3- имя файла
* tokens - константа имени каталога

Результат успешного выполнения:

```
{
"resultcode": 0,
"resultmsg": "OK"
}
```

### Отправка факса

#### sendfax

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MMuEr3QKRZnkTiREc4g%2F-MMuFStN6iw5SKHNBxij%2F2020-11-24_15-36-08.jpg?alt=media\&token=4fbc0838-a37d-4c48-8b96-ca6b2351fb7a)

http(s)://fqdn\_ws\_role/api/token/v1/{token}\
\
Метод - POST\
Content-Type - application/json

* **action** - действие, которое нужно совершить над списком факсов (sendfax — отправить)
* **recipient** - получатель факса
* voiceDocumentSID- <необязательный параметр> — идентификатор предварительно загруженного голосового файла
* **terminalId** - идентификатор телефонного номера, который будет назначен в качестве номера-отправителя
* **attachment** - идентификатор предварительно загруженного файла в формате TIF
* **sip** - ответ провайдера описан в соответствии с стандартом&#x20;

{% content-ref url="../../sip-otvety-i-ikh-znacheniya" %}
[sip-otvety-i-ikh-znacheniya](https://help.axatel.by/sip-otvety-i-ikh-znacheniya)
{% endcontent-ref %}

* **status** - статус отправки факса
* **error** - содержит описание ошибок при отправке факса: "файл не найден", "номер не соответствует маске"

Пример:

```
{
 "action":"sendfax",
 "recipient": 375291554499,
 "voiceDocumentSID":"002.mp3"
 "terminalId": 301
 "attachment":"123123.tif"
 }
 

```

&#x20;

Пример успешной отправки:

```

"sip_code": "200",
"success": "true",
"error": "null",
"status": "sent"
}
```

Допускается отправка сообщения через pop протокол.\
Для реализации требуется передавать сообщение с темой письма содержащий номер телефона и 1 приложением файла в формате TIF.\
На сервере предварительно настраивается маска с именем отправителя с которым разрешена отправка сообщения **user{mask}@fqdn**\
После отправки приходить ответное сообщение с статусом отправки на обратный e-mail адрес.

### Инициализация базы данных

#### init\_fax

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MP0yYPXbIUvE5-FSBiE%2F-MP0zHIz7VkxvK2bwrBW%2F2020-12-20_23-52-04.jpg?alt=media\&token=e644ce7f-b1c0-4ebf-b980-ada6a236d349)

&#x20;

{% hint style="info" %}
Требуется выполнить для первично инициализации
{% endhint %}

&#x20;http(s)://fqdn\_ws\_role/api/token/v1/{token}\
&#x20;**Метод** - POST\
&#x20;**Content-Type** - application/json\
&#x20;**Body** -  Text &#x20;

* **action** - константа
* **domain** - имя текущего домена
* &#x20;**drop** - true = удалить если ранее было созданы схемы и таблицы, false = не удалять ничего

Пример:

```
{
  "action":"init_fax",  
  "domain":"domain.a1.axatel.by",    
  "drop":"true"    
}
```

Ответ успешного выполнения:

```
{
"received": true
}
```

### Запрос информации по факсам

#### fax\_history

![](https://998883843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBugD3PIZvmw6JbYwCi%2F-MP0yYPXbIUvE5-FSBiE%2F-MP10khjg7fpDv1taRZY%2F2020-12-20_23-51-54.jpg?alt=media\&token=257179bd-e531-4b47-aaca-c3044226a273)

http(s)://fqdn\_ws\_role/api/token/v1/{token}\
\
Метод - **POST**\
Content-Type - **application/json**

**Body:**

* **action** - константа
* "**type-** тип incoming | outgoing
* **from\_dt**:"2020-12-16 20:00", //время UTC начала списка. Может быть дата или дата-время
* **till\_dt**- время UTC окончания списка. Может быть дата или дата-время
* **fields**- *список полей, которые выводить, можно указывать через запятую.*

  * **\*** - вывести все поля
  * id&#x20;
  * type
  * remotenum
  * start\_dt
  * stop\_dt
  * result
  * url

Пример запроса:

```
{
  "action":"history", 
  "type":"outgoing",   
  "from_dt":"2020-12-16 20:00", 
  "till_dt":"2020-12-20 23:30",  
  "fields":"*"		
}
```

Пример успешного вывода:

```
{
"data":[
{
"id": "940fbbf2-0176-81d6-990b-005056011d6c",
"type": "outgoing",
"remotenum": "3880456",
"start_dt": "2020-12-20T20:28:13.84",
"stop_dt": "2020-12-20T20:28:30.38",
"result": "success",
"url": "https://domain.a1.axatel.by/callrecords/domains/demo.a1.axatel.by/data/fax/outgoing/mtu1otezoty1nw53d5.tiff"
},
]
}
```

### Описание поля Result

**success** - успешная обработка\
**failed** - ошибка \
**receiving** - в процессе приемки \
**dialing** - набор номера \
**sending** - процесс отправки
