lineOpenW-Funktion (tapi.h)

Die lineOpen--Funktion öffnet das durch den Gerätebezeichner angegebene Leitungsgerät und gibt einen Linienziehpunkt für das entsprechende geöffnete Liniengerät zurück. Dieser Leitungsziehpunkt wird in nachfolgenden Vorgängen auf dem Leitungsgerät verwendet.

Syntax

LONG lineOpenW(
  HLINEAPP               hLineApp,
  DWORD                  dwDeviceID,
  LPHLINE                lphLine,
  DWORD                  dwAPIVersion,
  DWORD                  dwExtVersion,
  DWORD_PTR              dwCallbackInstance,
  DWORD                  dwPrivileges,
  DWORD                  dwMediaModes,
  LPLINECALLPARAMS const lpCallParams
);

Parameter

hLineApp

Behandeln Sie die Registrierung der Anwendung mit TAPI.

dwDeviceID

Identifiziert das zu öffnende Leitungsgerät. Sie kann entweder ein gültiger Gerätebezeichner oder der Wert sein.

Wert Bedeutung
LINEMAPPER-
Dieser Wert wird verwendet, um ein Leitungsgerät im System zu öffnen, das die in lpCallParamsangegebenen Eigenschaften unterstützt. Die Anwendung kann lineGetID- verwenden, um den Bezeichner des geöffneten Leitungsgeräts zu ermitteln.

lphLine

Zeigen Sie auf einen HLINE-Handle, der dann mit dem Ziehpunkt geladen wird, der das geöffnete Liniengerät darstellt. Verwenden Sie dieses Handle, um das Gerät beim Aufrufen anderer Funktionen auf dem offenen Leitungsgerät zu identifizieren.

dwAPIVersion

API-Versionsnummer, unter der die Anwendung und die Telefonie-API den Betrieb vereinbart haben. Diese Zahl wird mit lineNegotiateAPIVersionabgerufen.

dwExtVersion

Nummer der Erweiterungsversion, unter der die Anwendung und der Dienstanbieter dem Betrieb zustimmen. Diese Zahl ist null, wenn die Anwendung keine Erweiterungen verwendet. Diese Zahl wird mit lineNegotiateExtVersionabgerufen.

dwCallbackInstance

Benutzerinstanzdaten, die an die Anwendung mit jeder Nachricht zurückgesendet wurden, die dieser Zeile zugeordnet ist, oder mit Adressen oder Anrufen in dieser Zeile. Dieser Parameter wird nicht von der Telefonie-API interpretiert.

dwPrivileges

Berechtigung, die die Anwendung möchte, wenn sie über einen Aufruf benachrichtigt wird Dieser Parameter enthält mindestens eine der LINECALLPRIVILEGE_ Konstanten. Für Anwendungen, die TAPI Version 2.0 oder höher verwenden, können Werte für diesen Parameter auch mit einer oder mehreren der LINEOPENOPTION_ Konstantenkombiniert werden.

Wenn die option LINEOPENOPTION_SINGLEADDRESS angegeben ist, interessiert sich die Anwendung nur für neue Aufrufe, die auf der adresse angezeigt werden, die vom dwAddressID Member in der LINECALLPARAMS- Struktur angegeben wird, auf die durch den lpCallParams Parameter (der angegeben werden muss) verweist.

Wenn LINEOPENOPTION_SINGLEADDRESS angegeben ist, aber entweder lpCallParams ungültig ist oder die eingeschlossene dwAddressID- nicht in der Zeile vorhanden ist, schlägt das Öffnen mit LINERR_INVALADDRESSID fehl.

Zusätzlich zum Festlegen des dwAddressID- Mitglieds der LINECALLPARAMS- Struktur auf die gewünschte Adresse muss die Anwendung auch dwAddressMode- in LINECALLPARAMS- auf LINEADDRESSMODE_ADDRESSID festlegen.

Die Option LINEOPENOPTION_SINGLEADDRESS wirkt sich nur auf die Zuweisung der anfänglichen Anrufbesitz von Anrufen aus, die vom Dienstanbieter mithilfe einer LINE_NEWCALL Nachricht erstellt wurden. Eine Anwendung, die die Zeile mit LINECALLPRIVILEGE_MONITOR öffnet, empfängt weiterhin Überwachungshandles für alle Anrufe, die in der Zeile erstellt wurden. Darüber hinaus ist die Anwendung nicht darauf beschränkt, Anrufe zu tätigen oder andere Vorgänge auszuführen, die sich auf andere Adressen in der geöffneten Zeile auswirken.

