Java Telephony API (JTAPI) поддерживает управление телефонными вызовами. Это расширяемый интерфейс прикладного программирования (API), предназначенный для масштабирования для использования в различных областях, от управления вызовами первой стороны на потребительском устройстве до управления вызовами третьей стороны в крупных распределенных центрах обработки вызовов.

Обзор

JTAPI (Java Telephony Application Programming Interface) - это интерфейс прикладного программирования (API) на основе Java для приложений компьютерной телефонии. JTAPI состоит из набора языковых пакетов. Базовый пакет обеспечивает базовую структуру для простых телефонных процессов, таких как выполнение вызова, ответ на вызов и сброс вызова. Несколько пакетов расширения предоставляют дополнительные функции телефонии. JTAPI совместим с различными компьютерными платформами. JTAPI похож на интерфейс программирования приложений телефонии (TAPI) Microsoft и Intel.

JTAPI был разработан в 1996 году рабочей группой компьютерных и телекоммуникационных компаний, включая Intel, Lucent, NortelNetworks, Novell и Sun Microsystems.

Основные элементы JTapi
Телефонные приложения, задействованные в управлении или мониторинге объектов, которые предоставляет телефонная система. Такие объекты могут быть логическими объектами, например адресом, вызовом, соединением и т. Д., Или физическими объектами, такими как терминал. Ниже приводится список наиболее важных объектов JTAPI, которые будут рассмотрены в этой серии статей. Это попытка представить, чтобы все были на одной странице.

JTapiPeer
Provider
Address
Terminal
    Address and Terminalobjects
Call
    Address and Call objects
    Terminal and Call objects
Connection

JTapiPeer
Интерфейс JtapiPeer представляет конкретную реализацию поставщика Java Telephony API. JtapiPeer - это первый объект, который приложение должно создать. В зависимости от реализации этого интерфейса поставщиком одна или несколько различных служб могут быть получены с помощью объекта JtapiPeer.

Провайдер
Провайдер представляет программный объект телефонии, который взаимодействует с подсистемой телефонии. Провайдер создается и возвращается методом JtapiPeer.getProvider(), которому дается строка для описания желаемого провайдера. Этот метод устанавливает все необходимые пути связи между приложением и поставщиком. Данная строка является одной из служб, перечисленных в JtapiPeer.getServices(). Остальные объекты JTAPI являются производными от поставщика, а также поставщик отвечает за различные действия, которые приложение разработало для выполнения с JTapi. Например, провайдер будет доставлять адресные события в случае, если мы отслеживаем адрес или создаем вызов между локальным адресом и удаленным адресом (пример исходящего вызова). Важно отметить термин "поставщик".s домен, который относится к набору объектов Address и Terminal, которые являются локальными для поставщика и обычно могут контролироваться поставщиком. Например, доменом провайдера для УАТС могут быть адреса и терминалы в этой УАТС. Реализация Provider контролирует доступ к адресам и терминалам, ограничивая домен, который он представляет для приложения.

Адрес
Объект Address представляет то, что мы обычно называем "телефонным номером". Назначение адреса может отличаться от телефонного номера, если основная сеть не является телефонной сетью. Например, если базовая сеть является IP-сетью; тогда адрес может представлять IP-адрес (например, 192.168.0.100). При создании объекта Address ему присваивается уникальное строковое имя (например, 15121), которое не изменяется в течение всего времени существования объекта. Метод Address.getName() возвращает имя объекта Address. Адресные объекты можно разделить на две категории: локальные и удаленные. Объекты локального адреса - это те адреса, которые являются частью домена локальной телефонной системы, например добавочные номера УАТС.Эти объекты Address создаются реализацией объекта Provider при его первом создании. Все локальные адреса провайдера передаются через метод Provider.getAddresses(). Объекты удаленного адреса - это объекты за пределами домена поставщика, о которых поставщик узнает в течение своего жизненного цикла посредством различных событий (например, входящего вызова с неизвестного в настоящее время адреса). Удаленные адреса не передаются через метод Provider.getAddresses(). Обратите внимание, что приложения никогда явно не создают новые объекты Address.входящий звонок с неизвестного в данный момент адреса). Удаленные адреса не передаются через метод Provider.getAddresses(). Обратите внимание, что приложения никогда явно не создают новые объекты Address.входящий звонок с неизвестного в данный момент адреса). Удаленные адреса не передаются через метод Provider.getAddresses(). Обратите внимание, что приложения никогда явно не создают новые объекты Address.

