|
|
|
|
- Principio
- Etapas a seguir
- Ejemplo
- Ejemplo utilizado para gestionar las llamadas entrantes en el principal Thread
Telefonía: Gestión de las llamadas entrantes
La gestión de las llamadas entrantes se realiza en un "Hilo" específico. Cuando se detecta una llamada entrante, se ejecuta el Procedure associated con el hilo. La gestión de la llamada se realiza en este Procedure. Para administrar las llamadas entrantes en una aplicación WINDEV o WINDEV Mobile: - Defina (si es necesario) el dispositivo TAPI en el que deben detectarse las llamadas.. Utilice las funciones:
| | tapiCapability | Devuelve las características de un dispositivo de telefonía. | tapiDevice | Selecciona el dispositivo TAPI que se utilizará durante las siguientes operaciones de telefonía: | tapiDeviceList | Enumera los dispositivos compatibles con TAPI 2.0 y TAPI 3.1 instalados en el ordenador actual. |
- Inicie la detección de llamadas entrantes con tapiEscuchar. Esta función ejecuta un WLanguage Procedure específico. Este Procedure se ejecutará automáticamente cuando se detecte una llamada entrante.
- En este procedimiento, es posible:
- averiguar el estado de la llamada a través de las siguientes constantes:
- tapiLineBusy: El Line está actualmente ocupado.
- tapiLineConnected: El Line está conectado.
- tapiLineDialing: Marcación en curso.
- tapiLineDialTone: El Line recibe un tono de llamada
- tapiLineDisconnected: El corresponsal ha colgado
- tapiLineProceeding: La llamada se marca: búsqueda del corresponsal
- tapiLineRingBack: Timbre en curso
- tapiNewCall: Nueva llamada detectada en espera de respuesta o de rechazo.
- tapiCallInformation: La información adicional (presentación del número) está disponible. En la mayoría de los casos, esta información estará disponible después del primer anillo.
- gestionar la llamada a través de las siguientes funciones:
- averiguar las características de la llamada entrante:
| | tapiCallDuring | Devuelve la duración de la llamada (diferencia entre la fecha y hora de inicio de la llamada y la fecha y hora de finalización de la misma). | tapiCallEnd | Devuelve la fecha y hora de finalización de la llamada. | tapiCallerID | Se utiliza para averiguar el número de Phone que llama (el que llama). | tapiCallIsOver | Permite saber si la llamada entrante o saliente ha finalizado. | tapiCallStart | Devuelve la fecha y hora de inicio de la llamada (llamada entrante o saliente). |
- realizar operaciones específicas:
| | tapiAnswerCall | Contesta una llamada entrante que fue detectada. | tapiKeyPressed | Devuelve el historial de las teclas pulsadas en el teclado Phone desde la última llamada a tapiKeyPressed. | tapiPlay | Reproduce un archivo de sonido (.WAV) para la Line especificada . | tapiRecord | Records the current communication as a".WAV" file. | tapiSendKey | Permite simular el uso de las teclas de Phone. | tapiStop | Deja de leer un mensaje pregrabado (tapiPlay). |
Atención: Este WLanguage Procedure que se ejecuta en un hilo, todas las limitaciones de los hilos deben ser cumplidas (ninguna apertura de ventana, ninguna gestión de temporizador, ninguna gestión de Event, ...). Para obtener más información, consulte Gestión de hilos con WINDEV. Le recomendamos que limite el número de procesos realizados en este Procedure. De hecho, durante la duración de la llamada, la detección de las otras llamadas (así como de todos los eventos de telefonía) se congela.. Si hay que realizar Process es larga, se aconseja Process la llamada en el thread principal de la aplicación (véase el ejemplo siguiente).
- Para finalizar la sesión de detección de llamadas entrantes, utilice tapiStopCallDetection.
Ejemplo utilizado para gestionar las llamadas entrantes en el principal Thread - Código para declarar las variables globales de la ventana utilizada para la detección de llamadas. Los diferentes eventos utilizados para gestionar las llamadas en el principal Thread de la aplicación se declaran en este código.
GLOBAL gnEventID is int // Implement an event to manage the incoming calls in popup IF Event("DetectedCall", "*.*", "PhoneCall") = 0 THEN Error("Unable to manage the popup for call detection", ErrorInfo()) END IF Event("EndDetectedCall", "*.*", "EndPhoneCall") = 0 THEN Error("Unable to manage the popup for call detection", ErrorInfo()) END IF Event("DetectedCallIdentifier", "*.*", "PhoneCallInfo") = 0 THEN Error("Unable to manage the popup for call detection", ErrorInfo()) END
- Código de inicialización de la ventana: este código se utiliza para iniciar el Procedure para la detección de llamadas.
// Start the service for call detection IF tapiListen("IncomingCall", tapiOptionMediaModeFax, "CallDetection") THEN // The service for call detection is started Message("Call detection enabled") ELSE // The service for call detection is not started Error("Unable to start the call detection" + CR + ... "Error details:"+ CR + ErrorInfo(errMessage)) END
- Procedure para la detección de llamadas:
Este Procedure se utiliza para detectar las llamadas entrantes. Para cada llamada entrante, las características de la misma son transmitidas al Thread principal por PostMessage.
PROCEDURE CallDetection(nServiceID, nCallID, nStatus) // WARNING: // The processes performed by this procedure are called from a thread // The display should be done via the main thread // (this is why PostMessage is used) // The "Trace" function must be used to debug this process // detection of incoming calls SWITCH nStatus // Detect a new call: // Note: Additional information will be available after the fist ring CASE tapiNewCall: // Signal to the main window that a new call is arriving // to open a popup PostMessage(Handle(Window_Call), "PhoneCall", nCallID, nStatus) // Information about the call is available CASE tapiCallInformation: // Signal to the main window that a new call is arriving // to open a popup PostMessage(Handle(Window_Call), "PhoneCallInfo", nCallID, nStatus) // The line was hung up CASE tapiLineDisconnected: // Signal to the main window that a new call is arriving // to open a popup PostMessage(Handle(Window_Call), "PhoneCallEnd", nCallID, nStatus) END
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|