Wenn die option LINEOPENOPTION_PROXY angegeben wird (nur TAPI 2.0 oder höher), muss die Anwendung auch angeben, welche spezifischen Proxyanforderungen sie verarbeiten kann. Dazu übergeben Sie im lpCallParams Parameter einen Zeiger auf eine LINECALLPARAMS- Struktur, in der die dwDevSpecificSize- und dwDevSpecificOffset- elemente festgelegt wurden, um ein Array DWORD-s zu trennen. Jedes Element dieses Arrays muss eine der LINEPROXYREQUEST_ Konstantenenthalten. Beispielsweise würde eine Proxyhandleranwendung, die alle fünf agentbezogenen Funktionen unterstützt, ein Array von fünf DWORDs (dwDevSpecificSize ) übergeben, die die fünf definierten LINEPROXYREQUEST_ Werte enthält.

Die Proxyanforderungshandleranwendung kann auf jedem Computer ausgeführt werden, auf dem die Autorisierung zum Steuern des Leitungsgeräts vorhanden ist. Anforderungen werden jedoch immer über den Server weitergeleitet, auf dem der Dienstanbieter ausgeführt wird, der das Leitungsgerät tatsächlich steuert. Daher ist es am effizientesten, wenn die Anwendung, die Proxyanforderungen (z. B. ACD-Agent-Steuerung) verarbeitet, direkt auf dem Server zusammen mit dem Dienstanbieter ausgeführt wird.

Nachfolgende Versuche, durch dieselbe Anwendung oder andere Anwendungen das Leitungsgerät zu öffnen und zu registrieren, um dieselben Proxyanforderungen wie eine anwendung zu verarbeiten, die bereits registriert ist, schlagen mit LINEERR_NOTREGISTERED fehl.

Um die Verarbeitung von Anforderungen in der Zeile zu beenden, ruft die Anwendung einfach lineCloseauf.

Andere Kennzeichenkombinationen geben den LINEERR_INVALPRIVSELECT Fehler zurück.

dwMediaModes

Der Medientyp oder die Für die Anwendung interessanten Modi. Dieser Parameter wird verwendet, um die Anwendung als potenzielles Ziel für eingehende Anrufe und Anrufübergabe für den angegebenen Medientyp zu registrieren. Dieser Parameter ist nur dann sinnvoll, wenn das Bit LINECALLPRIVILEGE_OWNER in dwPrivileges festgelegt ist (andernfalls ignoriert). Dieser Parameter verwendet eine oder mehrere der LINEMEDIAMODE_ Konstanten.

lpCallParams

Zeiger auf eine Struktur vom Typ LINECALLPARAMS. Dieser Zeiger wird nur verwendet, wenn LINEMAPPER oder LINEOPENOPTION_PROXY verwendet wird; andernfalls wird lpCallParams ignoriert. Er beschreibt den Aufrufparameter, den das Leitungsgerät bereitstellen kann.

Rückgabewert

Gibt Null zurück, wenn die Anforderung erfolgreich ist oder eine negative Fehlernummer auftritt, wenn ein Fehler auftritt. Mögliche Rückgabewerte sind:

LINEERR_ALLOCATED, LINEERR_LINEMAPPERFAILED, LINEERR_BADDEVICEID, LINEERR_NODRIVER, LINEERR_INCOMPATIBLEAPIVERSION, LINEERR_NOMEM, LINEERR_INCOMPATIBLEEXTVERSION, LINEERR_OPERATIONFAILED, LINEERR_INVALAPPHANDLE, LINEERR_RESOURCEUNAVAIL, LINEERR_INVALMEDIAMODE, LINEERR_STRUCTURETOOSMALL, LINEERR_INVALPOINTER, LINEERR_UNINITIALIZED, LINEERR_INVALPRIVSELECT, LINEERR_REINIT, LINEERR_NODEVICE, LINEERR_OPERATIONUNAVAIL.

Bemerkungen