Терминал
Терминал представляет собой физическую оконечную точку оборудования, подключенную к домену телефонии. Другими словами, Терминал - это телефонный аппарат УАТС. При создании объекта Терминал ему присваивается уникальное строковое имя, которое не изменяется в течение всего времени существования объекта. Метод Terminal.getTerminals() возвращает имя Терминала. Здесь важно отметить, что, в отличие от имени адреса, имя Терминала может не иметь реальной интерпретации, поскольку для взаимодействия с Терминалом (например, вызова Терминала) мы используем Адрес, назначенный этому Терминалу. Терминальные объекты можно разделить на две категории: локальные и удаленные. Объекты локального терминала - это те терминалы, которые являются частью домена локальной телефонной системы, например, телефонные аппараты УАТС.Эти объекты терминала создаются реализацией объекта Provider при его первом создании. Все локальные терминалы провайдера сообщаются через метод Provider.getTerminals(). Объекты удаленного терминала - это объекты за пределами домена поставщика, о которых поставщик узнает в течение своего жизненного цикла через различные события (например, входящий вызов с неизвестного в настоящее время адреса). Объекты удаленного терминала не передаются через метод Provider.getTerminals(). Обратите внимание, что приложения никогда явно не создают новые объекты терминала. Объекты адреса и терминала Объекты адреса и терминала существуют во взаимосвязи "многие-ко-многим". Объект Address может иметь ноль или более связанных с ним Терминалов. Для каждого Терминала, связанного с Адресом, этот Терминал также должен отражать свою связь с Адресом.Поскольку реализация создает объекты Address (и Terminal), она отвечает за обеспечение правильности этих отношений. Терминалы, связанные с адресом, задаются методом Address.getTerminals(), а адреса, связанные с терминалом, задаются методом Terminal.getAddresses(). Связь между объектом Address и Terminal указывает, что Терминал содержит объект Address в качестве одного из адресов своего телефонного номера. Во многих случаях телефонный аппарат (представленный объектом "Терминал") имеет только один телефонный номер (представленный объектом "Адрес"), связанный с ним. В более сложных конфигурациях с телефонными аппаратами может быть связано несколько телефонных номеров. Точно так же номер телефона может появиться более чем на одном телефонном аппарате.он отвечает за обеспечение правильности этих отношений. Терминалы, связанные с адресом, задаются методом Address.getTerminals(), а адреса, связанные с терминалом, задаются методом Terminal.getAddresses(). Связь между объектом Address и Terminal указывает, что Терминал содержит объект Address в качестве одного из адресов своего телефонного номера. Во многих случаях телефонный аппарат (представленный объектом "Терминал") имеет только один телефонный номер (представленный объектом "Адрес"), связанный с ним. В более сложных конфигурациях с телефонными аппаратами может быть связано несколько телефонных номеров. Точно так же номер телефона может появиться более чем на одном телефонном аппарате.он отвечает за обеспечение правильности этих отношений. Терминалы, связанные с адресом, задаются методом Address.getTerminals(), а адреса, связанные с терминалом, задаются методом Terminal.getAddresses(). Связь между объектом Address и Terminal указывает, что Терминал содержит объект Address в качестве одного из адресов своего телефонного номера. Во многих случаях телефонный аппарат (представленный объектом "Терминал") имеет только один телефонный номер (представленный объектом "Адрес"), связанный с ним. В более сложных конфигурациях с телефонными аппаратами может быть связано несколько телефонных номеров. Точно так же номер телефона может появиться более чем на одном телефонном аппарате.getTerminals(), а адреса, связанные с терминалом, задаются в Terminal.getAddresses(). Связь между объектом Address и Terminal указывает, что Терминал содержит объект Address в качестве одного из адресов своего телефонного номера. Во многих случаях телефонный аппарат (представленный объектом "Терминал") имеет только один телефонный номер (представленный объектом "Адрес"), связанный с ним. В более сложных конфигурациях с телефонными аппаратами может быть связано несколько телефонных номеров. Точно так же номер телефона может появиться более чем на одном телефонном аппарате.getTerminals(), а адреса, связанные с терминалом, задаются в Terminal.getAddresses(). Связь между объектом Address и Terminal указывает, что Терминал содержит объект Address в качестве одного из адресов своего телефонного номера. Во многих случаях телефонный аппарат (представленный объектом "Терминал") имеет только один телефонный номер (представленный объектом "Адрес"), связанный с ним. В более сложных конфигурациях с телефонными аппаратами может быть связано несколько телефонных номеров. Точно так же номер телефона может появиться более чем на одном телефонном аппарате.телефонный аппарат (представленный объектом "Терминал") имеет только один телефонный номер (представленный объектом "Адрес"), связанный с ним. В более сложных конфигурациях с телефонными аппаратами может быть связано несколько телефонных номеров. Точно так же номер телефона может появиться более чем на одном телефонном аппарате.телефонный аппарат (представленный объектом "Терминал") имеет только один телефонный номер (представленный объектом "Адрес"), связанный с ним. В более сложных конфигурациях с телефонными аппаратами может быть связано несколько телефонных номеров. Точно так же номер телефона может появиться более чем на одном телефонном аппарате.

