|
|
|
|
|
- Principle
- Steps to follow
- Example
- Example used to manage the incoming calls in the main thread
Telephony: Managing the incoming calls
The management of the incoming calls is performed in a specific "thread". When an incoming call is detected, the procedure associated with the thread is run. The management of the call is performed in this procedure. To manage the incoming calls in a WINDEV or WINDEV Mobile application: - Define (if necessary) the TAPI device on which the calls must be detected. Use the functions:
| | tapiCapability | Returns the characteristics of a telephony device. | tapiDevice | Selects the TAPI device that will be used during the following telephony operations: | tapiDeviceList | Lists the TAPI 2.0 and TAPI 3.1 compatible devices installed on the current computer. |
- Start the detection of incoming calls with tapiListen. This function runs a specific WLanguage procedure. This procedure will be automatically run when an incoming call is detected.
- In this procedure, you can:
- find out the status of the call via the following constants:
- tapiLineBusy: The line is currently busy.
- tapiLineConnected: The line is connected.
- tapiLineDialing: Dialing in progress.
- tapiLineDialTone: The line gets a dial tone
- tapiLineDisconnected: The correspondent has hung up
- tapiLineProceeding: The call is dialed: searching for the correspondent
- tapiLineRingBack: Ringing in progress
- tapiNewCall: New call detected waiting for an answer or for a reject.
- tapiCallInformation: The additional information (presentation of the number) is available. In most cases, this information will be available after the fist ring.
- manage the call via the following functions:
- finding out the characteristics of the incoming call:
| | tapiCallDuring | Returns the duration of the call (difference between the start date and time of call and the end date and time of call). | tapiCallEnd | Returns the date and time of the end of call. | tapiCallerID | Used to find out the calling phone number (the one that calls). | tapiCallIsOver | Used to find out whether the incoming or outgoing call is ended. | tapiCallStart | Returns the date and time of the beginning of call (incoming or outgoing call). |
- perform specific operations:
| | tapiAnswerCall | Answers an incoming call that was detected. | tapiKeyPressed | Returns the history of the keys pressed on the phone keypad since the last call to tapiKeyPressed. | tapiPlay | Plays a sound file (.WAV) for the specified line. | tapiRecord | Records the current communication as a".WAV" file. | tapiSendKey | Allows you to simulate the use of phone keys. | tapiStop | Stops reading a pre-recorded message (tapiPlay). |
Caution: This WLanguage procedure being run in a thread, all the constraints of the threads must be complied with (no window opening, no timer management, no event management, ...). For more details, see Managing threads with WINDEV. We recommend that you limit the number of processes performed in this procedure. Indeed, during the duration of the call, the detection of the other calls (as well as all the telephony events) is frozen. If long processes must be performed, we advise you to process the call in the main thread of the application (see the example below).
- To end the session for detecting the incoming calls, use tapiStopCallDetection.
Example used to manage the incoming calls in the main thread - Code for declaring the global variables of the window used for call detection. The different events used to manage the calls in the main thread of the application are declared in this code.
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
- Window initialization code: this code is used to start the procedure for call detection.
// 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 for call detection:
This procedure is used to detect the incoming calls. For each incoming call, the characteristics of the call are transmitted to the main thread by 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
Related Examples:
|
Complete examples (WINDEV): WD Telephony
[ + ] This example presents the telephony functions of WINDEV. The following topics are presented in this example: 1/ How to dial a phone number 2/ Detect and identify the incoming calls Summary of the example supplied with WINDEV: This example presents the telephony functions supplied with WINDEV. Once contacts have been entered in the main window (the table is in edit), you will be able to call them from the application directly (your computer must be equipped with a modem properly installed). You will be able to get a notification for the incoming calls and to identify the caller
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|