package tut;
import java.util.Locale;
import com.ibm.telephony.beans.directtalk.ApplicationProperties;
import com.ibm.telephony.beans.media.*;
import com.ibm.telephony.wvr.*;
/**
*
* A simple WVR application
*/
public class InApp extends WVRApplication {
// Define the category for all the voice segments in this application.
private static final String CATEGORY = "Tutorials";
// Define the menu items
private static final String ITEM1_MSG = "Message";
private static final String ITEM2_NUMBER = "Number";
private static final String ITEM3_ORDER = "Order";
private static final String ITEM4_OPERATOR = "Operator";
private static final String ITEM5_HANGUP = "Hangup";
// Create an array to store the menu items
private static final String[] MENU_ITEMS = { ITEM1_MSG, ITEM2_NUMBER, ITEM3_ORDER,
ITEM4_OPERATOR, ITEM5_HANGUP };
// Create an array to represent the keys that will be used to select the menu items
private static final String[] MENU_KEYS = { "1", "2", "3", "4", "5" };
// Create a number of Voice Segment objects that are shared amongst all instances of this
// application within the JVM.
// Create the Welcome and Difficulties segment objects
private static final VoiceSegment VS_WELCOME = new VoiceSegment(CATEGORY, "Welcome");
private static final VoiceSegment VS_DIFFICULTIES = new VoiceSegment(CATEGORY, "Difficulties");
// Create the segment objects for the menu choices, and store them in an array
private static final MediaType[] MENU_PROMPTS = {
new VoiceSegment(CATEGORY, "Message"),
new VoiceSegment(CATEGORY, "Number"),
new VoiceSegment(CATEGORY, "Order"),
new VoiceSegment(CATEGORY, "Operator"),
new VoiceSegment(CATEGORY, "Hangup")
};
// Create the segment objects required for the menu properties private static final VoiceSegment VS_MENU_INVALID = new VoiceSegment(CATEGORY, "InvalidKey"); private static final VoiceSegment VS_MENU_ERROR = new VoiceSegment(CATEGORY, "Error"); private static final VoiceSegment VS_MENU_ONEMORE = new VoiceSegment(CATEGORY, "OneMore"); private static final VoiceSegment VS_MENU_HEADER = new VoiceSegment(CATEGORY, "MenuHeader"); private static final VoiceSegment VS_MENU_FOOTER = new VoiceSegment(CATEGORY, "MenuFooter");
// Create some attribute objects for the menu private PlayAttributes menuPlayAtts = new PlayAttributes(); private MenuAttributes menuAtts = new MenuAttributes(MENU_PROMPTS, MENU_ITEMS, MENU_KEYS, null); private DTMFAttributes menuDTMFAtts = new DTMFAttributes(); private RecoAttributes menuRecoAtts = null;
// Create a flag to control whether we continue to loop around in the voiceMain() method taking calls private boolean keepTakingCalls = true;
// Create a constructor method to set up the attributes
public InApp() {
// Set the input attributes of the menu
menuAtts.setHeaderMessage(VS_MENU_HEADER);
menuAtts.setFooterMessage(VS_MENU_FOOTER);
menuAtts.setInvalidInputMessage(VS_MENU_INVALID);
menuAtts.setNoMoreRepeatsMessage(VS_MENU_ERROR);
menuAtts.setOneMoreRepeatMessage(VS_MENU_ONEMORE);
menuAtts.setTimeout(10);
menuAtts.setNumberOfRepeats(2);
// Set the DTMF attributes of the menu
menuDTMFAtts.setDelimiterKeys("");
menuDTMFAtts.setMaximumKeys(1);
}//InApp
/**
* @see com.ibm.telephony.wvr.WVRApplication#voiceMain()
*/
public void voiceMain() throws WVRException {
// Define the Call object
Call call = null;
// Set the application properties
ApplicationProperties applicationProperties = null;
applicationProperties = this.getApplicationProperties();
// Create the WVR object and set the wait time
WVR wvr = new WVR(this, applicationProperties);
wvr.setWaitTime(-1);
// Create a variable that will be used to give each call a unique number
int callNumber = 0;
try {
while (keepTakingCalls) {
// Increment callNumber callNumber++; // Wait for a call
call = wvr.waitForCall("Call: " + callNumber);
// Create a flag to indicate whether the call is in progress boolean callInProgress = true;
try {
// Play welcome message
call.play(VS_WELCOME);
while (callInProgress) {
// Play the menu and get the caller's response.
InputResult input = call.playAndGetInput(menuPlayAtts, menuAtts, menuDTMFAtts, menuRecoAtts);
String choice = input.getValue();
// Print out the caller's choice.
System.out.println("Caller chose option" + choice);
}//while
}
catch (WVRHungUpException e) {
// Caller has hung up - ignore exception, program will go to finally block
}
catch (WVRInvalidInputException e) {
// Caller has entered invalid input - ignore exception, application will go to finally block
}
catch (WVRException e) {
// Check if Call object has been created. If yes, play the Difficulties message.
if (call.isActive()) call.play(VS_DIFFICULTIES);
// Print debugging information
e.printStackTrace();
}
finally {
// Return the call
call.returnCall();
}//try
}//while
}
catch (WVRException e) {
// Print debugging information
e.printStackTrace();
}//try
}//voiceMain()
// Tell the application to stop taking calls when the node shuts down
public void voiceAppStop() { keepTakingCalls = false; }
}//InApp