Call IVR
Synopsis - CallIvr
CallIvr(string phoneno, string appname, bool selfdelete, string callerid, string detection)
Description - CallIvr
Objective
Make a phone call to the specified number and use the IVR application to interact and control the phone call.
Parameters
phoneno |
The phone number to call. |
appname |
The name of the deployed IVR application. |
selfdelete |
Ask the gateway to automatically delete the call request after the call is made if it is set to '1'; |
callerid |
The 11 digit caller ID number. |
detection |
The amount of detection for our system to recognize human answer. 0= balanced, 1= more aggressive, 2= most aggressive, 3= detection off. |
Returns
reqId |
The return value is the call request ID. |
Example - CallIvr
string reqId = CallIvr("123-4567", "reminderApp", 1, "12345678911", 3);
Call Status
Synopsis - CallStatus
string CallStatus(string reqId, Dictionary responses, 0)
Description - CallStatus
Objective
Check the call status and responses of the call with reqId. The second parameter is a reference to an array and is used to collect responses. So if you have an element named AttendMeeting, the response can be accessed as responses["AttendMeeting"]. Please note that you can have multiple IVR elements that collect responses.
Parameters
reqId |
The reqId. |
responses |
Reference to an array and is used to collect responses. |
Example - call_status_response
string status = CallStatus("1234035434", responses)
Source Code
----------------
File Voicent.cs:
----------------
using System;
using System.Net;
using System.IO;
namespace Voicent
{
///
/// Interface class for making telephone calls using the simple
/// API of Voicent Gateway.
///
public class Voicent
{
///
/// Default constructor use http://localhost:8155
///
public Voicent()
{
m_host = "localhost";
m_port = 8155;
}
///
/// Constructor with host and port
///
/// Hostname of Voicent Gateway
/// port number of Voicent Gateway
public Voicent(string host, int port)
{
m_host = host;
m_port = port;
}
///
/// Call the specified phone number and play the text using
/// text-to-speech engine
///
/// telephone number to call
/// text message to play
/// if set to one, automatically remove call record on
/// gateway after the call is made
/// Call Request ID on gateway
public string CallText(string phoneno, string text, bool selfdelete)
{
// call request url
string urlstr = "/ocall/callreqHandler.jsp";
// setting the http post string
string poststr = "info=Simple Text Call " + phoneno;
poststr += "&phoneno=" + phoneno;
poststr += "&firstocc=10";
poststr += "&selfdelete=";
poststr += (selfdelete ? "1" : "0");
poststr += "&txt=" + text;
// Send Call Request
String rcstr = PostToGateway(urlstr, poststr);
return GetRequestID(rcstr);
}
///
/// Call the specified phone number and play the audio file
///
/// telephone number to call
/// audio file path name
/// if set to one, automatically remove call record on
/// gateway after the call is made
/// Call Request ID on gateway
public string CallAudio(string phoneno, string filename, bool selfdelete)
{
// call request url
string urlstr = "/ocall/callreqHandler.jsp";
// setting the http post string
string poststr = "info=Simple Audio Call " + phoneno;
poststr += "&phoneno=" + phoneno;
poststr += "&firstocc=10";
poststr += "&selfdelete=";
poststr += (selfdelete ? "1" : "0");
poststr += "&audiofile=" + filename;
// Send Call Request
String rcstr = PostToGateway(urlstr, poststr);
return GetRequestID(rcstr);
}
///
/// Get call request status
///
/// Call request ID
/// status code
public string CallStatus(string reqID)
{
// call status url
string urlstr = "/ocall/callstatusHandler.jsp";
string poststr = "reqid=" + reqID;
// Send Call Request
String rcstr = PostToGateway(urlstr, poststr);
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 "";
}
///
/// Remove the call request on the gateway
///
/// Call Request ID
public void CallRemove(string reqID)
{
// call status url
string urlstr = "/ocall/callremoveHandler.jsp";
string poststr = "reqid=" + reqID;
// Send Call Request
PostToGateway(urlstr, poststr);
}
///
/// Invoke Voicent BroadcastByPhone and start the call-till-confirm escalation process
///
/// BroadcastByPhone executable file path
/// BroadcastByPhone call list file path
/// Audio file, must be PCM 8KHz, 16bit, mono wave file format
/// Confirmation code, numbers only
public void CallTillConfirm(string vcastexe, string vocfile, string wavfile, string ccode)
{
// call request url
string urlstr = "/ocall/callreqHandler.jsp";
// setting the http post string
string poststr = "info=Simple Call till Confirm";
poststr += "&phoneno=1111111"; // any number
poststr += "&firstocc=10";
poststr += "&selfdelete=0";
poststr += "&startexec=" + vcastexe;
string cmdline = "\"" + vocfile + "\" -startnow";
cmdline += " -confirmcode " + ccode;
cmdline += " -wavfile " + "\"" + wavfile + "\"";
// add -cleanstatus if necessary
poststr += "&cmdline=" + cmdline;
PostToGateway(urlstr, poststr);
}
protected string PostToGateway(string urlstr, string poststr)
{
Uri url = new Uri("http://" + m_host + ":" + m_port.ToString() + urlstr);
HttpWebRequest HttpWRequest = (HttpWebRequest) WebRequest.Create(url);
HttpWRequest.Headers.Set("Pragma", "no-cache");
HttpWRequest.Timeout = 60000;
HttpWRequest.Method = "POST";
HttpWRequest.ContentType = "application/x-www-form-urlencoded";
byte[] PostData = System.Text.Encoding.ASCII.GetBytes(poststr);
HttpWRequest.ContentLength = PostData.Length;
Stream tempStream = HttpWRequest.GetRequestStream();
tempStream.Write(PostData,0,PostData.Length);
tempStream.Close();
HttpWebResponse HttpWResponse = (HttpWebResponse) HttpWRequest.GetResponse();
Stream receiveStream = HttpWResponse.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream);
string rcstr = "";
Char[] read = new Char[256];
int count = 0;
while ((count = readStream.Read(read, 0, 256)) > 0) {
rcstr += new String(read, 0, count);
}
HttpWResponse.Close();
readStream.Close();
return rcstr;
}
protected string GetRequestID(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 - index1);
}
private string m_host;
private int m_port;
}
}
--------------------
File TextVoicent.cs:
--------------------
using System;
using System.Threading;
using Voicent;
namespace csapi
{
///
/// Simple class to test Voicent C# Simple Interface
///
class TestVoicent
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
string phoneno = "8147838"; // Replace it with your number
Voicent.Voicent voicent = new Voicent.Voicent();
// Test CallText
string reqId = voicent.CallText(phoneno, "Hello, how are you", true);
Console.WriteLine("Call request ID = " + reqId);
// Test CallAudio
reqId = voicent.CallAudio(phoneno, "C:/Program Files/Voicent/MyRecordings/sample_message.wav", false);
Console.WriteLine("Call request ID = " + reqId);
// try to get status
while (true) {
Thread.Sleep(20000); // wair for 20 seconds
string status = voicent.CallStatus(reqId);
Console.WriteLine("Call Status: " + status);
if (status.Length != 0)
break;
}
// remove the call request on the gateway
voicent.CallRemove(reqId);
// Test call-till-confirm
voicent.CallTillConfirm("C:/Program Files/Voicent/BroadcastByPhone/bin/vcast.exe",
"C:/temp/testctf.voc",
"C:/Program Files/Voicent/MyRecordings/sample_message.wav",
"12345");
}
}
}