Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

My first job out of university was to program IVR systems for a telecom company using an in-house developed framework.

An IVR application would typically play a recording to the user, then wait for the DTMF signal, then maybe take the user to a sub-menu, prompt the user to choose another option and do a database query and then play another recording and so on.

The IVRs had to repeat a menu if the user made an invalid selection, and "press 'star' to return to the main menu" and so on.

So most of the applications I maintained were thousand line C++ functions that looked something like this (paraphrased):

  void ivr_main(int ch) {
  main_menu:
    play("mainmenu.vox");
    d = get_dtmf(ch);
    if(user_hung_up(ch)) return;
    switch(d) {
    case '1' : goto menu_1;
    case '2' : goto menu_2;
    case '3' : goto menu_3;
    case '4' : goto menu_4; 
    }
    goto main_menu;
  menu_1:
    play("menu1.vox");
    d = get_dtmf(ch);
    if(user_hung_up(ch)) return;
    switch(d) {
    case '1': goto menu_1_1;
    case '2': goto menu_1_2;
    case '*': goto main_menu;
    }
    goto menu_1;
  // etc...
  }


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: