≡ Menu

Building An IVRS Application

The most essential requirement of an IVRS is that it has to work 24 hours a day, 364 days a year! It is not an application like your MS Word or Outlook Express that you run them when you need! Also IVRS does not have any User Interface. The reason for not having User Interface is obvious! It interacts with human through voice and telephone instrument keypad. (These are actually DTMF Digits. I will explain about DTMF, Pulse dialing in another post.) So, a typical IVR application does not require to be executed manually, it starts as a service in Windows Operating System as soon as it boots up. ( Or same way in Linux)
So, in order build an IVRS Application, the following are essential

1. How many channels to be used? How many calls it should handle simultaneously?
2. How should it be connected to PSTN Lines? Connection may be in two modes, analog and digital.
3. Type of Hardware used. It requires two kind of hardware – a. A PC or a Server b. CTI hardware.
4. Voice prompts Recording or TTS (text-To-Speech) Engine.
5. IVRS Software.
6. Power supply and wiring arrangement.

Number of channels greatly depends on number of calls the user is expecting. For example, if it is public utility (Like 100, 101, Railway enquiry etc), the number of calls will be high. If it has to handle large number of calls (more than 16 numbers), it should be connected using DIGITAL technology. And you will have to use a digital CTI cards too. Digital Cards are more expensive than analog CTI cards and they start with minimum channel count of 30. If you are going to use a Digital card, use a Server. There are many CTI cards, both analog and digital, available in various configurations.

Then the voice prompts! These are voices you hear as soon as you dial the IVRS telephone numbers! These are pre-recorded voices which are played as soon as your call is established. Normally one should get recorded the voice prompts and for any dynamic content or data, TTS may be used. But the voice quality of TTS is still poor specially it may be difficult to understand to people whose mother tongue is not English.

Once you finalized the above, it is time to develop your IVRS Software or find a IVRS Software development company! There are many IVRS Software development companies in the world. Many IVRS Software are developed on various platforms, using different languages. The best IVRS (in terms of robustness, features, easy to configure and maintain) are the IVRS software which are developed in C++. If you intend to develop a IVRS Software on your own, buy the CTI hardware, and read the APIs. Also you need to have thorough knowledge of PSTN exchange. Specially to configure DIGITAL CTI card using SS7, MTP3 ISUP, R2MF, ISDN PRI etc are time consuming and let me warn you, they are not easy! Also you have to have these infrastructure to your testing purpose! ( How many of you have an exhange with SS7 ?) So, best advice is, attempt build your own IVRS if you have to use analog CTI cards, and for DIGITAL CTI Cards, better contact some IVR Companies!

Keep reading this for CTI cards, IVR Software, IVR Companies and most importantly, how you can make money through IVR! It’s a hot thing

Next post:

Previous post:

