etThreeWayFlash Sample Program


This program demonstrates how to control more than one call in order to do a 3-Way conference call or other type of call that involves using flash or "hook-flash".

Many devices such as modems support only one line, and some only one call per line, yet services from the central office (CO) or a PBX allow you to still control multiple calls by sending special characters such as the "flash", usually represented by the exclamation point ("!").

NOTE: If you have a device that supports more than one call per line, such as the Way2Call Hi-Phone, Dialogic card, etc., please use our conference and transfer samples for better call control. Also voicemodems will probably require settings changes for the flash to work.

Click here for more information about VoiceModems.

Using This Sample Program
Download this Sample Program 
How this Sample Program Works
Source Code
Release Notes

Development Environment Technical Information
Telephony Hardware Technical Information



  • TeleTools 3.7 or above

  • TAPI Telephony device or voicemodem*

  • Phone line with 3-way calling

  • A way to answer the two phone calls (or two willing friends)

Using This Sample Program

*There is a problem with most voicemodems that will require a change in settings in order for it to be able to send a 'flash' by altering the DTMF tone duration.

Configuring a voicemodem to send a flash

Before we start, we need to cover once again the limitations of voicemodems as Telephony devices.  Most modems will send DTMF digits and a flash using the same setting.  This means there is no separate command for changing DTMF tone duration and flash duration.  In addition, voicemodems do not allow TAPI to change this setting directly.  This means the out of the box, the default flash duration setting for voicemodems while allowing reasonably quick and short DTMF tones, will probably be too short to work as a flash.  It will 'click' the phone line, but not long enough to engage a flash.  The opposite may be true in that if the duration is set too long, the line will hangup instead of flash. For information about how to alter the INF file for the modem, change the registry, or try to use the TAPI passthrough mode to send AT commands to the modem to fix this, click HERE.

Configuring a TAPI device to send a flash

Telephony devices other than voicemodems have their own configurable TSP.  You can access the TSP by using the etLine.DeviceConfigure method in your code or in the TeleScope menu, or by the phone and modems advanced section in the Control Panel.  You will find settings, often in a 'PBX Strings' section, that will allow you to set the flash duration.  It is here that you can also set the device to handle 'hold', 'forward', 'conference', and other features.  A setting of about a half second is usually good for a flash.  If the setting is too short, you will only click the phone line but not engage flash. If the setting is too long, you will hangup the call instead.

How to Use this Sample

You will make two outgoing calls and join them together in a threeway call with your phone.  You are the first party. Place the number to your second party in the first phone number field and the number for your second party in the second call field.  Press the first call dial button and and answer the call.  When it shows 'connected', press the second call dial button.  This will send the 'flash', delay to give time for the new dialtone, and then dial the second number.  Answer the second call and when you see the button caption change to "flash again", you can then press this button and you should be connected on a threeway call.


Download this Sample Program

For Use TeleTools v3.7



Borland Delphi 5,6,7 Source code and wave files
Visual Basic 5,6 Source code and wave files
Tell us what you need? Click here and tell us what you need!


How this Sample Program Works

This sample uses the etLine.TAPITSP property to check for the string "MODEM" in order to determine if you are using a modem.  We populate the device combobox with a list of the TAPI devices on your machine with the etLine.DeviceList property.  The device is selected by setting the etLine.DeviceID property and then activated with etLine.DeviceActive.

When you click the Dial First Call button, we set the phone number with the etLine1.CallPhoneNumber property and dial with etLine.CallDial.  When the call is connected, the etLine_OnConnected event fires and in this event we enable the Dial Second Call button.  When this button is pressed, we dial a second call by using the etLine.CallSendDigits method to send a flash (!) character to the line.  If the flash duration is set correctly for the device, then sending the flash will place the first call on hold and provide a new dialtone.  Since this sample isn't using features of a device that can handle multiple calls, we can't detect any call progress information such as dialtone or the connected state. The only way we have to handle the call is to send the flash, then use a sleep timer to hopefully provide enough time to get a new dialtone, and then use etLine.CallSendDigits again to send DTMF digits which dials the second call.

