High performance VoIP SDK for .Net developers

VoIP SIP SDK

Building an auto dialer system using DTMF response to transfer to agent

Download: DTMFAutoDialer.zip

In this article you will learn how to build an auto dialer system using DTMF response in order to transfer the call to an agent with the professional support of Ozeki VoIP SIP SDK. Please use the source codes and their explanations to start building your DTMF autodialer using Ozeki SIP SDK.

Introduction

DTMF signaling in VoIP calls can be used for lots of purposes. You can use it, for example, for user authentication or IVR (Interactive Voice Response) tree navigation.

In a call center the IVR navigation can be the base of a call routing process. When the user gets to a point in an IVR tree when there is no other option to choose the call center server can transfer the call to an agent. This call transfer is made automatically therefore needs an autodialer system.

The call transfer process can be made according to the location of the caller in the IVR tree, for example is the customer has chosen that their problem is with service "A" then the call center can redirect the call to an expert of that service.

In most call center applications there are also a special keypress that redirects the call to a human operator any time. This is usually key #.


Figure 1 - DTMF auto dialer

Ozeki VoIP SIP SDK provides all the magnificent background support that is needed for DTMF signal handling, therefore you can easily make a call center server that operates with DTMF signals.

Autodialers are used for specifying if the call was answered by a person. DTMF autodialers are one of the simplest solutions in this topic. You ask the remote peer that answered the call to press a key, and if the key is pressed, the call was answered by a human and need to be transferred to a call center agent, if not, the call was answered by a machine and needs to be ended.

This example program only extends the standard softphone functions with a simple code snippet that reads out the sentence "Please press one" and waits for some time for the DTMF signal (Code 1).

case CallState.InCall:
    microphone.Start();
    connector.Connect(microphone, mediaSender);
    connector.Connect(speech, mediaSender);
    speaker.Start();
    connector.Connect(mediaReceiver, speaker);
    speech.AddAndStartText("Please press one");
    mediaSender.AttachToCall(call);
    mediaReceiver.AttachToCall(call);
    System.Timers.Timer timer = new System.Timers.Timer(6000);
    timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    timer.Start();
    break;

Code 1 - Waiting for a human response

Code 2 shows what happens if the called client sends a DTMF signal. If the signal is the one the program has asked for, the call will be blind transferred to another number.

private void call_DtmfReceived(object sender, VoIPEventArgs<DtmfInfo> e)
{
    DtmfInfo dtmfInfo = e.Item;

    InvokeGUIThread(() =>
    {
        RegistrationState.Text = String.Format("DTMF signal received: {0} ", dtmfInfo.Signal.Signal);
        DialedNumber.Text = String.Format("DTMF signal received: {0} ", dtmfInfo.Signal.Signal);
        if (dtmfInfo.Signal.Signal == 1)
            call.BlindTransfer("852");
    });
}

Code 2 - The proper DTMF answer received

If the DTMF signal did not arrive in time, the call is simply ended with the conclusion that a machine answered the call (Code 3).

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    if (call != null)
    {
        call.HangUp();
        call = null;
    }
}

Code 3 - When the time is up, the call is ended

The above mentioned functions simply extend the original softphone features. All the other parts of the example are the same as in the case of any softphone solutions.

If you have any questions or need assistance, please contact us at info@voip-sip-sdk.com

You can select a suitable Ozeki VoIP SIP SDK license for building a DTMF autodialer on Pricing and licensing information page

Related Pages