Вызов
Объект Call моделирует телефонный звонок. Вызов может иметь ноль или более подключений. Двусторонний вызов имеет два соединения, а конференц-вызов имеет три или более соединений. Каждое соединение моделирует связь между вызовом и адресом, где адрес идентифицирует конкретную сторону или группу сторон в вызове. Вызов поддерживает список подключений к этому вызову. Приложения получают массив Connections, связанных с Call, через метод Call.getConnections(). Вызов сохраняет ссылку на соединение, только если оно не находится в состоянии Connection.DISCONNECTED. Следовательно, если Call имеет ссылку на соединение, то это соединение не должно находиться в состоянии Connection.DISCONNECTED. Когда соединение переходит в состояние Connection.DISCONNECTED (например, когда сторона кладет трубку),Call теряет ссылку на это соединение, о котором больше не сообщается через метод Call.getConnections(). Провайдер поддерживает информацию о вызовах, связанных с ним в данный момент. Приложения могут получить массив этих вызовов с помощью метода Provider.getCalls(). Провайдер может иметь связанные с ним вызовы, которые были созданы до его появления. Реализация провайдера несет ответственность за моделирование и составление отчетов обо всех существующих телефонных звонках, которые были созданы до срока действия провайдера. Провайдер поддерживает ссылки на все вызовы, пока они не перейдут в состояние Call.INVALID. Приложения могут создавать новые вызовы с помощью метода Provider.createCall(). Новый вызов возвращается в состоянии Call.IDLE. Затем приложения могут использовать этот незанятый вызов для выполнения новых телефонных вызовов. После созданияэтот новый объект Call возвращается через метод Provider.getCalls(). Объекты адреса и вызова. Объекты адреса представляют собой логические конечные точки телефонного вызова. Логическое представление телефонного вызова рассматривает вызов как исходящий из одной конечной точки адреса и завершающийся в другой конечной точке адреса. Адресные объекты связаны с объектами Call через объект Connection. Объект Connection имеет состояние, которое описывает текущую связь между Call и Address. Каждый объект Address может быть частью более чем одного телефонного звонка и в каждом случае представлен отдельным объектом Connection. Метод Address.getConnections() возвращает все объекты Connection, в настоящее время связанные с Call. Адрес связан с вызовом до тех пор, пока соединение не перейдет в состояние Connection.DISCONNECTED. В это время,о подключении больше не сообщается через метод Address.getConnections(). Следовательно, метод Address.getConnections() никогда не будет сообщать о подключении в состоянии Connection.DISCONNECTED. В спецификации Java Telephony API указано, что реализация отвечает за сообщение обо всех существующих телефонных звонках при первом создании провайдера. Это означает, что объект Address должен сообщать информацию о существующих телефонных звонках на этот адрес. Другими словами, объекты Address должны сообщать обо всех объектах Connection, которые представляют существующие телефонные звонки. Объекты "Терминал" и "Вызов" Объекты "Терминал" представляют собой физические конечные точки телефонного разговора. Относительно одной конечной точки адреса в вызове может существовать несколько физических конечных точек терминала. Объекты терминала связаны с объектами Call через объект TerminalConnection.Объекты TerminalConnection связаны с Call косвенно через Connections. Терминал может быть связан с вызовом, только если один из его адресов связан с вызовом. Объект TerminalConnection имеет состояние, которое описывает текущие отношения между Соединением и Терминалом. Каждый объект Terminal может быть частью более чем одного телефонного звонка и в каждом случае представлен отдельным объектом TerminalConnection. Метод Terminal.getTerminalConnections() возвращает весь объект TerminalConnection, связанный в данный момент с Терминалом. Объект терминала связан с подключением до тех пор, пока TerminalConnection не перейдет в состояние TerminalConnection.DROPPED. В это время TerminalConnection больше не передается через метод Terminal.getTerminalConnections(). Следовательно, Terminal.getTerminalConnections() никогда не сообщает о TerminalConnection в состоянии TerminalConnection.DROPPED. В спецификации Java Telephony API указано, что реализация отвечает за сообщение обо всех существующих телефонных звонках при первом создании провайдера. Это означает, что объект "Терминал" должен сообщать этому Терминалу информацию о существующих телефонных звонках. Другими словами, объекты терминала должны сообщать обо всех объектах TerminalConnection, которые представляют существующие телефонные звонки.Другими словами, объекты терминала должны сообщать обо всех объектах TerminalConnection, которые представляют существующие телефонные звонки.Другими словами, объекты терминала должны сообщать обо всех объектах TerminalConnection, которые представляют существующие телефонные звонки.

