Работа с логикой АТС
Методы для работы с логикой АТС: набор номера, автодозвон, переключение
- string CallNumber ( string number ). Запускает сервис автодозвона (при положенной трубке) или набора номера на текущей сессии (при поднятой трубке), в случае если все состояния допускают. Сервис автодозвона предполагает, что сначала производится вызов абонента, и только после его ответа - обратный вызов пользователя и последующая коммутация.
Параметр в виде простой строки с номером. Вызов производится в следующем режиме: При наборе номер ищется сначала среди внутреннего номерного плана, в случае если обнаружен - набирается во внутренний номерной план, если нет - согласно прав доступа текущего пользователя к внешним линиям - вовне. Возвращает XML-строку с описанием ответа сервиса запускавшего набор номера или NULL, если до вызова логика прослойки зарезала команду. Общие примеры параметра и возвращающего значения чуть ниже в этом разделе.
- string CallNumberEx ( string xml ). Запускает сервис автодозвона (при положенной трубке) или набора номера на текущей сессии (при поднятой трубке), в случае если все состояния допускают. Сервис автодозвона предполагает, что сначала производится вызов абонента, и только после его ответа - обратный вызов пользователя и последующая коммутация. Однако может быть установлен и иной порядок путем указания значения back ключу sequence параметра.
Параметр в виде расширенного XML запроса. В теле запроса помимо номера (key="number") может быть установлено направление (key="direction", варианты: value="0" или name="city", value="1" или name="pbx", value="2" или name="undefined"). В случае пропуска номера или задания неопределенного направления вызов производится в следующем режиме: При наборе номер ищется сначала среди внутреннего номерного плана, в случае если обнаружен - набирается во внутренний номерной план, если нет - согласно прав доступа текущего пользователя к внешним линиям - вовне. Возвращает XML-строку с описанием ответа сервиса осущствлявшего обработку команды или NULL, если до вызова логика прослойки зарезала команду. Общие примеры параметра и возвращающего значения чуть ниже в этом разделе.
- string SwitchNumber ( string number ). Осуществляет переключение (Flash и набор номера) при активной коммутации или набор номера при отсутствии коммутации (например из интерфейса внутреннего номерного плана). В последнем случае набор номера осуществляется в обратной последовательности: сначала вызывается сам абонент, а после этого уже происходит набор номера абонента.
Параметр в виде простой строки с номером. При наборе номер ищется сначала среди внутреннего номерного плана, в случае если обнаружен - набирается во внутренний номерной план, если нет - согласно прав доступа текущего пользователя к внешним линиям - вовне. Возвращает XML-строку с описанием ответа сервиса осущствлявшего обработку команды или NULL,если до вызова логика прослойки зарезала команду. Общие примеры параметра и возвращающего значения чуть ниже в этом разделе.
- string SwitchNumberEx ( string xml ). Осуществляет переключение (Flash и набор номера) при активной коммутации или набор номера при отсутствии коммутации (например из интерфейса внутреннего номерного плана). В последнем случае набор номера осуществляется в обратной последовательности: сначала вызывается сам абонент, а после этого уже происходит набор номера абонента. Однако может быть установлен и иной порядок путем указания значения direct ключу sequence параметра.
Параметр в виде расширенного XML запроса. В теле запроса помимо номера (key="number") может быть установлено направление (key="direction", варианты: value="0" или name="city", value="1" или name="pbx", value="2" или name="undefined"). В случае пропуска номера или задания неопределенного направления вызов производится в следующем режиме: При наборе номер ищется сначала среди внутреннего номерного плана, в случае если обнаружен - набирается во внутренний номерной план, если нет - согласно прав доступа текущего пользователя к внешним линиям - вовне. Возвращает XML-строку с описанием ответа сервиса осущствлявшего обработку команды или NULL, если до вызова логика прослойки зарезала команду.
Пример xml ответа сервера:
<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710"> <property_set name="result"> <property_simple key="code" value="0" name="cntStartedSuccessfully" /> </property_set> </oktellcommapper>
Пример xml запроса:
<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710"> <property_set name="callnumber"> <property_simple key="number" value="425" /> <property_simple key="direction" name="pbx" /> <property_simple key="sequence" name="direct" /> </property_set> </oktellcommapper>
Типы возвращаемых кодов при старте вызовов через автодозвон:
public enum EACMAnswer { cntStartedSuccessfully = 0, //Звонок успешно взят в реализацию cntUserNotReady = 1, //У осуществляющего вызов пользователя не найдены линии, готовые линии, или состояние кривое cntBusy = 2, //При звонке на внутренний номер - признак занятости. В очереди и сам повисеть может (в дальнейшем реализуем как раз ожидание в очереди...) cntExtLineNotFound = 3, //Не найдены готовые внешние линии (если будем на это замес делать.. возможно просто будет стоять и ждать.. ) cntError = 4, //Прочие ошибки, исключения. cntControlNotReady = 5, //Режим не доделан. cntNumberNotFound = 6 //Внутренний номер не найден (по факту, если сервак сам будет определять направление звонка, это вообще не будет задействовано) }
Типы направлений вызовов, передаваемых в параметре direction:
public enum EOutcomingDirection { city = 0, //Вызов на внешнее направление (в город или в АТС за внешними линиями) pbx = 1, //Вызов на внутреннее направление (внутренний номерной план сервера) undefined = 2, //Автоматическое определение. При наличии внутреннего номера - набор во внутреннее направление, при отсутствии внутреннего номера - во внешнее }
- bool DeclineCall ( ). Посылает на сервер АТС отказ от входящего вызова. Возвращается TRUE, если отказ принят системой. Сервер обрабатывает этот случай аналогично пропуску вызова по таймауту.
- void AutoCallAbort ( ). Осуществляет остановку запущенного процесса автодозвона для авторизованного пользователя. В случае, если процесса автодозвона не обнаружено, или он перешел в фазу обработки в АТС (например, абонент снял трубку, и осуществляется обратный вызов пользователя), ничего не происходит.
ВНИМАНИЕ! В системе для одного пользователя может существовать только один процесс автодозвона. Любой последующий вызов без завершения предыдущего будет обрывать активную сессию и начинать ее с новыми параметрами заново.
Методы для работы с логикой АТС: факсимильные сообщения
- bool FaxStartReceive ( string xml ). Запускает сеанс получения факсимильного сообщения на оппозитном канале коммутации. Команда может быть осуществлена только в момент коммутации при наличии у оппозитного канала возможности работы с факсимильными сообщениями. Для определения параметров и факта коммутации используется событие CommutationStarted канала OnCommunicate. В качестве параметра передается строка с XML форматированием, содержащим путь к файлу для сохранения после получения. В XML свойстве property_cdata ожидается значение ключа «filepath» и значении CDATA - пути к файлу. В случае, если файл существует, он будет перезаписан. Если факсимильное сообщение содержит несколько страниц, то каждая будет сохранена в указанном каталоге с добавлением в конец имени файла атрибута «_page» (то есть fn_page1.bmp, fn_page2.bmp и т.д.). Возвращает TRUE, если команда передана на сервер и FALSE, если текущие свойства и состояние канала не подходят.
Пример параметра:
<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710"> <property_set name="startfaxreceive"> <property_cdata key="filepath"><![CDATA[C:\Принятые факсы\Договор_аренды.bmp]]></property_cdata> </property_set> </oktellcommapper>
- bool FaxStartTransmit ( string xml ). Запускает сеанс отправки факсимильного сообщения на оппозитном канале коммутации. Команда может быть осуществлена только в момент коммутации при наличии у оппозитного канала возможности работы с факсимильными сообщениями. Для определения параметров и факта коммутации используется событие CommutationStarted канала OnCommunicate. В качестве параметра передается строка с XML форматированием, содержащим пути к файлам, требующим отправки в контексте запускаемого сеанса. Возвращает TRUE, если команда передана на сервер и FALSE, если текущие свойства и состояние канала не подходят.
<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">
<property_set name="faxtransmit"> <property_cdata key="filepath" value="0"><![CDATA[C:\Принятые факсы\Договор_аренды_стр1.bmp]]></property_cdata> <property_cdata key="filepath" value="1"><![CDATA[C:\Принятые факсы\Договор_аренды_стр2.bmp]]></property_cdata> <property_cdata key="filepath" value="2"><![CDATA[C:\Принятые факсы\Договор_аренды_стр3.bmp]]></property_cdata> </property_set>
</oktellcommapper>
- bool FaxStop (). Прерывает текущий сеанс факсимильного взаимодействия на оппозитном канале и возвращает канал в закоммутированное состояние с оппозитным каналом. Возвращает TRUE, если команда передана на сервер и FALSE, если текущие свойства и состояние канала не подходят.
События АТС по линии пользователя
События канала OnCommunicate (здесь) инициированные АТС для интерфейсного блока работы с телефоном и управления каналом:
- CommutationStarted (231). Событие АТС о начале коммутации на канале устройства, связанного в карте с текущим рабочим местом. Среди параметров передается набор значений для отображения, флаг возможности использования встроенного факса для отправки факсимильных сообщений по оппозитному каналу. В случае звонка по задаче передаются имя и идентификатор задачи, а также лимит установленного в настройках задачи времени на обработку вызова (в секундах) и текущее время с начала обработки задачи (в секундах, для корректировки счетчика времени).
Пример:
<?xml version="1.0" encoding="utf-16"?> <oktellcommapper version="80710">
<event id="231" name="commutationstarted"> <property_simple key="idchain" value="abcdef12-abcd-abcd-1234-1234567890ab" /> <property_simple key="idconnection" value="12345678-1234-1234-1234-abcdef123456" /> <property_simple key="canfax" value="1" /> <property_simple key="opponentdescription" value="Иванов Сергей" /> <property_simple key="opponentname" value="Иванов Сергей" /> <property_simple key="opponentnumber" value="" /> <property_simple key="opponentlineid" value="cf8330f4-a0bf-4779-9539-ab8ea6c49df7" /> <property_simple key="opponentlinenumber" value="" /> </event>