Tech

Server controlled prompts and call flow through IVR

Published on:

March 4, 2025

Vodia's IVR has become even more powerful with JavaScript control, enabling dynamic prompts and call flow adjustments directly from a server. By leveraging HTTP requests, the IVR can fetch responses in real-time, allowing customized greetings, prompts, and call transfers based on caller input. For example, customer codes entered via DTMF can be validated through a server, triggering personalized responses and directing calls to the appropriate destination. This flexibility enhances automation and improves customer interactions, making Vodia’s IVR a highly adaptable and intelligent solution for businesses.

Vodia IVR has become more powerful and intuitive with javascript control and call flow.

Apart from communicating with AI (through voice) and powerful call flow (which is covered in another blog), it can also be used much more flexibly (thanks to javascript) in a variety of other ways. One of them is to control the prompts and call flow from the server.

IVR Setup

To set up a Vodia IVR node to use Javascript, simply choose “Javascript” from the dropdown in the IVR node settings and save. A text area will appear where you can enter your javascript code - if you want to do anything with the call that's connected to this IVR (say from an outside trunk number that ended up in this IVR), use the call object as shown below.

Play prompts from a Server

To play a prompt, you can use Text to Speech in the call object. For example, to greet someone in a call connected to the IVR, simply call the “say” function of the call object:

call.say(“Hi, you have reached company ABC, how may I help you today?”)

The above text will be converted to speech and played for the caller.

Similarly, this text can come from a server in response to an HTTP request based on different situations, e.g., what code (through DTMF) the caller provided as a customer, etc.

HTTP example

Here is how to POST an HTTP request to a server (replace SERVER_UTL with your server url) with a body of some numbers. It accepts a javascript function as a callback, which is called when a response is received from the server with the code, response, and headers - as you can see below. In this example, the response is in JSON format, so it is parsed for the message and the message is played to the caller with call.say(res.message).

  var body = “123456  var args = {
    'method':'POST',
    'url': 'https://SERVER_UTL',
    'header': [ { name: 'Content-Type', value: 'text/plain'} ],
    'callback': callback
  }
  if (body) {
    args.body = body
  }
  system.http(args)

  function callback(code, response, headers) {
    console.log("IVR response:" + code.toString())
    var res = JSON.parse(response)
    if (res.message) call.say(res.message)
  }

Call flow control from a server

When you want to transfer the call connected to the IVR to another extension, group, IVR or anywhere else, simply call the transfer function of the call object with the destination. For example, to transfer to another IVR 87:

call.transfer(“87”)

Similarly, as in the example above, that destination can come from the server as a response to an HTTP request.

A simple example

Let’s say we want to ask the customer to enter a customer code, send it to a server and, if found, give one prompt, followed by a transfer to the customer service department, say account 42. If the code isn't found, a different prompt will be given and followed by a transfer to a different IVR (let's say 70).

'use strict';

call.say('Welcome to company ABC. Please enter your 8 digit customer number.')

var digits = ''
call.dtmf(ondtmf)
function ondtmf(digit) {
  digits += digit
  if (digits.length == 8) {
    send(digits)
    digits = ''
  }
}

function send(digits) {
  var body = digits
  var args = {
    'method':'POST',
    'url': 'https://SERVER_URL',
    'header': [ { name: 'Content-Type', value: 'text/plain'} ],
    'callback': callback
  }
  if (body) {
    args.body = body
  }
  system.http(args)

  function callback(code, response, headers) {
    console.log("IVR response:" + code.toString())
    var res = JSON.parse(response)
    if (res.message) call.say(res.message)
    if (res.transfer) setTimeout(function(){
      call.transfer(res.destination)
    }, 5000)  
  }
}

Of course this is just an example. This can be accmplished in different ways and with proper checks and logs, etc.

The function call.ondtmf() takes a function as callback, which is called every time a digit (DTMF) is pressed with the value of the digit passed as argument. In this example, they are being concatenated into a string and finally sent to the server. In this example, the server responds with a JSON reply with a message (to play out as speech) and a destination (where to transfer the call after playing the message).

So, if the number is found it could return something like this:

{

  “message”:“Thanks Mr. Jones for the number. I will now transfer you to Customer Service.”

  “Destination”:“42”

}

If the number isn't found, it could return something like:

{

  “message”:“Sorry. The number you provided does not exist.”

  “Destination”:“70”

}

When the response is received and parsed, the message is played, then the call is transferred to the destination. The transfer is done after a timeout of 5 seconds (5000 ms) to provide some time for the message to be played out completely before the call is transferred.

if (res.message) call.say(res.message)
if (res.transfer) setTimeout(function(){
  call.transfer(res.destination)
}, 5000)

Vodia's IVR system with JavaScript control provides businesses with enhanced flexibility and power, enabling them to dynamically manage call flow, personalize prompts, and integrate real-time server responses. By leveraging HTTP requests and handling DTMF inputs, the IVR can offer customized interactions, improving overall customer service efficiency. Whether it's verifying customer information or directing calls based on server responses, Vodia’s solution enhances the IVR experience, allowing businesses to create more intelligent, responsive communication systems. For more information, contact us at sales@vodia.com or call +1 (617) 861-3490.

Latest Articles

View All

Unlocking Swift Communication: The Vodia Prepaid DigitalOcean Cloud Advantage!

Vodia’s prepaid offering on DigitalOcean provides businesses with a fast, flexible way to deploy a fully licensed PBX system. Our tailored plans include options for SBC functionality, certified for MS Teams, enabling seamless integration of advanced PBX features like intelligent call routing, automated attendants, and voicemail, all while ensuring secure, high-fidelity voice communication. With extension-based licensing, organizations can easily scale their system from 10 to 80 extensions, making deployment simple and quick. Whether you’re new to PBX systems or an experienced developer, our step-by-step installation video and documentation guide you through the setup process.

May 5, 2025

The Vodia Phone System: Enterprise-level Communications for SMBs

With over 360 million SMBs across the globe, small and medium-sized businesses face a common challenge: delivering the same high-quality communication experience customers expect from large enterprises—without the enterprise budget. The Vodia phone system is built to meet this need, offering a powerful, scalable solution that transforms any device into a professional business phone. Whether your team is remote, mobile, or in-office, Vodia provides advanced features like call recording, voicemail transcription, Microsoft Teams integration, hot desking, CRM integration, and real-time analytics. Our per-user pricing ensures you get all the functionality without overpaying, and our mobile apps keep you connected from anywhere.

May 2, 2025

The Vodia PBX User Portal - A User's Guide

The Vodia PBX User Web Portal offers a comprehensive and intuitive interface that gives users full control over their communication experience. Designed to complement Vodia’s zero-touch provisioning, the portal enables secure browser-based calling via WebRTC, and syncing with Microsoft or Google contacts. Users can monitor real-time presence, manage call forwarding, handle parked calls, and control service flags for dynamic call routing. It also supports advanced call queue management, voicemail access with optional transcription, call recordings, and internal or SMS messaging. CRM integrations with platforms like Zoho further streamline workflows, while granular user settings and admin-controlled visibility ensure tailored access based on roles.

April 29, 2025