У сервера Октелл есть встроенный веб-сервер. Через него внешняя система обращается к платформе по обычному HTTP: запускает служебные сценарии, узнаёт состояние пользователей и очередей, управляет звонками, скачивает записи разговоров и загружает файлы.
Что делает встроенный веб-сервер
| Задача | Авторизация |
|---|---|
| Обрабатывает запросы Web-API | Базовая, под учётной записью пользователя с привилегией исполнения методов Web-API |
Выдаёт страницы из папки WWW | Не требуется |
| Обслуживает подключения WebSocket — веб-клиент, решения на Oktell.js, интеграционный протокол | Происходит в рамках интеграционного протокола, под учётной записью одного из пользователей |
Служба слушает порты 80 и 4055 — их можно изменить в настройках веб-сервера — и делает это на всех сетевых интерфейсах. Запросы принимаются методами GET и POST; в обоих случаях параметры можно перечислять в URL.
Логином и паролем служат данные любого пользователя с ролевой привилегией исполнения web-api-запросов. Для сервисного доступа создайте отдельную учётную запись: так права легко ограничить, а обращения — отличить от действий живых сотрудников.
http://login:password@192.168.0.1:4055/wp_setuserstate?user=admin&userstateid=5
Запуск служебных сценариев
Основной способ научить платформу чему угодно: сценарий делает работу, HTTP-запрос его вызывает. Код запуска для этого способа — 27.
execsvcscript
| Параметр | Описание |
|---|---|
name | Название служебного сценария; он должен существовать и лежать на сервере в каталоге общих сценариев. |
startparam1 … startparam5 | Стартовые параметры, доступные в сценарии соответствующими функциями. |
async | 0 — синхронно, с ожиданием завершения и возвратом значения; 1 — асинхронно. |
timeout | Только для синхронного режима: предельное время ожидания в секундах. По его истечении ожидание обрывается и ответ возвращается без результата работы сценария. |
В синхронном режиме ответом становится значение, присвоенное служебной переменной «Возвращаемое значение 1». Метод оборачивает его в XML.
execsvcscriptplain
То же самое и с теми же параметрами, но ответ сценария размещается в теле HTTP-ответа без искажений — без XML-обёртки. Это делает метод пригодным для отдачи чего угодно: строки, JSON, готовой HTML-страницы.
| Служебная переменная | Назначение |
|---|---|
| Возвращаемое значение 1 | Тело ответа. |
| Возвращаемое значение 2 | HTTP-ответ; по умолчанию 200. Значение file вернёт ссылку на файл для скачивания. |
| Возвращаемое значение 3 | Дополнительные HTTP-заголовки. |
Как отдать результат сценария без авторизации
WWW
Файлы из папки WWW отдаются без авторизации. Рядом с файлом можно положить одноимённый файл с расширением .execsvcscriptplain — и тогда по тому же адресу вернётся не содержимое файла, а результат работы служебного сценария.
Порядок такой:
- Положите в папку
WWWрабочего каталога сервера файлtest.htmlс любым содержимым. - Откройте
http://server:port/test.html— без пароля должно вернуться содержимое файла. - Рядом создайте файл
test.html.execsvcscriptplain, а в его теле разместите строку JSON:
{
"scriptname": "myscript",
"timeout": 10,
"parameter1": "ЧЕРЕЗ WWW"
}
- Создайте служебный сценарий
myscript, выводящий какое-нибудь уведомление, чтобы было видно, что он запустился. - Выполните тот же запрос — уведомление должно появиться.
Все параметры GET-запроса — или POST с Content-type: application/x-www-form-urlencoded — разбираются и передаются на старт сценария так же, как при вызове execsvcscriptplain: значения параметров, режим исполнения, таймаут ожидания. В служебную переменную выходного значения можно положить любое содержимое, включая HTML-страницу, — оно вернётся в теле ответа без изменений.
Служебные данные запроса внутри сценария
В качестве значения любого из пяти стартовых параметров можно принудительно назначить специальное значение — тогда в сценарий попадут данные самого HTTP-запроса.
| Значение | Что передаётся |
|---|---|
%parameters% | Строка параметров GET в неразобранном виде |
%content% | Контент запроса |
%headers% | Все заголовки HTTP-запроса — фактически полный текст запроса без контента |
%page% | Адрес запрошенной страницы |
%requestline% | Полный текст строки-запроса |
{
"scriptname": "myscript",
"timeout": 10,
"parameter1": "Константа",
"parameter3": "%page%"
}
Плагины
execpluginmethod исполняет метод в серверном плагине, передавая параметры и возвращая результат с выходными значениями.
| Параметр | Описание |
|---|---|
idmodule | Идентификатор серверного плагина. |
idform | Идентификатор исполняемого метода — формы. |
inputparams | Набор входных значений строкой JSON. |
inputparamsb64 | То же, закодированное в base64. |
Ответом возвращается строка с содержимым JSON.
Состояние системы
| Метод | Что возвращает |
|---|---|
tst_getuserstate | XML-структуру с текущим состоянием указанного пользователя. |
tst_getintnumberreadyusers | Для внутреннего стандартного номера — количество свободных и занятых пользователей и список свободных в виде прямых внутренних номеров, по которым их можно вызвать. Параметр number. |
gettotalqueueinfo | Информацию обо всех очередях на текущий момент: внутренние номера и список абонентов у каждого. В представлении JSON. |
getversion | Версию сервера: версию программы и базы данных, сборку, дату, сборку и дату аппаратного модуля. |
Лицензия
| Метод | Что возвращает |
|---|---|
getlicensefulltext | Полный текст информации о лицензии на установленном на сервере языке — тот же, что в разделе «Администрирование. Общие настройки. Информация о лицензии». |
getlicensefullxml | XML-структуру лицензионного сертификата. |
getlicenseinfo | Значение одного параметра сертификата; параметр detail. См. таблицу ниже. |
Значение detail | Что вернётся |
|---|---|
regserial | 7-значный номер регистрации |
confirmdate | Дата следующего подтверждения сертификата, формат dd.MM.yyyy |
updatelimitdate | Конечная дата поддерживаемых версий по лицензии на обновления, формат dd.MM.yyyy |
Файлы
Скачивание
| Метод | Что отдаёт |
|---|---|
download/rec/…, download/fax/…, download/vm/… | Записи разговоров, полученные факсы, файлы голосовой почты. Правильную ссылку выдаёт WebSocket-подключение. |
download/byscript | Произвольный файл, путь к которому определяет запускаемый этим же запросом служебный сценарий. Используются все параметры execsvcscript. |
download/files | Произвольный файл по прямой ссылке в параметре path. Путь может быть абсолютным либо относительным — от рабочего каталога службы или от хранилища файлов. |
getsharedfile | Файл из открытой папки локального хранилища \LocalStorage\Shared — без авторизации. Параметр path. При любой неточности возвращает 404 Not Found. |
downloadrecordbylink | Запись разговора по коду, упакованному и переданному через WebSocket-подключение. Параметр recordlink. |
getavatar | Изображение пользователя. Параметры path либо userid. Авторизация не нужна. |
Общий параметр attachment: 1 — скачивание вложением, 0 — как медиа, по расширению файла. По умолчанию 1.
AllowDownloadFilesDirectlyOnlyFromTemp в конфигурационном файле, метод download/files может отдавать файлы только из временной папки и папки хранилища. Это ограничение стоит менять осознанно: оно защищает файловую систему сервера от чтения снаружи.
Загрузка
upload принимает файлы методом POST. Веб-сервер понимает multipart/form-data и application/octet-stream; в запросе должны присутствовать поля Content-Transfer-Encoding и Content-Disposition. Одним запросом через MIME можно передать несколько файлов. Чтобы имена не оказались случайными, исходные имена указываются параметром суб-заголовка Content-Disposition.
По умолчанию файлы размещаются во временном каталоге \OktellWorkDirectory\Temp\UploadData.
storagemode | Куда попадёт файл |
|---|---|
temp (по умолчанию) | Временная папка. Гарантированно очищается при перезапуске службы. Файлы доступны снаружи без авторизации по прямой ссылке через getsharedfile. |
storage | Файловое хранилище; доступно снаружи только после авторизации, по временному паролю либо если авторизация веб-сервера не используется. |
storageshared | Открытая часть хранилища; доступна без авторизации любому, кто знает прямую ссылку, через getsharedfile. |
script | Файл кладётся во временную папку, затем запускается указанный служебный сценарий; пятым параметром ему передаётся XML с полными путями сохранённых файлов. Предполагается, что сценарий сам перенесёт их из временной папки. Ответ — как у execsvcscript. |
scriptplain | То же, но ответ — как у execsvcscriptplain. |
| Параметр | Описание |
|---|---|
pathmode | absolute или relative — какой путь возвращать в ответе или передавать в сценарий. По умолчанию относительный. |
subfolder | Подкаталог внутри выбранного хранилища. |
temp очищается при перезапуске службы и открыт без авторизации, storageshared открыт всякому, кто знает ссылку. Прежде чем выбирать режим, ответьте, кем и при каких условиях файлы будут скачиваться и надолго ли они нужны. Смотрите также ключ AllowDownloadFilesDirectlyOnlyFromTemp и параметр «Путь к хранилищу файлов» в общих настройках.
Ответом возвращается XML с описанием всех сохранённых файлов и путей к ним; для неудачно сохранённых атрибут saved равен нулю.
Управление звонками
wp_ исполняются от имени линии (line), пользователя (user) или рабочего места (wp). Достаточно одного из этих параметров. Значением может быть GUID, название, имя пользователя, логин, номер линии — по нему однозначно определяется внутренняя линия.
| Метод | Что делает |
|---|---|
wp_autocallstart | Запускает автодозвон или разовый звонок. Обязательный параметр number. См. таблицу ниже. |
wp_switchcall | Flash-переключение текущего звонка на указанный номер; если линия неактивна — запускает автодозвон. Параметры те же. |
wp_autocallstop | Останавливает активную сессию автодозвона. |
wp_flash | Генерирует flash от имени линии. |
wp_answercall | Отвечает на входящий вызов. |
wp_declinecall | Отклоняет входящий вызов. |
wp_abortcall | Кладёт трубку, завершая звонок. |
wp_getchaincontent | Текущий контент цепочки, в которой участвует линия; структура JSON. |
wp_getabonentinfo | Информация о противоположном абоненте в коммутации; структура JSON. |
wp_setuserstate | Меняет состояние пользователя и переводит его между режимами. См. ниже. |
Параметры дозвона
| Параметр | Значения |
|---|---|
direction | pbx — звонок внутрь, city — наружу. По умолчанию автоопределение: номер найден среди внутренних — звонок внутрь, иначе наружу. |
sequence | direct (по умолчанию) — сначала вызывается абонент, после ответа производится обратный вызов линии. back — сначала вызывается сама линия, затем от её имени указанный номер. |
Режимы flash
mode | Что происходит, если на удержании уже есть абонент |
|---|---|
abort | Отбой текущему, возврат к тому, кто на удержании. |
switch | Возврат к тому, кто на удержании; текущий уходит на удержание. |
next | Отбой текущему и сразу переход к набору номера, без возврата к удерживаемому. |
Смена состояния пользователя
| Параметр | Описание |
|---|---|
userstateid | 1 свободен, 2 перерыв, 3 нет на месте, 5 занят в разговоре или в обработчике задачи. |
onredirect | 0 или 1 — режим переадресации. Доступен только при выключенном режиме call-центра. |
oncallcenter | 0 или 1 — режим call-центра. Дополнительно меняет состояние, если текущее противоречит выбранному режиму: выводит из перерыва при выходе, из переадресации при входе. |
onccmanual | 0 или 1 — ручной режим в call-центре. Меняется только когда пользователь находится в call-центре. |
onlunch | 0 или 1 — режим перерыва. Доступен только при включённом режиме call-центра. При активном режиме пользователь переводится в перерыв вместо готовности всякий раз, как освобождается. |
lunchreasonid | Числовой код регламентной причины перерыва; коды определены в общих настройках. |
lunchreasonmsg | Описание индивидуальной причины перерыва. |
Метод возвращает 200 OK без дополнительных параметров в любом случае, если пользователь определён. То есть успешный ответ здесь не означает, что состояние действительно изменилось: проверяйте результат отдельным запросом.
lunchreasonid. Для индивидуальных — только текст lunchreasonmsg.