Search code examples
apitelephonyivrjain-sipjtapi

Looking into IVR software development


The company I work for is looking for an IVR implementation that is highly compatible with any potential PBX/IVR or PBX combo OR to provide our own hosting solution.

So the idea would be to create an application that interfaces to any potential platform and provide call control and voice dialog / interaction for the IVR.

Technologies I've looked at so far (we would like to use Java) are Java Telephony API (JTAPI) the JAIN-JCC (Java Call Control) API and others. The basic gist of these API's make sense to me, but what I cannot put together is exactly how the application I would create for call control and voice IVR / VXML would interface in a platform independent way to the phone system. How exactly am I to get the call from the phone system?

These API's and libraries seem to leave this question unanswered which leads me to believe that a platform independent solution isn't possible and that it's always going to be implementation specific. There's also JAIN-SIP, if I can convert all calls to SIP then maybe I can create a generic call control / IVR application this way.

If I've uttered any ignorances here or misunderstandings please forgive me, I am completely new to any kind of telecom technology - anyone who wants to set me straight? I'd be very very grateful, the connections on the detail implementation level are very very fuzzy at this point and sometimes I need a little hand holding. Any help or pushes in the right direction would be helpful.

I've been pouring over specs and API's for the last week. :)

EDIT - I've forgotten to mention that we prefer to develop this in house if at all possible and smart in terms of cost/benefit - not really looking to spend money on a integrated platform if at all possible - thats my job :)


Solution

  • I worked for VoiceGenie a few years ago: they made (I'm using the past tense here only because I don't know what they're doing now, not because they're no longer doing it) a VoiceXML engine, which:

    • Is a Linux box
    • Has 3rd-party Speech-to-text and text-to-speech engines connected (by interfacing with the Engine-specific APIs)
    • Interprets VoiceXML (using its own VoiceXML parser), and executes it by driving the 3rd-party Speech-to-text and text-to-speech engines

    They hired me to interface their box to call control systems: and the first system I did that for was Cisco's (conversely, I see that VoiceGenie are now owned by Genesys). Their engine also supported non-VoiceXML applications, e.g. it exposed a Java application interface.

    In conclusion:

    • Various phone systems have proprietary call-control APIs; and/or they may support standard call-control protocols (e.g. SIP) and/or APIs (e.g. JTAPI, TAPI, CCXML) and, if they do, do it more-or-less well.
    • You might find 3rd-party engines (e.g. the Genesys Voice Platform, the Microsoft Office Communications Server, and others) which give you some unified API, and handles and supports (or, not) the interop with other components.

    I'm not a product manager, system engineer, network architect, domain expert in this field.


    BUT they all generally support a handful of protocols and API's

    Some supported only a proprietary, ad/or some support one or more standards.

    So the idea is to interface to the API or protocol that is supported the most.

    I'd question the business case for that, but I reckon that you ought to find and talk with a telephony engineer, who has specific domain expertise and product/implementation knowledge. I encountered what I posted above by working as a software developer, but I don't have the domain expertise.

    Would that be SIP?

    SIP is a protocol, not an API. This stuff is in layers, for example as an application you might use:

    • Lower level: a SIP protocol stack with own API; you use this API, understand what SIP dialogs look like, and talk (only) with systems which understand SIP

    • Higher level: a VoiceXML/CCXML engine (or a TAPI or a JTAPI engine); you write XML (or use the TAPI and JTAPI APIs); and the engine (depending on which engine it is) may have a built-in SIP stack which it uses to talk to components which use SIP, and/or it might have other protocol stacks for components which use other (non-SIP) protocols.

    Cisco only had one (proprietary) protocol I could use, to talk to their "Intelligent Contact Management" (i.e. call centre) system. And Genesys I think had a closed, proprietary API/protocol.

    If so then would my call control and IVR solution be best implemented as a SIP front end to a JTAPI application or some variant?

    I'm confused about what you want to do, where in the stack you want to be (not that I could say anything useful if I did know).

    I think that maybe you ought to be talking with vendors: to find out what they can do for you (unless you're trying to complete with them, which would be difficult).

    Can you narrow down what "any potential PBX/IVR or PBX combo" means?