Свой 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 | Идентификатор коммутации. Обязательный. |
showcomment | 1 или 0 — показывать ли вкладку комментария в проигрывателе. По умолчанию показывается. |
showstat | 1 или 0 — открывать ли коммутацию в разделе статистики. По умолчанию не открывается. |
Чем этот интерфейс отличается от серверного
| Клиентский | Серверный |
| Порт | 4059 | 80 и 4055 |
| Кто может обратиться | Только программы на том же компьютере (127.0.0.1) | Любой узел сети, до которого доходят запросы |
| Авторизация | Не требуется | Базовая, обязательна начиная с версии 2.9 |
| От чьего имени | Пользователя, авторизованного в приложении | Указывается параметром line, user или wp |
| Типичное применение | Учётная программа на рабочем месте звонит по номеру из карточки | Веб-система или другой сервер управляет платформой |