simple record Sample
A simple application that plays a prompt message to an answered inbound or outbound call, plays a beep, then records a message, before playing a final message and hanging up.
-
-
{ "actions" : [ { "play" : { "play_list" : [ { "text_to_say" : "Please leave a message after the beep. Press hash to end the recording." } ] } }, { "record" : { "beep_on_start" : true, "barge_in_digits" : "#", "milliseconds_max_silence" : 5000, "next_page" : { "url" : "Acknowledgement" } } } ], "token" : "my record instance id" }
-
{ "actions" : [ { "play" : { "play_list" : [ { "text_to_say" : "Thanks for leaving a recording. Goodbye." } ] } } ], "token" : "my record instance id" }
-
{ [ ], "token" : "Error for Action: xxxx ActionIndex: xxxx Result: xxxx" }
-
{ }
-
-
Implemented as ASP.Net Web Forms:
-
using System; using System.Collections.Generic; using RestAPIWrapper; public partial class SimpleRecord : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(Request); if (!ourRequest.IsValid) { return; } // Setup the actions List<TelephonyAction> actions = new List<TelephonyAction>(); actions.Add(Play.SayText("Please leave a message after the beep. Press hash to end the recording.")); Record recordAction = new Record(new WebPageRequest("Acknowledgement.aspx")); recordAction.BeepOnStart = true; recordAction.BargeInDigits = "#"; recordAction.MillisecondsMaxSilence = 5000; actions.Add(recordAction); // Respond TelephonyResponse ourResponse = new TelephonyResponse(actions, "my record instance id"); ourResponse.ToHttpResponse(Response); } }
-
using System; using System.Collections.Generic; using RestAPIWrapper; public partial class Acknowledgement : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(Request); if (!ourRequest.IsValid) { return; } String token = ourRequest.InstanceInfo.Token; RecordResult result = (RecordResult)ourRequest.InstanceInfo.ActionResult; // Access the name of the recorded file String recordedFilename = result.Filename; // Setup the actions List<TelephonyAction> actions = new List<TelephonyAction>(); if (result.ContainsSound) { actions.Add(Play.SayText("Thanks for leaving a recording. Goodbye.")); } else { actions.Add(Play.SayText("No message was recorded. Goodbye.")); } // Respond TelephonyResponse ourResponse = new TelephonyResponse(actions, token); ourResponse.ToHttpResponse(Response); } }
-
using System; using System.Collections.Generic; using RestAPIWrapper; public partial class ErrorPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(Request); if (!ourRequest.IsValid) { return; } ErrorResult result = ourRequest.InstanceInfo.ErrorResult; String token = String.Format("Action: {0}\nActionIndex: {1}\nResult: {2}", result.Action, result.ActionIndex, result.Result); // Respond TelephonyResponse ourResponse = new TelephonyResponse(null, token); ourResponse.ToHttpResponse(Response); } }
-
using System; using System.Collections.Generic; using RestAPIWrapper; public partial class FinalPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(Request); if (!ourRequest.IsValid) { return; } } }
-
-
Implemented as ASP.Net Web Forms:
-
Imports System Imports System.Collections.Generic Imports RestAPIWrapper Partial Class SimpleRecord Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) ' Unpack the request Dim ourRequest As TelephonyRequest = New TelephonyRequest(Request) If Not ourRequest.IsValid Then Return End If Dim callFrom As String = ourRequest.InstanceInfo.ThisCall.CallFrom ' Setup the actions Dim actions As List(Of TelephonyAction) = New List(Of TelephonyAction) actions.Add(Play.SayText("Please leave a message after the beep. Press hash to end the recording.")) Dim recordAction As Record = New Record(New WebPageRequest("Acknowledgement.aspx")) recordAction.BeepOnStart = True recordAction.BargeInDigits = "#" recordAction.MillisecondsMaxSilence = 5000 actions.Add(recordAction) ' Respond Dim ourResponse As TelephonyResponse = New TelephonyResponse(actions, "my record instance id") ourResponse.ToHttpResponse(Response) End Sub End Class
-
Imports System Imports System.Collections.Generic Imports RestAPIWrapper Partial Class Acknowledgement Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) ' Unpack the request Dim ourRequest As TelephonyRequest = New TelephonyRequest(Request) If Not ourRequest.IsValid Then Return End If ' Get interrupt details from the action result. Dim previousAction As String = ourRequest.InstanceInfo.ActionResult.Action Dim interrupted As Boolean = ourRequest.InstanceInfo.ActionResult.Interrupted Dim token As String = ourRequest.InstanceInfo.Token Dim result As RecordResult = ourRequest.InstanceInfo.ActionResult ' Access the name of the recorded file Dim recordedFilename As String = result.Filename ' Setup the actions Dim actions As List(Of TelephonyAction) = New List(Of TelephonyAction) If (result.ContainsSound) Then actions.Add(Play.SayText("Thanks for leaving a recording. Goodbye.")) Else actions.Add(Play.SayText("No message was recorded. Goodbye.")) End If ' Respond Dim ourResponse As TelephonyResponse = New TelephonyResponse(actions, token) ourResponse.ToHttpResponse(Response) End Sub End Class
-
Imports System Imports System.Collections.Generic Imports RestAPIWrapper Partial Class ErrorPage Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) ' Unpack the request Dim ourRequest As TelephonyRequest = New TelephonyRequest(Request) If Not ourRequest.IsValid Then Return End If Dim result As ErrorResult = ourRequest.InstanceInfo.ErrorResult Dim token As String = String.Format("Action: {0}\nActionIndex: {1}\nResult: {2}", _ result.Action, result.ActionIndex, result.Result) ' Respond Dim ourResponse As TelephonyResponse = New TelephonyResponse(token) ourResponse.ToHttpResponse(Response) End Sub End Class
-
Imports System Imports System.Collections.Generic Imports RestAPIWrapper Partial Class FinalPage Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) ' Unpack the request Dim ourRequest As TelephonyRequest = New TelephonyRequest(Request) If Not ourRequest.IsValid Then Return End If End Sub End Class
-
-
Implemented as Java Servlets:
-
package com.aculab.telephonyrestapi.samples; import javax.servlet.http.*; import javax.servlet.ServletException; import java.io.IOException; import com.aculab.telephonyrestapi.*; public class SimpleRecord extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(request); if (!ourRequest.isValid()) { return; } // Setup the actions List<TelephonyAction> actions = new ArrayList<TelephonyAction>(); actions.add(Play.sayText("Please leave a message after the beep. Press hash to end the recording.")); Record recordAction = new Record(new WebPageRequest("Acknowledgement")); recordAction.setBeepOnStart(true); recordAction.setBargeInDigits("#"); recordAction.setMillisecondsMaxSilence(5000); actions.add(recordAction); // Respond TelephonyResponse ourResponse = new TelephonyResponse(actions, "my record instance id"); ourResponse.setHttpServletResponse(response); } }
-
package com.aculab.telephonyrestapi.samples; import javax.servlet.http.*; import javax.servlet.ServletException; import java.io.IOException; import com.aculab.telephonyrestapi.*; public class Acknowledgement extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(request); if (!ourRequest.isValid()) { return; } String token = ourRequest.getInstanceInfo().getToken(); RecordResult result = (RecordResult)ourRequest.getInstanceInfo().getActionResult(); // Setup the actions List<TelephonyAction> actions = new ArrayList<TelephonyAction>(); if (result.getContainsSound()) { actions.add(Play.sayText("Thanks for leaving a recording. Goodbye.")); } else { actions.add(Play.sayText("No message was recorded. Goodbye.")); } // Respond TelephonyResponse ourResponse = new TelephonyResponse(actions, token); ourResponse.setHttpServletResponse(response); } }
-
package com.aculab.telephonyrestapi.samples; import javax.servlet.http.*; import javax.servlet.ServletException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.aculab.telephonyrestapi.*; public class ErrorPage extends HttpServlet { private static final long serialVersionUID = -4842873371047361437L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(request); if (!ourRequest.isValid()) { return; } ErrorResult result = ourRequest.getInstanceInfo().getErrorResult(); String token = String.format("Action: %s\nActionIndex: %d\nResult: %s", result.getAction(), result.getActionIndex(), result.getResult()); // Respond List<TelephonyAction> actions = new ArrayList<TelephonyAction>(); TelephonyResponse ourResponse = new TelephonyResponse(actions, token); ourResponse.setHttpServletResponse(response); } }
-
package com.aculab.telephonyrestapi.samples; import javax.servlet.http.*; import javax.servlet.ServletException; import java.io.IOException; import com.aculab.telephonyrestapi.*; public class FinalPage extends HttpServlet { private static final long serialVersionUID = 5940620014313056844L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { handleRequest(request, response); } private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { // Unpack the request TelephonyRequest ourRequest = new TelephonyRequest(request); if (!ourRequest.isValid()) { return; } } }
-
-
Implemented using a wrapper for Python's wsgiref.simple_server.
For the purposes of this sample, the first page is first_page, the final page is final_page and the error page is error_page.
-
The application base class.
from aculab.telephony_rest_api import Play class ApplicationBase: def __init__(self, exit=None): self.exit = exit or [self.exit] def exit(self): pass def error_page(self, my_actions, query_info): try: error_result = query_info.ErrorResult action = error_result.get('action', 'none') print("\nError {0} : {1}\n".format(action, error_result['result'])) my_actions.add(Play(text_to_say='I encountered an error.')) except Exception as exc: print("Error page exception: {0}".format(exc)) return True def final_page(self, my_actions, query_info): try: tcall = query_info.ThisCall if tcall: print("This call ID : {0}".format(tcall.get('call_id'))) print("This call duration : {0}".format(tcall.get('seconds_call_duration'))) self.exit[0]() except Exception as exc: print("Final page exception: {0}".format(exc)) return True def unknown_page(self, my_actions, query_info): try: my_actions.add(Play(text_to_say='I find myself on an unknown page.')) except Exception as exc: print("Unknown page exception: {0}".format(exc)) return True
-
The application code.
import sys, os sys.path.append(os.path.abspath('../..')) # import the wrappers for the REST API, these are used to create and send tasks from aculab.telephony_rest_api import * from aculab.simple_server import * from aculab.base_application import ApplicationBase class Application(ApplicationBase): def __init__(self): ApplicationBase.__init__(self) def responder(self, query, start_response): query_info = RESTQuery(query) page = query_info.Page my_actions = Actions('record sample') # on your inbound service, set the first page entry to point to this page # e.g., http://<ip address>:<port>/first_page if 'first_page' == page: # play a prompt and then record my_actions.add(Play(text_to_say='Please leave a message after the beep. Press hash to end the recording.')) my_actions.add(Record(barge_in_digits="#", milliseconds_max_silence=5000, next_page=WebPage(url='next_page'), beep_on_start=True)) elif 'next_page' == page: # after recording, come here to say thank you action_result = query_info.ActionResult print("Recorded file is {0}".format(action_result['result']['filename'])) my_actions.add(Play(text_to_say='Thanks for leaving the recording. Goodbye.')) elif 'final_page' == page: if self.final_page(my_actions, query_info) is False: return None elif 'error_page' == page: if self.error_page(my_actions, query_info) is False: return None else: if self.unknown_page(my_actions, query_info) is False: return None response_body = my_actions.get_json() response_headers = [('Content-Type', 'application/json; charset=utf-8'), ('Content-Length', str(len(response_body)))] start_response('200 OK', response_headers) return [response_body] if __name__ == "__main__": application = Application() # Set the host and port you want to use in the rest_simple_server.py file. # To use SSL also set the key and certificate file. ss = SimpleServer(application, simple_server_host, simple_server_port, simple_server_keyfile, simple_server_certfile) ss.start() print("Hit ctl-break to quit.")
-
-
-
declare(encoding='UTF-8'); spl_autoload_register(); header("Content-Type: application/json; charset=UTF-8"); $response = new \Aculab\TelephonyRestAPI\Actions(); $response->setToken('my record instance id'); $play = new \Aculab\TelephonyRestAPI\Play(); $play->addText('Please leave a message after the beep. Press hash to end the recording.'); $response->add($play); $record = new \Aculab\TelephonyRestAPI\Record(); $record->setNextPage('Acknowledgement.php'); $record->setBeepOnStart(true); $record->setBargeInDigits('#'); $record->setMillisecondsMaxSilence(5000); $response->add($record); print $response;
-
declare(encoding='UTF-8'); spl_autoload_register(); header("Content-Type: application/json; charset=UTF-8"); $info = \Aculab\TelephonyRestAPI\InstanceInfo::getInstanceInfo(); $response = new \Aculab\TelephonyRestAPI\Actions(); $response->setToken($info->getToken()); $play = new \Aculab\TelephonyRestAPI\Play(); $play->addText('Thanks for leaving a recording. Goodbye.'); $response->add($play); print $response;
-
declare(encoding='UTF-8'); spl_autoload_register(); header("Content-Type: application/json; charset=UTF-8"); $info = \Aculab\TelephonyRestAPI\InstanceInfo::getInstanceInfo(); $error = $info->getErrorResult(); $action = $error->getAction(); $desc = $error->getResult(); if (!is_null($action)) { error_log("Error from action \"$action\" with result:\n$desc\n"); } else { error_log("Error result:\n$desc\n"); } $response = new \Aculab\TelephonyRestAPI\Actions(); $response->setToken('Error'); $play = new \Aculab\TelephonyRestAPI\Play(); $play->addText('An error has occurred.'); $response->add($play); print $response;
-
declare(encoding='UTF-8'); spl_autoload_register(); header("Content-Type: application/json; charset=UTF-8"); $info = \Aculab\TelephonyRestAPI\InstanceInfo::getInstanceInfo(); $call = $info->getThisCallInfo(); $callid = $call->getCallId(); $duration = $call->getSecondsCallDuration(); error_log("This all id: $callid\nThis call duration: $duration\n"); print '';
-