Подключение
Соединение представляет собой связь (т. Е. Ассоциацию) между объектом вызова и объектом адреса. Цель объекта Connection - описать взаимосвязь между объектом Call и объектом Address. Объект Connection существует, если адрес является частью телефонного звонка. Приложения используют методы Connection.getCall() и Connection.getAddress() для получения Call и Address, связанных с этим Connection, соответственно. С одной стороны, приложение может рассматривать вызов только с точки зрения объектов адреса / соединения, которые являются частью вызова. Это называется логическим представлением вызова, потому что оно игнорирует детали, предоставленные объектами Terminal и TerminalConnection, которые также связаны с Call. Во многих случаяхпростые приложения (такие как программа исходящего вызова) могут иметь дело только с логическим представлением. В этом логическом представлении телефонный звонок рассматривается как два или более адресов конечных точек связи. Объект Connection описывает состояние каждого из этих адресов конечной точки относительно Вызова. Объекты подключения неизменяемы с точки зрения их ссылок на вызов и адрес. Другими словами, ссылки на объекты Call и Address не меняются в течение всего времени существования экземпляра объекта Connection. Тот же объект Connection нельзя использовать в другом телефонном звонке. Существование соединения подразумевает, что его адрес связан с его вызовом способом, описанным состоянием соединения. Хотя ссылки Address и Call соединения остаются действительными в течение всего времени существования объекта Connection,то же самое не относится к ссылкам объектов Call и Address на это соединение. В частности, когда соединение переходит в состояние Connection.DISCONNECTED, оно больше не отображается в методах Call.getConnections() и Address.getConnections(). Обычно, когда соединение переходит в состояние Connection.DISCONNECTED, приложение теряет ссылки на него, чтобы облегчить сборку мусора. Объекты Connections - это контейнеры для нуля или более объектов TerminalConnection. Объекты соединения представляют связь между вызовом и адресом, тогда как объекты TerminalConnection представляют связь между соединением и терминалом. Связь между Вызовом и Адресом можно рассматривать как логическое представление Вызова.Отношения между Соединением и Терминалом представляют собой физическое представление Вызова, т. Е. На котором Терминал завершается телефонный вызов.

Полезные ссылки
Sun Java Telephony API (JTAPI)
Обзор JTapi