Wenn LINEERR_ALLOCATED zurückgegeben wird, kann die Linie aufgrund einer "persistenten" Bedingung nicht geöffnet werden, z. B. durch einen seriellen Anschluss, der ausschließlich von einem anderen Prozess geöffnet wird. Wenn LINEERR_RESOURCEUNAVAIL zurückgegeben wird, kann die Zeile aufgrund einer dynamischen Ressourcenüberlastung wie z. B. in DSP-Prozessorzyklen oder Arbeitsspeicher nicht geöffnet werden. Diese Überlastung kann vorübergehend sein, verursacht durch die Überwachung von Medientypen oder Tönen, und Änderungen an diesen Aktivitäten durch andere Anwendungen können es ermöglichen, die Linie innerhalb kurzer Zeit erneut zu öffnen. Wenn LINEERR_REINIT zurückgegeben wird und TAPI-Erneutitialisierung angefordert wurde (z. B. aufgrund des Hinzufügens oder Entfernens eines Telefoniedienstanbieters), werden lineOpen Anforderungen mit diesem Fehler abgelehnt, bis die letzte Anwendung die Verwendung der API heruntergefahren hat (unter Verwendung von lineShutdown); zu diesem Zeitpunkt wird die neue Konfiguration wirksam, und Anwendungen dürfen erneut lineInitializeExaufrufen.

Das Öffnen einer Leitung berechtigt immer den Antrag, Anrufe an beliebige Adressen zu tätigen, die in der Zeile zur Verfügung stehen. Die Fähigkeit der Anwendung, eingehende Anrufe zu behandeln oder das Ziel von Anrufübergaben in der Zeile zu sein, wird durch den dwMediaModes Parameter bestimmt. Die lineOpen-Funktion registriert die Anwendung als Interesse an der Überwachung von Anrufen oder empfangen des Besitzes von Anrufen, die der angegebenen Medientypen sind. Wenn die Anwendung nur Aufrufe überwachen möchte, kann sie LINECALLPRIVILEGE_MONITOR angeben. Wenn die Anwendung nur ausgehende Anrufe tätigen möchte, kann sie LINECALLPRIVILEGE_NONE angeben. Wenn die Anwendung bereit ist, nicht klassifizierte Aufrufe (Aufrufe unbekannter Medientypen) zu steuern, kann sie LINECALLPRIVILEGE_OWNER und LINEMEDIAMODE_UNKNOWN angeben. Andernfalls sollte die Anwendung den Medientyp angeben, der für die Verarbeitung interessiert ist. Die Anwendung kann die lineSetCallPrivilege--Funktion aufrufen, um die durch die LINECALLPRIVILEGES_Constants angegebenen Aufrufberechtigungen zu ändern.

Die mit lineOpen angegebenen Medientypen zum Standardwert für die Medientypüberwachung des Anbieters für die Ermittlung des ersten Eingehenden Anruftyps hinzufügen. Die lineMonitorMedia--Funktion ändert die Maske, die LINE_MONITORMEDIA Nachrichten steuert. Wenn ein Zeilengerät mit Besitzerberechtigung geöffnet wird und kein Erweiterungsmedientyp registriert ist, wird der Fehler LINEERR_INVALMEDIAMODE zurückgegeben.

