Хранение и получение записей разговоров

Для получения пользователем АТС файлов записей разговоров существует несколько различных способов:

  1. Использовать ресурс REST API "Записи разговоров". В этом случае для получения файла записи необходима OAuth2-авторизация, такая же как и при использовании остальных ресурсов API. 
    • Данный способ не требует дополнительной настройки
    • Сторонним приложениям, использующим REST API (например, CRM-системам), необходимо проксировать файлы записей через себя, так как для получения файлов требуется OAuth2-авторизация
    • При большом количестве загрузок записей может возрасти нагрузка на канал к серверу, где расположен сервис REST API. Как правило, сервис REST API расположен на одном из серверов, где работают сервисы телефонии.
    • Пример URL для получения записи: https://hostname/api/ver1.0/client/@me/record/30-624835FEEE0E11E6A19D331E4D6A0606

  2. Использовать ресурс REST API для получения файлов записей с базовой аутентификацией. При использовании базовой аутентификации (HTTP Basic authentication) пользователю для получения файла записи потребуется ввести логин и пароль от свой учетной записи.  Механизм базовой аутентификации доступен только для ресурсов файлов записей разговора.
    • Данный способ не требует дополнительной настройки
    • Сторонним приложениям, использующим REST API (например, CRM-системам), не требуется проксировать файлы записей через себя, достаточно будет только сформировать ссылку для пользователя
    • Пользователю будет необходимо вводить логин и пароль для получения файлов записей. Так как большинство браузеров сохраняют данные базовой авторизации на определенный период времени, явный ввод логина и пароля будет необходим не каждый раз при получении записи.
    • При большом количестве загрузок записей может возрасти нагрузка на канал к серверу, где расположен сервис REST API. Как правило, сервис REST API расположен на одном из серверов, где работают сервисы телефонии.
    • Пример URL для получения записи: https://hostname/api/ver1.0/client/@me/record/30-624835FEEE0E11E6A19D331E4D6A0606/download/

  3. Использовать хранилище записей – сторонний веб-сервер, ссылку на который будет генерировать соответствующий ресурс REST API. На сервере хранилища не будет авторизации, а фактический путь к файлу будет зашифрован в ссылке. Ключ шифрования будет разделен между хранилищем и API. При использовании данной схемы приложения, использующие API должны будут получить ссылку на файл в хранилище с помощью соответствующих ресурсов API:

GET /client/{client_id}/record/{record_uuid}/storage_url/

GET /extension_group/{ext_group_id}/record/{record_uuid}/storage_url/

GET /extension/{extension_id}/record/{record_uuid}/storage_url/

Данные ресурсы возвращают ответы вида:
{ "record_url": "http://storage.hostname/bd7zzrXD5395gn7FMgzKtB8zhZnNoYx8BdkX_HgNdeE2lnJjPMLcOR_1hQprGf-dW94wuTCNRAY6MDjMZ0zWIg==" }

Ссылка на хранилище находится по ключу record_url и представляет собой путь к файлу, который зашифрован алгоритмом AES в режиме ECB 32-байтным ключом. Шифруемая строка в конце дополнена символами \0 чтобы её длина была кратна 16.
Таким образом, чтобы на стороне хранилища получить фактическое расположение файла необходимо декодировать ссылку из формата base64 (адаптированного для веб, где символ - вместо символа + и символ _ вместо символа / ), а затем расшифровать шифротекст и обрезать нулевые байты справа. Для пользователя же переход по ссылке из ответа API будет непосредственным скачиванием файла записи разговора.

  • Для использования данного способа необходима дополнительная настройка стороннего веб-сервера
  • Сторонним приложениям, использующим REST API (например, CRM-системам), не требуется проксировать файлы записей через себя, достаточно будет только сформировать ссылку для пользователя
  • Авторизация пользователя при получении файла записи не требуется
  • Если сервера хранилища отделен от севера API, то загрузка записей с хранилища не влияет на канал к серверу, где расположен REST API
  • Пример запроса для получения ссылки на запись:
    Запрос:
    GET https://hostname/api/ver1.0/client/@me/record/30-624835FEEE0E11E6A19D331E4D6A0606/storage_url/
    Ответ:
    { "record_url": "http://storage.hostname/bd7zzrXD5395gn7FMgzKtB8zhZnNoYx8BdkX_HgNdeE2lnJjPMLcOR_1hQprGf-dW94wuTCNRAY6MDjMZ0zWIg==" }

4. Использовать FTP-сервер, который будет настроен так, что при логине пользователя под своими учетным данными, он попадал бы в каталог со своими записями. Путь к файлу относительно каталога клиента может быть получен из специального ресурса API:

GET /client/{client_id}/record/{record_uuid}/path/

    • Для использования данного способа необходима дополнительная настройка стороннего FTP-сервера
    • Сторонним приложениям, использующим REST API (например, CRM-системам), не требуется проксировать файлы записей через себя, достаточно будет только сформировать ссылку для пользователя
    • Пользователю будет необходимо вводить логин и пароль от FTP-сервера для получения файлов записей.
    • Если сервера хранилища отделен от севера API, то загрузка записей с хранилища не влияет на канал к серверу, где расположен REST API
    • Пример запроса для получения пути к записи:

GET /client/@me/record/30-624835FEEE0E11E6A19D331E4D6A0606/path/

Ответ:

{
"record_datetime_gmt": "2017-02-17 11:05:09",
"file_size": 19152,
"filename": "/300/2017-02-17-11-05-04_in_300_uhl4.mp3"
}