This must be a supervised call, since you don't know when the next call connects.  The Dial Second Call Button has now changed to a Flash Again button.  When the second party answers, or when you want to connect the second call while it is dialing, the Flash Again button uses etLine.CallSendDigits once again to connect all three parties in a three way call by sending a flash.

If your device supports it, the DTMF duration parameter, which is separate from the flash duration parameter in the TSP for your device, will let you control how quickly the DTMF digits are sent.  In this way, if you are not using a voicemodem, you can send digits very quickly, but still have a flash that lasts half a second.  

This program is very similar to the etVoiceModemCallWaiting sample program.  Both samples show how to use etLine.CallSendDigits to send DTMF tones and the flash to handle three way calling, call waiting and other Centrex type call services.




Activates and deactivates the TAPI device

ComboBoxDevice Selects or changes the TAPI device
ButtonDial Dials a call with the etLine.CallDial method
ButtonHangup Hangs up a call with the etLine.CallHangup method
ButtonClear Clears the call progress window
ButtonLineConfig:  Calls the etLine.DeviceConfig method to display the device's TSP config window
ButtonTeleScope:  Calls the etLine.TeleScopeVisible property to popup TeleScope
ButtonInfo Displays in about box for this sample
Button3Way Uses the etLine.CallSendDigits method to send flash commands
ButtonSecondCall Uses the etLine.CallSendDigits method to send DTMF digits and flash commands
TextPhoneNumber Holds the number to dial the initial call
Text3WayNumber Holds the number to dial to connect a threeway call
LabelToneDuration text label
TextToneDuration Holds the duration parameter for devices that can control the duration of DTMF tones
LabelCallProgress text label
Memo1 Call progress memo field
etLine The TeleTools etLine telephony component


Event Handler Routine



Load the form and activate the TeleTools components

CheckActive_Click Activate the telephony device
ComboDevice_Click  Select the telephony device
cmdButtonDial_Click Dial the first call
cmdButtonHangup_Click Hangup the call
cmdButtonSecondCall_Click Dial the second call you with to 3-way with
cmdButton3Way_Click Send the second flash to connect the call
cmdButtonClear_Click Clear the log window
CommandConfigDlg_Click Display the TSP configuration screen for the device.  (not all devices enable this)
cmdButtonTeleScope_Click toggle the display of the TeleTools TeleScope utility
etLine1_OnCallBegin etLine event reporting a call has begun
btnInfo_Click display information about this sample program
etLine1_OnDialtone etLine event reporting that a dialtone was detected
etLine1_OnDialing etLine event reporting that a call has just been dialed
etLine1_OnBusy etLine event reporting a busy signal was detected
etLine1_OnProceeding etLine event reporting the call has dialed and is proceeding through the system
etLine1_OnCallerID etLine event reporting information about the calling party
etLine1_OnCalledID etLine event reporting the information for the called party
etLine1_OnConnected etLine event reporting that a call is connected
etLine1_OnCallEnd etLine event reported the end of the current call
etLine1_OnDisconnected etLIne event letting you know the remote party has disconnected the call
etLine1_OnIdle etLine event letting you know the current call is idle, ready for another call
etLine1_OnOffering etLine event reporting an inbound call is being offered
etLine1_OnRing etLine event reporting an incoming ring is detected from an inbound call
etLine1_OnRingBack etLIne event reporting that ringing was detected on an outbound call
etLine1_OnSpecialInfo etLine event that reports as SIT tone was detected 
etLine1_OnDigitsSent etLine event that reports when a DTMF digit was sent
etLine1_OnError etLine Error reporting event
Form_Unload Disable the components and unload the form





Write status text to the log window


Release Notes

September 20, 2003

First Release