HTTP-интерфейс клиентского приложения

Свой HTTP-интерфейс есть и у клиентского приложения. Он решает другую задачу: не связать две системы по сети, а дать программе, работающей на том же компьютере, управлять телефоном сотрудника — позвонить по номеру из карточки, ответить на вызов, узнать, с кем сейчас разговор.

Как он устроен

Клиентское приложение слушает порт 4059 — его можно изменить в конфигурационном файле — и только на интерфейсе loopback (127.0.0.1). Запросы принимаются методами GET и POST.

Снаружи этот интерфейс недоступен принципиально Прослушивание ограничено 127.0.0.1, поэтому обратиться к нему может только программа на том же компьютере. Авторизация здесь не требуется — её роль выполняет само это ограничение. Команды исполняются от имени пользователя, авторизованного в клиентском приложении в данный момент.
В терминальном режиме порт займёт только одно приложение Клиентское приложение может быть запущено несколько раз — например, на терминальном сервере. Порт при этом сможет прослушивать только одно из них: остальным нужно назначить другие порты в конфигурационном файле, иначе прослушивание у них просто не запустится.

Звонки

МетодЧто делает
callto Звонит на номер из параметра number по текущей настроенной схеме автодозвона. Если номер есть во внутреннем номерном плане — вызов идёт по внутренней сети, иначе наружу.
switchto Переключает текущего пользователя на указанный номер. Если пользователь в коммутации — действие равносильно нажатию FLASH и набору номера; если нет — работает как callto.
headsetanswercallТо же, что команда поднятия трубки на гарнитуре при входящем вызове.
declinecallТо же, что «Отклонить входящий вызов» в интерфейсе софт-телефона.
flashcallТо же, что кнопка «Флеш» на телефоне.
disconnectcallЗавершает текущий звонок. См. примечание ниже.
Если пользователь занят или без телефона, callto ничего не сделает Звонок просто не состоится. Приложение, вызывающее команду, должно это учитывать и не считать отсутствие ошибки признаком того, что звонок пошёл.
Что именно завершает disconnectcall Одна команда на четыре ситуации: в коммутации — разрывает её, отправляя отбой обеим линиям; в конференции — выводит из неё; при автодозвоне — прекращает его; при входящем вызове — отклоняет.

Сведения о текущем звонке

getcurrentcallinfo возвращает XML со сведениями о текущем состоянии и о собеседнике. Параметров не требует. Состав ответа зависит от значения поля mode.

ПолеЧто содержит
modeТекущий режим: none, connected, flashed, calling, ringing.
abonenttypeТип собеседника: inner, outer, ivr, conference, task.
idchainИдентификатор текущей сессии — цепочки коммутаций.
idconnИдентификатор текущей коммутации.
number, name, descriptionНомер, имя и описание собеседника.
commentКомментарий или дополнительное описание, установленное в сценарии при переключении.
lineid, linenumИдентификатор и номер линии собеседника.
useridИдентификатор собеседника, если это внутренний пользователь системы.
starttimeВремя начала коммутации — либо сессии, для задач с ограничением на время обработки.
starttickСистемный тик локального компьютера, соответствующий началу коммутации или сессии.
Зачем нужен starttick рядом с starttime Время начала даётся в двух видах не случайно: тик локального компьютера позволяет считать длительность разговора, не завися от расхождения часов между машинами.

Служебные сценарии

execsvcscript запускает произвольный служебный сценарий на сервере. Параметры те же, что у одноимённого метода серверного интерфейса: name, startparam1…startparam5, async, timeout. В синхронном режиме ответом становится «Возвращаемое значение 1».

Отличие от серверного вызова — в том, кто считается инициатором Здесь инициатором запуска считается текущий авторизованный пользователь, и код запуска другой: 14 вместо 27. Сценарий может это различать и вести себя по-разному — например, подставлять сотрудника в статистику или проверять его права.

Прочие команды

МетодЧто делает
getcurrentuserloginВозвращает логин текущего авторизованного пользователя.
getcurrentserveraddressВозвращает адрес используемого сервера.
focusПередаёт фокус клиентскому приложению Октелл. Возможно не всегда — зависит от настроек приложения, которое владеет фокусом в этот момент.
dialogcardnextТо же, что команда «Далее» в операторской диалоговой форме.
dialogcardstopТо же, что команда «Стоп» в операторской диалоговой форме.
setbusyexternaltaskСтавит или снимает отметку занятости пользователя во внешней задаче. Параметр busy: 1 — поставить, 0 — снять.
pbxstatplaybyidconnВоспроизводит в клиентском приложении запись указанной коммутации.
pbxstatplaybyidconn не проверяет права контроля Запись воспроизводится независимо от прав контроля авторизованного пользователя. Программа, вызывающая эту команду, фактически обходит разграничение доступа к записям разговоров — учитывайте это, решая, кому на компьютере разрешено обращаться к интерфейсу.
Параметр pbxstatplaybyidconnОписание
idconnИдентификатор коммутации. Обязательный.
showcomment1 или 0 — показывать ли вкладку комментария в проигрывателе. По умолчанию показывается.
showstat1 или 0 — открывать ли коммутацию в разделе статистики. По умолчанию не открывается.

Чем этот интерфейс отличается от серверного

КлиентскийСерверный
Порт405980 и 4055
Кто может обратитьсяТолько программы на том же компьютере (127.0.0.1)Любой узел сети, до которого доходят запросы
АвторизацияНе требуетсяБазовая, обязательна начиная с версии 2.9
От чьего имениПользователя, авторизованного в приложенииУказывается параметром line, user или wp
Типичное применениеУчётная программа на рабочем месте звонит по номеру из карточкиВеб-система или другой сервер управляет платформой