Übersicht über die unterstützte Telefonie
Ein wertvolles Feature der Telefonie ist die kleine Reihe von Funktionen, die als unterstützte Telefonie bezeichnet werden. Die unterstützte Telefonie ist darauf ausgelegt, die Einrichtung von Sprachanrufen und Medienanrufen für jede Anwendung verfügbar zu machen, nicht nur für die, die sich mit telefonischen Funktionen beschäftigen. Mit anderen Worten: Mit der unterstützten Telefonie können Anwendungen Telefonanrufe tätigen, ohne die Details der Dienste der vollständigen Telefonie-API kennen zu müssen. Sie erweitert die Telefonie auf Textverarbeitungsanwendungen, Kalkulationstabellen, Datenbanken, Manager für persönliche Informationen und andere Anwendungen, die keine Telefonie sind.
Eine Liste der TAPI 2.x Assisted Telephony-Funktionen von Basic Telephony finden Sie unter TAPI-Schnellfunktionsreferenz. TAPI 3.x unterstützt die unterstützte Telefonie über die ITRequest-Schnittstelle .
Die Nützlichkeit der unterstützten Telefonie kann im folgenden Beispiel veranschaulicht werden. Eine Tabellenkalkulationsanwendung kann Funktionen enthalten, die eine Telefonnummer für einen Sprachanruf wählen. Solange die Anwendung keine der detaillierten Anrufsteuerungen benötigt, die von der vollständigen Telefonie-API bereitgestellt werden, ist assisted telephony die einfachste und effizienteste Möglichkeit, ihr telefonische Funktionen zu geben.
Die unterstützte Telefonie und die vollständige Telefonie-API werden auf unterschiedliche Weise verwendet und implementiert, sodass es nicht ratsam ist, Anrufe der Assisted Telephony-Funktion und Telefonie-API-Funktionsaufrufe in einer einzelnen Anwendung zu kombinieren.
Verwenden der unterstützten Telefonie
Anwendungen, die unterstützte Telefoniedienste verwenden, initiieren nur Anrufanforderungen, die vorübergehend von TAPI in die Warteschlange gestellt werden. Die Anforderungsempfängeranwendung ruft diese Anforderungen ab und führt sie im Auftrag der Assisted Telephony-Anwendung aus. Die tapiRequestMakeCall-Funktion fordert die Einrichtung eines Sprachanrufs an. Die anfordernde Anwendung steuert den Aufruf nicht.
TAPI ermöglicht es dem Benutzer, für jeden dieser Dienste unterschiedliche oder dieselben Anforderungsempfängeranwendungen einzurichten. Eine Anwendung wird durch Registrierung bei lineRegisterRequestRecipient zum Anforderungsempfänger, in dem TRUE als Wert für den Parameter bEnable angegeben wird. (Die Angabe von FALSE hebt die Registrierung der Anwendung als Anforderungsempfänger auf, was sie tun sollte, wenn sie festgestellt hat, dass ihre Empfängeraufgaben für die aktuelle Sitzung durch sind.) Die Anwendung wählt die dienste aus, die sie im dwRequestMode-Parameter von lineRegisterRequestRecipient behandeln möchte. Ein möglicher Wert für eine Anforderung ist LINEREQUESTMODE_MAKECALL, um zu zeigen, dass die Anwendung tapiRequestMakeCall-Anforderungen verarbeitet. Wenn mehrere Anwendungen für dieselben Dienste registriert werden, wird ein Prioritätsschema verwendet, damit der Benutzer auswählen kann, welche Anwendung für die Verarbeitung von Anforderungen bevorzugt wird. Dieses Prioritätsschema ist identisch mit dem, das für die Anrufübergabe und das Routing eingehender Aufrufe basierend auf einer Liste von Dateinamen in HandoffPriorities in der Registrierung verwendet wird.
Anrufanforderungen
Die unterstützte Telefonie bietet Telefonie-fähigen Anwendungen einen benutzerfreundlichen Mechanismus zum Tätigen von Telefonanrufen, ohne dass der Entwickler sich vollständig mit der Telefonie vertraut machen muss.
Die tapiRequestMakeCall-Funktion fordert einen Sprachanruf zwischen dem Benutzer und einer Remotepartei an, die durch ihre Telefonnummer angegeben wird. Die Anforderung wird an TAPI gestellt und an eine Anwendung übergeben, die als Empfänger solcher Anforderungen registriert ist. Dieser Empfänger ist eine Anruf-Manager-Anwendung.
Nachdem die Anwendung die Anforderung gestellt hat, wird der Anruf vollständig von der Anruf-Manager-Anwendung gesteuert, da Anwendungen für die unterstützte Telefonie anrufe nicht verwalten können. Da die komplexeren Aspekte der Telefonie und aller Benutzeroberflächenvorgänge von der Anruf-Manager-Anwendung verarbeitet werden, müssen telefoniefähige Anwendungen nicht wesentlich geändert werden. In der Tat müssen Anwendungen, die das Aufrufen dieses Vorgangs über ihre integrierte Skriptsprache zulassen, möglicherweise überhaupt nicht geändert werden.
Die tapiGetLocationInfo-Funktion gibt an die Anwendung den Länder- oder Regionscode und den Ortscode zurück, den der Benutzer in den aktuellen Standortparametern im Telefonie-Systemsteuerung festgelegt hat. Die Anwendung kann diese Informationen verwenden, um den Benutzer bei der Erstellung ordnungsgemäßer kanonischer Telefonnummern zu unterstützen, z. B. indem sie diese standardmäßig anbietet, wenn neue Nummern in einen Telefonbucheintrag oder Datenbankdatensatz eingegeben werden.
Empfänger anfordern
Zum Ausführen der unterstützten Telefonie sind zwei Arten von Anwendungen erforderlich. Clients für unterstützte Telefonie sind Anwendungen, die die unterstützte Telefonie verwenden, indem sie die Funktionen aufrufen, die das Präfix "tapi" aufweisen. Ein Beispiel für eine solche Clientanwendung wäre eine Kalkulationstabelle, zu der ein Dial-Menübefehl oder eine Symbolleistenschaltfläche hinzugefügt wird.
Unterstützte Telefonieserver sind Anwendungen, die Telefonie-API-Funktionen ausführen können, die sich aus dem Aufruf einer funktion mit dem Präfix "tapi" einer anderen Anwendung ergeben. Um sich als Server für unterstützte Telefonie bekannt zu machen, registriert sich eine solche Anwendung mit der Funktion lineRegisterRequestRecipient als eins.
Die Funktionen der unterstützten Telefonie (die mit dem Präfix "tapi") beginnen, werden als Anforderungsfunktionen bezeichnet. Anwendungen für unterstützte Telefonie, die diese Anforderungen verarbeiten – Server für unterstützte Telefonie – werden als Anforderungsempfänger bezeichnet.
Verarbeiten unterstützter Telefonieanforderungen
Der Prozess, mit dem Anforderungen übermittelt und gewartet werden, sieht wie folgt aus:
Wenn TAPI eine Anforderung für unterstützte Telefonie empfängt, wird nach einem Anforderungsempfänger gesucht, d. h. nach einer Anwendung, die derzeit für die Verarbeitung dieses Anforderungstyps registriert ist. Wenn es einen Anforderungsempfänger gibt, wird die Anforderung in eine Warteschlange gestellt, und die Anwendung mit der höchsten Priorität, die sich für den Dienst dieser Anforderung registriert hat, wird eine LINE_REQUEST Nachricht gesendet. Die Nachricht benachrichtigt den Anforderungsempfänger, dass eine neue Anforderung eingegangen ist, und enthält einen Hinweis auf den Modus der Anforderung.
Wenn TAPI eine derzeit ausgeführte Anwendung nicht finden kann, um eine solche Anforderung zu verarbeiten, versucht es, eine Anwendung zu starten, die als in der Lage ist, dies zu tun. Diese Registrierungsinformationen werden in HandoffPriorities in der Registrierung aufgezeichnet. TAPI versucht, Anwendungen in der Reihenfolge zu starten, in der sie im Abschnitt HandoffPriorities aufgeführt sind. (Siehe den folgenden Schritt.)
Wenn derzeit keine Anwendung registriert ist, untersucht TAPI die Liste der Anträge zur Verarbeitung von Anforderungen für den zugehörigen Eintrag in HandoffPriorities. Wenn die zugeordnete Zeile in der Datei fehlt, keine Anwendungen aufgeführt sind oder keine der Anwendungen in der Liste gestartet werden kann, wird die Anforderung mit dem Fehler TAPIERR_NOREQUESTRECIPIENT abgelehnt.
Wenn ein Anforderungsempfänger gestartet wird (unabhängig davon, ob er von TAPI gestartet wurde oder nicht), ist es seine Pflicht , lineRegisterRequestRecipient während des Startvorgangs aufzurufen und sich als Anforderungsempfänger zu registrieren.
Wenn eine oder mehrere Anwendungen im Eintrag aufgeführt sind, beginnt TAPI mit der ersten aufgeführten Anwendung (höchste Priorität) und versucht, sie mithilfe der CreateProcess-Funktion zu starten. Wenn der Versuch, die Anwendung zu starten, fehlschlägt, versucht TAPI, die nächste Anwendung in der Liste zu starten. Wenn eine Anwendung erfolgreich gestartet wird, stellt TAPI die Anforderung einfach in die Warteschlange und gibt eine Erfolgsanzeige an die Anwendung zurück, obwohl die Anforderung dem Anforderungsempfänger noch nicht signalisiert wurde.
Nachdem die Anforderungsempfängeranwendung gestartet wurde, ruft sie lineRegisterRequestRecipient auf, wodurch eine LINE_REQUEST Nachricht gesendet wird, die signalisiert, dass die Anforderung in die Warteschlange gestellt wird. Wenn die gestartete Anwendung aus irgendeinem Grund nie registriert wird, bleibt die Anforderung in der Warteschlange und bleibt unbegrenzt in der Warteschlange, bis sich eine Anwendung für diesen Anforderungstyp registriert.
Wenn TAPI feststellt, dass eine solche registrierte Anwendung bereits ausgeführt wird oder erfolgreich gestartet wird, wird die Anforderung in die Warteschlange gestellt, eine LINE_REQUEST Nachricht an die Serveranwendung gesendet und eine Erfolgsanzeige für den Funktionsaufruf der Anwendung für unterstützte Telefonie zurückgegeben. Diese Erfolgsmeldung besagt nur, dass die Anforderung akzeptiert und in die Warteschlange gestellt wurde, nicht, dass sie erfolgreich ausgeführt wurde.
Wenn die Serveranwendung bereit ist, eine Anforderung zu verarbeiten, ruft sie die funktion lineGetRequest auf. Dadurch kann es alle benötigten Informationen empfangen, z. B. eine Adresse zum Wählen. Anschließend wird die Anforderung mithilfe der TAPI-Funktionen (z. B. lineMakeCall und lineDrop) verarbeitet, die andernfalls zum Platzieren des Aufrufs verwendet würden. Beim Aufrufen von lineGetRequest wird die Anforderung aus TAPI entfernt, und die Anforderungsparameter werden in einen anwendungsseitig zugewiesenen Anforderungspuffer kopiert. Die Größe und Interpretation des Inhalts des Puffers hängen vom Anforderungsmodus ab.
Der Server muss sicherstellen, dass beim Ausführen von Anforderungen die richtigen Parameter verwendet werden. Dabei werden die folgenden Schritte ausgeführt:
- Der Anforderungsempfänger erhält zuerst eine LINE_REQUEST Nachricht, die ihn darüber informiert, dass Anforderungen für ihn in der Anforderungswarteschlange vorhanden sein können. Dadurch wird die Anwendung aufgefordert , lineGetRequest aufzurufen und sie so lange aufzurufen, bis die Warteschlange leer ist (wenn die Anforderung für einen neuen Anruf ist) oder einen vorhandenen Anruf zu löschen. Diese Nachricht enthält keine Parameter für die Anforderung, außer im Fall einer Anforderung zum Löschen eines vorhandenen Aufrufs.
- Wenn die Anforderung einen neuen Aufruf tätigen soll, verwendet der Server für unterstützte Telefonie die funktion lineGetRequest , um die vollständige Anforderung abzurufen, die die Parameter der Anforderung enthält. Der Server verfügt nun über alle benötigten Informationen, z. B. die Nummer zum Wählen oder die Identifizierung des Erstellers der Anforderung. Zunächst muss der Server jedoch den arbeitsspeicher zuordnen, der zum Speichern dieser Informationen benötigt wird.
- Schließlich führt der Server die Anforderung aus, indem er die entsprechende TAPI-Funktion oder einen Funktionssatz aufruft.
Wenn TAPI keine Anwendung starten kann, die als Anforderungsempfänger dienen kann, schlägt der Anruf für unterstützte Telefonie fehl und gibt den Fehler TAPIERR_NOREQUESTRECIPIENT zurück.
Hinweise zu Vorgängen von Anforderungsempfängern
Die folgenden Informationen betreffen Systeme, auf denen Anfragen für unterstützte Telefonie verarbeitet werden:
- Die Standardregistrierung sollte eine Anruf-Manager-Anwendung in der Prioritätsliste für tapiRequestMakeCall auflisten. Es wäre hilfreich, aber nicht unbedingt erforderlich, wenn die Anruf-Manager-Anwendung über eine Menüoption verfügt, mit der Benutzer sie auf die höchste Priorität festlegen können.
- Wenn eine Empfängeranwendung für unterstützte Telefonie automatisch von TAPI gestartet wird und es sich um die einzige TAPI-Anwendung im System handelt, initialisiert diese Aktion TAPI. Wenn die Empfängeranwendung für unterstützte Telefonie das Leitungsgerät initialisiert und herunterfährt, bevor sie sich für Anfragen für unterstützte Telefonie registriert, wird TAPI ebenfalls heruntergefahren, und die Anforderung für unterstützte Telefonie geht verloren. Unterstützte Telefonieanforderungen können auch verloren gehen, wenn eine andere TAPI-Anwendung, die gestartet wird, eine Initialisierung und das Herunterfahren ausführt.