Sample Package | Outbound Application Tutorial
The surveyHander.jsp is listed here. You can also download the whole sample file here.
<%@ page import="java.io.*" %> <%@ page import="java.util.*" %> <%@ page import="java.net.*" %> <%@ page isThreadSafe="false" %> <%! static class CallRecord { public CallRecord(String phoneno) { m_phoneno = phoneno; m_name = m_names[m_random.nextInt(3)]; m_carmaker = m_makers[m_random.nextInt(3)]; m_date = m_dates[m_random.nextInt(3)]; m_callId = null; m_callStatus = null; } public String m_phoneno, m_name, m_carmaker, m_date, m_callId, m_callStatus; // randomly assign the value to a phone number static Random m_random = new Random(12345); static String m_names[] = { "John Smith", "Mary Jones", "Lisa Wells" }; static String m_makers[] = { "Honda Accord", "Ford Escort", "BMW 545i" }; static String m_dates[] = { "Monday Jan 20", "Tuesday Feb 12", "Friday June 30" }; } public static ArrayList m_callRecords = new ArrayList(); %> <%! // The routines below are simplifies implementations of the gateway // client library. Please note the format might change in future releases. It is // highly recommended to use the Gateway Client Library for commercial applications // send name value pairs to the gateway for the call void sendCallRequest(CallRecord rec) { // setting the required http post string String poststr = "info="; poststr += URLEncoder.encode("Survey Call " + rec.m_phoneno); poststr += "&phoneno="; poststr += rec.m_phoneno; poststr += "&firstocc=120"; // append parameters to starturl string String starturl = "http://localhost:8155/ocall/myapp/start.jsp"; starturl += "?name=" + rec.m_name; starturl += "&maker=" + rec.m_carmaker; starturl += "&date=" + rec.m_date; poststr += "&starturl="; poststr += URLEncoder.encode(starturl); // now the generic parameters for parameterized VXML // The name must match the one used in the VXML file poststr += "&customer_name="; poststr += URLEncoder.encode(rec.m_name); poststr += "&service_date="; poststr += URLEncoder.encode(rec.m_date); poststr += "&car_maker="; poststr += URLEncoder.encode(rec.m_carmaker); // Send Call Request String rcstr = postToGateway("/ocall/callreqHandler.jsp", poststr); rec.m_callId = getReqId(rcstr); } // get the call status based on callId void getCallStatus(CallRecord rec) { // setting the http post string String poststr = "reqid="; poststr += URLEncoder.encode(rec.m_callId); // Send Call Request String rcstr = postToGateway("/ocall/callstatusHandler.jsp", poststr); rec.m_callStatus = getCallStatus(rcstr); // now remove it on the gateway if (rec.m_callStatus != null) postToGateway("/ocall/callremoveHandler.jsp", poststr); } // send HTTP POST to Voicent Gateway private String postToGateway(String urlstr, String poststr) { try { URL url = new URL("http", "localhost", 8155, urlstr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("POST"); PrintWriter out = new PrintWriter(conn.getOutputStream()); out.print(poststr); out.close(); InputStream in = conn.getInputStream(); StringBuffer rcstr = new StringBuffer(); byte[] b = new byte[4096]; int len; while ((len = in.read(b)) != -1) rcstr.append(new String(b, 0, len)); return rcstr.toString(); } catch (Exception e) { e.printStackTrace(); return ""; } } // process the call request return. private String getReqId(String rcstr) { int index1 = rcstr.indexOf("[ReqId="); if (index1 == -1) return ""; index1 += 7; int index2 = rcstr.indexOf("]", index1); if (index2 == -1) return ""; return rcstr.substring(index1, index2); } private String getCallStatus(String rcstr) { if (rcstr.indexOf("^made^") != -1) return "Call Made"; if (rcstr.indexOf("^failed^") != -1) return "Call Failed"; if (rcstr.indexOf("^retry^") != -1) return "Call Will Retry"; return null; } private int getRateTotal(ServletContext app, String key) { Integer ii = (Integer) app.getAttribute(key); if (ii == null) return 0; return ii.intValue(); } %> <% String act = request.getParameter("action"); if (! "report".equals(act)) { // call start String phonelist = request.getParameter("phonelist"); StringTokenizer tkz = new StringTokenizer(phonelist, ","); String phoneno; while (tkz.hasMoreTokens()) { phoneno = tkz.nextToken(); CallRecord rec = new CallRecord(phoneno); sendCallRequest(rec); m_callRecords.add(rec); } } %> <html> <head> <meta http-equiv="Content-Language" content="en-us"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Customer Satisfactory Survey: Report</title> </head> <body> <font face="Lucida Console">Customer Satisfactory Survey</b></font> <p> <form method="POST" action="surveyHandler.jsp"> <input type="hidden" name="action" value="report"><<p><input type="submit" value="Show the current survey report" name="B1"></p> </form> <% // check call status from the list int callsToBeMade = 0; int callsFailed = 0; for (int i = 0; i < m_callRecords.size(); i++) { CallRecord rec = (CallRecord) m_callRecords.get(i); if (rec.m_callStatus == null) { getCallStatus(rec); if (rec.m_callStatus == null) { callsToBeMade++; continue; } } if (rec.m_callStatus.equals("Call Failed")) callsFailed++; } // get the rest from application vars int answeringTotal = getRateTotal(application, "anstotal"); int rate1 = getRateTotal(application, "rate1"); int rate2 = getRateTotal(application, "rate2"); int rate3 = getRateTotal(application, "rate3"); int rate4 = getRateTotal(application, "rate4"); int rate5 = getRateTotal(application, "rate5"); int norate = m_callRecords.size() - (callsToBeMade + callsFailed + answeringTotal) - (rate1 + rate2 + rate3 + rate4 + rate5); %> <hr> <table border="0" cellpadding="10" cellspacing="10" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1"> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Total calls:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=m_callRecords.size()%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Calls to be made:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=callsToBeMade%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Calls reached answering machine:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=answeringTotal%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Calls failed:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=callsFailed%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Customers rated us 1:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=rate1%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Customers rated us 2:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=rate2%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Customers rated us 3:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=rate3%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Customers rated us 4:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=rate4%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Customers rated us 5:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=rate5%></font></td> </tr> <tr> <td width="27%" align="right"><b> <font color="#000080" face="Lucida Console" size="2">Customers did not rate us:</font></b></td> <td width="73%"><font face="Bookman Old Style" color="#800000"><%=norate%></font></td> </tr> </table> </body> </html>