Eine Anwendung, die erfolgreich ein Leitungsgerät geöffnet hat, kann immer Anrufe mit lineMakeCall, lineUnpark-, linePickup-und lineSet initiieren. (mit einem NULL-hCall-) sowie lineForward- verwenden (vorausgesetzt, dass dies durch die Gerätefunktionen, den Zeilenzustand, usw.

Eine einzelne Anwendung kann mehrere Flags gleichzeitig angeben, um mehrere Medientypen zu verarbeiten. Konflikte können auftreten, wenn mehrere Anwendungen dasselbe Leitungsgerät für denselben Medientyp öffnen. Diese Konflikte werden durch ein Prioritätsschema gelöst, in dem der Benutzer den Anwendungen relative Prioritäten zuweist. Benutzer können Anwendungsprioritäten festlegen, indem sie die lineSetAppPriority--Funktion aufrufen. Nur die Anwendung mit der höchsten Priorität für einen bestimmten Medientyp erhält je den Besitz (nicht angefordert) eines Aufrufs dieses Medientyps. Der Besitz kann empfangen werden, wenn ein eingehender Anruf zuerst eingeht oder wenn ein Anruf übergeben wird. Die lineHandoff--Funktion wird aufgerufen, um den Besitz eines Aufrufs an eine andere Anwendung zu übergeben. Wenn der Benutzer der Anwendung keine Prioritäten zuweist, und mehrere Anwendungen dasselbe Liniengerät standardmäßig öffnen, hat die Anwendung, die lineOpen zuerst aufgerufen wird, die höchste Priorität.

Jede Anwendung (einschließlich einer anwendung mit niedrigerer Priorität) kann immer den Besitz mit lineGetNewCalls oder lineGetConfRelatedCallserwerben. Wenn eine Anwendung eine Zeile zur Überwachung öffnet, die aufruft, die in der Zeile vorhanden ist, werden LINE_CALLSTATE Nachrichten für diese vorhandenen Anrufe nicht automatisch für die neue Überwachungsanwendung generiert. Die Anwendung kann die Anzahl der aktuellen Aufrufe in der Zeile abfragen, um zu bestimmen, wie viele Aufrufe vorhanden sind, und wenn dies möchten, kann sie lineGetNewCalls- aufrufen, um Handles für diese Aufrufe abzurufen.

Eine Anwendung, die automatisierte Spracheingabe behandelt, sollte auch den interaktiven Modus zum Öffnen von VoIP auswählen und der niedrigsten Priorität für interaktive Spracheingaben zugewiesen werden. Der Grund dafür ist, dass Dienstanbieter alle Sprachmedientypen als interaktive Stimme melden. Wenn die Ermittlung des Medientyps nicht von der Anwendung für den UNBEKANNTen Medientyp durchgeführt wird und keine interaktive Sprachanwendung das Leitungsgerät geöffnet hat, können Sprachanrufe die automatisierte Sprachanwendung nicht erreichen und werden verworfen.

Dieselbe Anwendung oder verschiedene Instanziierungen derselben Anwendung können dieselbe Zeile mehrmals mit demselben oder unterschiedlichen Parametern öffnen.

Wenn eine Anwendung ein Zeilengerät öffnet, muss sie die ausgehandelte API-Version angeben und, wenn sie die Erweiterungen der Zeile verwenden möchte, die gerätespezifische Erweiterungsversion der Zeile angeben. Diese Versionsnummern sollten mit lineNegotiateAPIVersion und lineNegotiateExtVersionabgerufen worden sein. Die Versionsnummerierung ermöglicht das Mischen und Abgleichen verschiedener Anwendungsversionen mit unterschiedlichen API-Versionen und Dienstanbieterversionen.

LINEMAPPER ermöglicht es einer Anwendung, eine Zeile indirekt auszuwählen – durch die gewünschten Dienste. Beim Öffnen eines Leitungsgeräts mit LINEMAPPER gilt Folgendes: Alle Elemente von Anfang der LINECALLPARAMS Datenstruktur über dwAddressMode relevant. Wenn dwAddressMode LINEADDRESSMODE_ADDRESSID bedeutet dies, dass jede Adresse in der Zeile akzeptabel ist. andernfalls, wenn dwAddressMode- LINEADDRESSMODE_DIALABLEADDR ist und angibt, dass eine bestimmte Ursprungsadresse (Telefonnummer) durchsucht wird oder ob es sich um eine anbieterspezifische Erweiterung handelt, dann dwOrigAddressSize/Offset und der Teil des Variablenteils, auf den sie verweisen, ebenfalls relevant sind. Wenn dwAddressMode eine anbieterspezifische Erweiterung ist, können zusätzliche Informationen im dwDeviceSpecific variabel angepassten Member enthalten sein.

Anmerkung

Der header tapi.h definiert lineOpen als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Zielplattform- Fenster
Header- tapi.h
Library Tapi32.lib
DLL- Tapi32.dll

Siehe auch

Referenz zu grundlegenden Telefoniediensten

LINECALLPARAMS-

LINE_CALLSTATE

LINE_MONITORMEDIA

LINE_PROXYREQUEST

TAPI 2.2 Referenzübersicht

lineClose-

lineForward-

lineGetConfRelatedCalls

lineGetID-

lineGetNewCalls

lineInitializeEx-

lineMakeCall-

lineMonitorMedia-

lineNegotiateAPIVersion

lineNegotiateExtVersion

linePickup-

lineProxyMessage-

lineProxyResponse-

lineSetupConference-

lineShutdown-

lineUnpark-