{ 55 comments… add one }
  • Susant Pujari August 24, 2008, 5:03 pm

    Very good article! Easy to understand, good for beginners like me!
    Thanx for the article.

  • A Meshram August 25, 2008, 3:49 pm

    Good Post.
    Thanx for such good post.

  • Neeraj K August 25, 2008, 3:50 pm

    Very simple step by step explanation for building IVRS. Though it did not mention exact hardware required.

  • Rakesh August 26, 2008, 3:01 am

    What software or tools should be used for rapid development of IVRS ? Also can you suggest some low cost 4 port analog hardware ? Dialogic cards are quite costly.

  • Uttam Pegu August 26, 2008, 4:36 am

    Hi,
    Very soon, I am going to post detailed list of hardware vendors and software tools.

    thanx !

  • Dipto December 17, 2008, 12:22 am

    Thanks for the info..its very informative. Please post the list of vendors and software tools.

    Regards,
    Dipto

  • Vinoth February 3, 2010, 3:12 pm

    Hi Uttam Pegu,
    I am a student from Chennai, India. I want to do a project which is Building an IVRS for a College! For example if user press 1 they should have a voice response about the student……if 2 voice response about the various dept. etc. So can you please tell me exactly which modem(like modem name or no) should i use to attend the call automatically and get the keypad number dialled by the user. If possible please provide me a brief idea on my project as soon as possible as its late me doing my project! Thank you.

  • Uttam Pegu February 3, 2010, 3:37 pm

    Hi Vinoth,
    You can use any modem for building your IVR project. You may use TAPI for your application.

    But it will have only one channel, I would recommend you to buy a 4 port Dialogic or Donjin Analog board, and then download XTEND IVR tool ( free for one port) (http://www.xtendtech.com/ivr/) and make your application quickly!

    To buy Donjin, you may contact me, or to buy Dialogic, you may contact Tecnomic, http://www.tecnomic.com/

    Hope this helps.

  • Vinoth February 3, 2010, 3:52 pm

    Thank you Uttam Pegu! How to automatically attend a call? Is it done once we have a modem? Then what is the use of XTEND IVR tool? Similarly will the keypad number typed by user be retrieved when we have a modem? Please help me with this!

  • Vinoth February 4, 2010, 8:16 am

    Hi Uttam Pegu,
    What is the cost of the Donjin board if i purchase from you and what is the price of Dialogic card? Kindly reply me for this and previous query! Thank you.

  • Uttam Pegu February 4, 2010, 1:01 pm

    Hi Vinoth,
    Sorry for the late reply.

    To reply “How to automatically attend a call ?”
    1. Your program keep listening for incoming RINGING and as soon as your program detects it, it will “pick” the call by OFF HOOKing it!
    2. ExtendIVR tool a used to “control” dialogic board for performing above #1 operations in your C++,.NET programs.
    3. Yes, you can detect telephone keypad pressed by caller ( DTMF )

    Donjin costs half the price of Dialogic! 4 port Dialogic should cost around Rs. 30000 or so. ( my estimate, have not bought any recently.).

  • Jeeva February 5, 2010, 10:49 am

    hi,
    I am trying to do an IVR system as my final year MCA project.
    “Can I use a voice modem instead of Dialogic card??”
    because, dialogic card is costlier to me.If so, please give me details about “how to attend the call using voice modem and also how to recognize the number typed by the caller?? Is there any modem with DTMF decoding facility??”

    • Imran Patel June 12, 2013, 1:57 pm

      If you need second hand dailogic card, please contact
      me on 9328019635.

  • Jeeva February 5, 2010, 10:50 am

    my mail ID is sivaramsrk@gmail.com

  • Uttam Pegu February 5, 2010, 10:53 am

    Hi Jeeva,

    1. Yes, you can use voice modem instead of Dialogic card.

    2. Your program keep listening for incoming RINGING and as soon as your program detects it, it will “pick” the call by OFF HOOKing it!

    All voice modems are capable of decoding DTMF keys and they can even detect caller id.

  • Jeeva February 5, 2010, 11:04 am

    Thank you Mr.Uttam Pegu.
    1.Can you name any one Voice modem and its approximate price??
    2.Is there any programming interface for that modem??

    thank you

  • Jeeva February 5, 2010, 11:05 am

    Thank you Mr.Uttam Pegu.
    1.Can you name any one Voice modem and its approximate price??
    2.Is there any programming interface for that modem??

    thank you

  • Uttam Pegu February 5, 2010, 12:51 pm

    Hi Jeeva,
    You may use any voice modem, either built in into your laptop or any external or internal modem to be installed in PC.

    TAPI ( Telephony API) is widely used for Modem.

  • Jeeva February 5, 2010, 1:11 pm

    Hiiii Uttam Pegu,

    Thank you very much for your kind information…. thank you.

  • Vinoth February 6, 2010, 3:53 pm

    Hi Uttam Pegu,
    I have decided to use a voice modem for the IVRS as my company wants to offer me only that for now. So could you please specify me the exact model or name of the voice modem that i can use so that my IVRS works in a good way! Please help me with this!
    Thank you.

  • Uttam Pegu February 6, 2010, 4:00 pm

    Hi Vinod,
    Please read up my communication with Mr. Jeeva. You may use ANY VOICE MODEM.

    But honestly, I am not sure if “IVRS” on Modem works in “good way”, but then, I never tried IVR using modem. I started out with 4port Dialogic board.

    All the best!

  • Vinoth February 8, 2010, 7:57 am

    Thank you Mr.Uttam Pegu

  • Jeeva February 8, 2010, 9:46 am

    hii Uttam Pegu,
    I have searched the voice modem.. some voice modems have problems in detecting the caller ID,and some modems can not detect the dtmf code… I am in confusion in selecting the modem… so, please help me out and tell me any one suitable modem.. please!!
    thank you!

  • Uttam Pegu February 8, 2010, 12:50 pm

    Hi Jeeva,
    No gadget can claim to detect DTMF 100% accurately as it depends on lot many things including signal/line conditions! So, you will always have CLI detection in any analog boards, including modems.

    All modems are equally suitable or otherwise, thumbrule might be costlier would be better!

  • Jeeva February 8, 2010, 1:24 pm

    Thank you Mr.Uttam Pegu 🙂

  • Jeeva February 8, 2010, 1:26 pm

    Now I am going to use any one Voice modem !! I will reply you soon whether it works properly or not.

  • Jeeva February 20, 2010, 1:05 pm

    hii uttam pegu,
    once again i am coming with a problem…
    Now i am using d-link dfm560in-is voice modem for my IVR application.
    i use c#.net to develope this… i can attend the call automatically using AT commands… I tried to send a wav file over the modem… but it dint worked….
    i have attached my c# code….
    is my code correct??? do you help me out!!??
    here is my code…..

    public AutoResetEvent receiveNow = new AutoResetEvent(false);
    public SerialPort sp1 = new SerialPort();
    private void Form1_Load(object sender, EventArgs e)
    {

    //System.IO.FileStream strm= new System.IO.FileStream(“C:\sk.wav”,System.IO.FileMode.Open);
    //System.IO.BinaryReader rdr=new System.IO.BinaryReader(strm);

    FileStream fs = new FileStream(“C:\sk.wav”, FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs);
    long numbytes = new FileInfo(“C:\sk.wav”).Length;
    buff = br.ReadBytes(1024);//((int)numbytes);
    MessageBox.Show(numbytes.ToString());
    //for(i=0;i “) && !buffer.EndsWith(“rnERRORrn”));
    }
    catch (Exception ex)
    {
    throw ex;
    }
    return buffer;
    }

    i expect a positive answer from you…..
    thank you!!

    -Jeeva

  • Jeeva February 20, 2010, 1:07 pm

    sry….
    here is my correct code…
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    using System.Threading;
    using System.Text.RegularExpressions;
    using System.IO;

    namespace ivr
    {
    public partial class Form1 : Form
    {
    public string s;
    public AutoResetEvent receiveNow = new AutoResetEvent(false);
    public SerialPort sp1 = new SerialPort();

    byte[] buff = new byte[1024];
    int i = 0;

    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    //System.IO.FileStream strm= new System.IO.FileStream(“C:\sk.wav”,System.IO.FileMode.Open);
    //System.IO.BinaryReader rdr=new System.IO.BinaryReader(strm);

    FileStream fs = new FileStream(“C:\sk.wav”, FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs);
    long numbytes = new FileInfo(“C:\sk.wav”).Length;
    buff = br.ReadBytes(1024);//((int)numbytes);
    MessageBox.Show(numbytes.ToString());
    //for(i=0;i 0)
    // throw new ApplicationException(“Response received is incomplete.”);
    // else
    // throw new ApplicationException(“No data received from phone.”);
    // }
    }
    while (!buffer.EndsWith(“rnOKrn”) && !buffer.EndsWith(“rn> “) && !buffer.EndsWith(“rnERRORrn”));
    }
    catch (Exception ex)
    {
    throw ex;
    }
    return buffer;
    }

  • Jeeva February 20, 2010, 1:12 pm

    sorry once again… my code din’t copied correctly!!
    so attached it page by page!!

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    using System.Threading;
    using System.Text.RegularExpressions;
    using System.IO;

    namespace ivr
    {
    public partial class Form1 : Form
    {
    public string s;
    public AutoResetEvent receiveNow = new AutoResetEvent(false);
    public SerialPort sp1 = new SerialPort();

    byte[] buff = new byte[1024];
    int i = 0;

    public Form1()
    {
    InitializeComponent();
    }

  • Jeeva February 20, 2010, 1:12 pm

    private void Form1_Load(object sender, EventArgs e)
    {

    //System.IO.FileStream strm= new System.IO.FileStream(“C:\sk.wav”,System.IO.FileMode.Open);
    //System.IO.BinaryReader rdr=new System.IO.BinaryReader(strm);

    FileStream fs = new FileStream(“C:\sk.wav”, FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs);
    long numbytes = new FileInfo(“C:\sk.wav”).Length;
    buff = br.ReadBytes(1024);//((int)numbytes);
    MessageBox.Show(numbytes.ToString());
    //for(i=0;i<buff.Length;i++)
    // MessageBox.Show(BitConverter.ToString(buff) );
    MessageBox.Show("file reading finished…");

    sp1.PortName="COM3";
    sp.BaudRate = 115200;
    sp.DataBits = 8;
    sp.StopBits = System.IO.Ports.StopBits.One;
    sp.Parity = System.IO.Ports.Parity.None;
    sp.Handshake = System.IO.Ports.Handshake.None;
    sp.DtrEnable = true;
    sp1.Open();
    sp1.DiscardOutBuffer();
    sp1.DiscardInBuffer();
    receiveNow.Reset();
    MessageBox.Show("port initialization finished…");

  • Jeeva February 20, 2010, 1:13 pm

    sp1.Write(“ATr”);
    s = ReadResponse(sp1, 3000);
    MessageBox.Show(s);
    sp1.Write(“atzr”);
    s = ReadResponse(sp1, 3000);
    MessageBox.Show(s);
    sp1.Write(“at+fclass=8r”);
    s = ReadResponse(sp1, 3000);
    MessageBox.Show(s);
    sp1.Write(“at+vsm=128,8000r”);
    s = ReadResponse(sp1, 3000);
    MessageBox.Show(s);

    sp1.Write(“at s0=1r”);
    s = ReadResponse(sp1, 3000);
    MessageBox.Show(s);
    sp1.Write(“at+vtxn”);
    sp1.Write(buff, 1, 1023);
    }

  • Jeeva February 20, 2010, 1:14 pm

    public string ReadResponse(SerialPort port, int timeout)
    {
    string buffer = string.Empty;

    do
    {
    string t = port.ReadExisting();
    buffer += t;
    }
    while (!buffer.EndsWith(“rnOKrn”) && !buffer.EndsWith(“rn> “) && !buffer.EndsWith(“rnERRORrn”));
    }

  • Jeeva February 20, 2010, 1:14 pm

    thats all!! thank you!

  • Uttam Pegu February 23, 2010, 10:39 am

    Hi Jeeva,
    I am not sure how one plays WAV file using AT commands!

  • Jeeva February 23, 2010, 11:04 am

    oh! ok thank you!
    then…. hw to do all these things??????

  • Uttam Pegu February 23, 2010, 11:05 am

    I think, you will have to use TAPI instead of AT commands.

  • Jeeva February 23, 2010, 11:10 am

    ok
    can you give me any links related to TAPI

  • Jeeva March 6, 2010, 10:26 am

    hii Uttam Pegu
    I have successfully completed my project using TAPI calsses.
    Thank you so much for your kind help!!
    Regards,
    -Jeeva

  • Uttam Pegu March 6, 2010, 10:52 am

    Hi Jeeva,
    Great to know that you have completed your project!

    regards

    Uttam Pegu

  • Jeeva March 15, 2010, 2:09 pm

    hi Uttam Pegu,

    I am coming with one more questio 🙂
    Can we attend multiple calls at the same time using ‘SINGLE’ phone line??
    If not—- how to handle multiple lines with a single phone number(like ‘121’ in AIRTEL)…??

  • Uttam Pegu March 17, 2010, 1:03 pm

    Hi Jeeva,
    Sorry for late reply.

    ‘SINGLE’ phone lines are in fact digital lines, normally it has 30 ‘lines’ with same number or different numbers, commonly known as PRI line.

    How to handle multiple calls simultaneously ? I would recommend, use multi-threading, open one thread per phone line. It is the simplest way. Else you may use ‘CALL BACK’ or ‘interrupt way’ exploiting Windows ‘messaging system’.

    Hope this helps.

  • Jeeva March 18, 2010, 8:48 am

    Thank you! Uttam Pegu.. I will try and inform you…

  • Harish N T May 18, 2010, 12:48 am

    Hi Pls Send me the Project Report of I V R S using JTAPI pls I am A B E 8th sem Student

  • Anunay June 9, 2010, 11:20 pm

    Hello ppl
    I have to develop an IVRS system
    Can u help me with it
    I have read abt the tapi as well as AT commands(Nt much)
    Bt still couldnt get much of the hold on either of them
    So if u can jst help me with basics il be very thankful 2 u

  • vijay July 27, 2010, 11:53 am

    Hi,

    We have started a new small firm for ivr/vas ,need a source code for developing ivr vas app platform and ivr vas app..
    Sample Application has mentioned plz provide the source code it ill very helpful for us to develop the application .

    Details are

    * Mulltichannel option
    * First time user calls it ask the user to choose the language option once done it continue to plays welcome prompt of app n continue & user comes back just it ill play welcome back & contine
    * category listing
    * For choosing each clip or song catgory it ill play welcome prompt & then it ill play options and continue with the clip or songs.
    * option for clip & songs -press 1 for previous,press 2 for repeat,press 3 for next,press 4 for change the lang & press 5 for goback to mainmenu or goback to movie catg
    * End of app or catgory it ill go to mainmenu or hangup
    * Recorder app:
    1.welcome prompt
    2.prompt plays”please record ur voice after the beep press * after recording 3.when press * it ill play record confirm prompt after this it ill ask final confirmation
    press 1 for confirm
    press 2 for rerecord
    4.After confirmation press 1 it ill play thanx prompt and hangup.
    5.After press 2 it ill go to rerecord option.
    * catgory have recorded clips user can listen & vote for particular clip.options-ress 1 for previous,press 2 for repeat,press 3 for next,press 4 for vote the best clip.

    *Language prompts,Standard prompts & contents are pick up from the path
    Standard prompts path: “D:Prompt”
    contents path:”D:Content”
    *Recorded prompts are stored in
    Recorded prompts path:”D:recorded”

  • Ratan July 1, 2011, 11:52 am

    Hi,

    We need assistance in developing IVR implementation for survey using Voice Modem using Microsoft Technologies.

    Please let me know.
    code[dot]nettry[at]gmail[dot]com

  • Uttam Pegu July 1, 2011, 11:57 am

    Hi Ratan,
    Use TAPI.

    Regards

  • Ratan July 1, 2011, 3:35 pm

    Hi,

    Thanks for quick reply.

    I have old modem which was used for MTNLBSNL internet connectivity. Modem is “NetoDragon MDV92XP”. Can I use it as Voice modem or have to by other?

    Apart from that, do you have some sample code and project report for TAPI or Dialogic card? It would be helpful for us.

    Regards!!

  • Ratan July 1, 2011, 4:43 pm

    Hi,

    Can you give me complete implementation for IVR based on Java.NET same as to do copmany survey?

    I want hardware requirement with all source-code with relevant document.

    please connect me ASAP.

    Regards

  • Uttam Pegu July 1, 2011, 5:18 pm

    Hi Ratan,
    Easiest way to code IVR is using an IVR Toolkit. For .NET, I would recommend you to use VBVoice ( http://www.nts-world.com/products/vbvoice/). You can download it for free and get 2 channel license.

    Regards

    • Narendra Shinde March 18, 2012, 12:37 pm

      Can u plz tell me if i use Xtend toolkit And Dialgic digital card then tell me how i connect my office ISDn telephone to Computer

  • Ratan July 2, 2011, 2:29 pm

    Hi,

    We want to buy 4Port Dialogic or Donjin modem or similar latest support for Windows Server 2008 compatibility.

    Can you help us?

    Regards

  • Niladri Sekhar Saha November 8, 2011, 11:40 am

    I have an old modem of D-Link DFM-560ES abd I want to make an IVRS application in java using JTAPI. Can it be possible?

  • abdomoneim September 15, 2016, 12:58 am

    But how Make Money and how payout money i’ am egypt

Cancel reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.