Voice Broadcast
An outbound application that handles answered outbound calls that have been classified.
Live speakers are played a notification message and then asked to press a digit to confirm they have received and understood the message. Answering machines are played a different notification message.
Live speakers are played a notification message and then asked to press a digit to confirm they have received and understood the message. Answering machines are played a different notification message.
{
"actions" :
[
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "Hello."
}
]
}
},
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "This is a recorded notification message to let you know that Saint Custards Preparatory School will open for the spring term on 5th September next year. Please call <say-as interpret-as='digits'>443069990123</say-as> to let us know that you have received this message."
}
]
}
}
],
"token" : "my voice broadcast instance id",
"api_version": "2.0"
}
{
"actions" :
[
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "Hello."
}
]
}
},
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "This is a notification to let you know that Saint Custards Preparatory School will open for the spring term on 5th September next year."
}
]
}
},
{
"run_menu" :
{
"prompt" :
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "Please press 1 to confirm that you have received and understood this message, or press 2 to hear the message again."
}
]
}
},
"menu_options" :
[
{
"digit" : "1",
"next_page" :
{
"url" : "ConfirmMessage"
}
},
{
"digit" : "2",
"next_page" :
{
"url" : "VoiceBroadcast"
}
}
],
"on_digit_timeout_messages":
[
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "I didn't catch your entry."
}
]
}
}
],
"on_invalid_digit_messages" :
[
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "That wasn't one of the options. Please try again."
}
]
}
}
]
}
}
],
"token" : "my voice broadcast instance id",
"api_version": "2.0"
}
{
"actions" :
[
{
"play" :
{
"play_list" :
[
{
"text_to_say" : "Thanks for your confirmation. Goodbye."
}
]
}
}
],
"token" : "my voice broadcast instance id",
"api_version": "2.0"
}
{
[
],
"token" : "Error for Action: xxxx ActionIndex: xxxx Result: xxxx"
}
{
}
Implementing this sample as an ASP.Net Web application:
// CSharp Wrapper sample for the Aculab Telephony REST API.
//
// Voice Broadcast:
// An application that handles answered outbound calls that have been classified.
// Live speakers are played a notification message and then asked to press a
// digit to confirm they have received and understood the message. Answering
// machines are played a different notification message.
using System;
using System.Collections.Generic;
using Aculab.Cloud.RestAPIWrapper;
public partial class VoiceBroadcast : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Unpack the request
TelephonyRequest ourRequest = new TelephonyRequest(Request);
String farEndType = ourRequest.InstanceInfo.ThisCall.FarEndType;
// Setup the actions
List<TelephonyAction> actions = new List<TelephonyAction>
{
Play.SayText("Hello.")
};
if (farEndType.CompareTo("answering_machine") == 0)
{
// Simply leave a message on the answering machine
actions.Add(Play.SayText("This is a recorded notification message to let you know that Saint " +
"Custards Preparatory School will open for the spring term on 5th " +
"September next year. Please call " +
"<say-as interpret-as='digits'>443069990123</say-as> " +
"to let us know that you have received this message."));
}
else
{
// Play the notification message
actions.Add(Play.SayText("This is a notification to let you know that Saint Custards Preparatory " +
"School will open for the spring term on 5th September next year."));
// Set up a run menu action to obtain an acknowledgement or repeat the notification message
Play prompt = Play.SayText("Please press 1 to confirm that you have received and understood " +
"this message, or press 2 to hear the message again.");
List<MenuOption> menuOptions = new List<MenuOption>
{
new MenuOption('1', new WebPageRequest("ConfirmMessage.aspx")),
new MenuOption('2', new WebPageRequest("VoiceBroadcast.aspx"))
};
RunMenu runMenuAction = new RunMenu(menuOptions, prompt);
runMenuAction.OnDigitTimeoutMessages = new List<Play>
{
Play.SayText("I didn't catch your entry.")
};
runMenuAction.OnInvalidDigitMessages = new List<Play>
{
Play.SayText("That wasn't one of the options. Please try again.")
};
actions.Add(runMenuAction);
}
// Respond
TelephonyResponse ourResponse = new TelephonyResponse(actions, "my voice broadcast instance id");
ourResponse.ToHttpResponse(Response);
}
}
// CSharp Wrapper sample for the Aculab Telephony REST API.
//
// Voice Broadcast:
// ConfirmMessage page
using System;
using System.Collections.Generic;
using Aculab.Cloud.RestAPIWrapper;
public partial class ConfirmMessage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Unpack the request
TelephonyRequest ourRequest = new TelephonyRequest(Request);
String token = ourRequest.InstanceInfo.Token;
// Setup the actions
List<TelephonyAction> actions = new List<TelephonyAction>();
actions.Add(Play.SayText("Thanks for your confirmation. Goodbye."));
// Respond
TelephonyResponse ourResponse = new TelephonyResponse(actions, token);
ourResponse.ToHttpResponse(Response);
}
}
using System;
using Aculab.Cloud.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);
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 Aculab.Cloud.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);
}
}
Implementing this sample as an ASP.Net Core Web application:
// ASP.NET Core CSharp Wrapper sample for the Aculab Telephony REST API.
//
// Voice Broadcast:
// An application that handles answered outbound calls that have been classified.
// Live speakers are played a notification message and then asked to press a
// digit to confirm they have received and understood the message. Answering
// machines are played a different notification message.
using System;
using System.Net;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Aculab.Cloud.RestAPIWrapper;
using System.Threading.Tasks;
namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
{
[Route("VoiceBroadcast")]
public class VoiceBroadcastController : ControllerBase
{
// Process the GET or POST request, set up the actions and construct the json response.
[Route("FirstPage")]
[HttpGet]
[HttpPost]
[ProducesResponseType(200)]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public async Task<IActionResult> VoiceBroadcast()
{
try
{
// Unpack the request
var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
String farEndType = telephonyRequest.InstanceInfo.ThisCall.FarEndType;
// Setup the actions required
List<TelephonyAction> actions = new List<TelephonyAction>();
actions.Add(Play.SayText("Hello."));
if (farEndType.CompareTo("answering_machine") == 0)
{
// Simply leave a message on the answering machine
actions.Add(Play.SayText("This is a recorded notification message to let you know that Saint " +
"Custards Preparatory School will open for the spring term on 5th " +
"September next year. Please call " +
"<say-as interpret-as='digits'>443069990123</say-as> " +
"to let us know that you have received this message."));
}
else
{
// Play the notification message
actions.Add(Play.SayText("This is a notification to let you know that Saint Custards Preparatory " +
"School will open for the spring term on 5th September next year."));
// Set up a run menu action to obtain an acknowledgement or repeat the notification message
Play prompt = Play.SayText("Please press 1 to confirm that you have received and understood " +
"this message, or press 2 to hear the message again.");
List<MenuOption> menuOptions = new List<MenuOption>()
{
new MenuOption('1', new WebPageRequest("VoiceBroadcast/ConfirmMessage")),
new MenuOption('2', new WebPageRequest("VoiceBroadcast/FirstPage"))
};
RunMenu runMenuAction = new RunMenu(menuOptions, prompt);
runMenuAction.OnDigitTimeoutMessages = new List<Play>()
{
Play.SayText("I didn't catch your entry.")
};
runMenuAction.OnInvalidDigitMessages = new List<Play>()
{
Play.SayText("That wasn't one of the options. " +
"Please try again.")
};
actions.Add(runMenuAction);
}
// Create response
TelephonyResponse ourResponse = new TelephonyResponse(actions, "my voice broadcast instance id");
return new OkObjectResult(ourResponse.ToJson(this));
}
catch (ArgumentException)
{
return BadRequest();
}
catch (Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
}
}
}
}
// ASP.NET Core CSharp Wrapper sample for the Aculab Telephony REST API.
//
// Voice Broadcast:
// An application that handles answered outbound calls that have been classified.
// Live speakers are played a notification message and then asked to press a
// digit to confirm they have received and understood the message. Answering
// machines are played a different notification message.
using System;
using System.Net;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Aculab.Cloud.RestAPIWrapper;
using System.Threading.Tasks;
namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
{
[Route("VoiceBroadcast")]
public class VoiceBroadcastController : ControllerBase
{
// Process the GET or POST request, set up the actions and construct the json response.
[Route("ConfirmMessage")]
[HttpGet]
[HttpPost]
[ProducesResponseType(200)]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public async Task<IActionResult> ConfirmMessage()
{
try
{
// Unpack the request
var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
String token = telephonyRequest.InstanceInfo.Token;
// Setup the actions required
List<TelephonyAction> actions = new List<TelephonyAction>()
{
Play.SayText("Thanks for your confirmation. Goodbye.")
};
// Create response
TelephonyResponse ourResponse = new TelephonyResponse(actions, token);
return new OkObjectResult(ourResponse.ToJson(this));
}
catch (ArgumentException)
{
return BadRequest();
}
catch (Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
}
}
}
}
// ASP.NET Core CSharp Wrapper sample for the Aculab Telephony REST API.
using System;
using Microsoft.AspNetCore.Mvc;
using Aculab.Cloud.RestAPIWrapper;
using System.Net;
using System.Threading.Tasks;
namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
{
public class RESTSampleController : ControllerBase
{
// Process the GET or POST request for the Error condition
[Route("ErrorPage")]
[HttpGet]
[HttpPost]
[ProducesResponseType(200)]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public async Task<IActionResult> ErrorPage()
{
try
{
// Unpack the request
var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
ErrorResult result = telephonyRequest.InstanceInfo.ErrorResult;
String token = String.Format("Action: {0}\nActionIndex: {1}\nResult: {2}",
result.Action, result.ActionIndex, result.Result);
// Create response
TelephonyResponse ourResponse = new TelephonyResponse(null, token);
return new OkObjectResult(ourResponse.ToJson(this));
}
catch (ArgumentException)
{
return BadRequest();
}
catch (Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
}
}
}
}
// ASP.NET Core CSharp Wrapper sample for the Aculab Telephony REST API.
using System;
using Microsoft.AspNetCore.Mvc;
using Aculab.Cloud.RestAPIWrapper;
using System.Net;
using System.Threading.Tasks;
namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
{
public class RESTSampleController : ControllerBase
{
// Process the GET or POST request for the Final Page
[Route("FinalPage")]
[HttpGet]
[HttpPost]
[ProducesResponseType(200)]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public async Task<IActionResult> FinalPage()
{
try
{
// Unpack the request
var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
String token = telephonyRequest.InstanceInfo.Token;
// Create response
// Only very limited actions can be returned here
TelephonyResponse ourResponse = new TelephonyResponse(null, token);
return new OkObjectResult(ourResponse.ToJson(this));
}
catch (ArgumentException)
{
return BadRequest();
}
catch (Exception e)
{
return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
}
}
}
}
Implemented as ASP.Net Web App:
' Visual Basic Wrapper sample for the Aculab Telephony REST API.
'
' The first page for the Voice Broadcast sample:
' An application that handles answered outbound calls that have been classified.
' Live speakers are played a notification message and then asked to press a
' digit to confirm they have received and understood the message. Answering
' machines are played a different notification message.
Imports System.Collections.Generic
Imports Aculab.Cloud.RestAPIWrapper
Partial Class VoiceBroadcast
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)
Dim farEndType As String = ourRequest.InstanceInfo.ThisCall.FarEndType
' Setup the actions
Dim actions As List(Of TelephonyAction) = New List(Of TelephonyAction)
actions.Add(Play.SayText("Hello."))
If farEndType.CompareTo("answering_machine") = 0 Then
' Simply leave a message on the answering machine
actions.Add(Play.SayText("This is a recorded notification message to let you know that Saint " +
"Custards Preparatory School will open for the spring term on 5th " +
"September next year. Please call " +
"<say-as interpret-as='digits'>443069990123</say-as> " +
"to let us know that you have received this message."))
Else
' Play the notification message
actions.Add(Play.SayText("This is a notification to let you know that Saint Custards Preparatory " + _
"School will open for the spring term on 5th September next year."))
' Set up a run menu action to obtain an acknowledgement or repeat the notification message
Dim prompt As Play = Play.SayText("Please press 1 to confirm that you have received and understood " +
"this message, or press 2 to hear the message again.")
Dim menuOptions As List(Of MenuOption) = New List(Of MenuOption)
menuOptions.Add(New MenuOption("1", New WebPageRequest("ConfirmMessage.aspx")))
menuOptions.Add(New MenuOption("2", New WebPageRequest("VoiceBroadcast.aspx")))
Dim runMenuAction As RunMenu = New RunMenu(menuOptions, prompt)
runMenuAction.OnDigitTimeoutMessages = New List(Of Play) From {
Play.SayText("I didn't catch your entry.")
}
runMenuAction.OnInvalidDigitMessages = New List(Of Play) From {
Play.SayText("That wasn't one of the options. Please try again.")
}
actions.Add(runMenuAction)
End If
' Respond
Dim ourResponse As TelephonyResponse = New TelephonyResponse(actions, "my voice broadcast instance id")
ourResponse.ToHttpResponse(Response)
End Sub
End Class
' Visual Basic Wrapper sample for the Aculab Telephony REST API.
'
' A page from the Voice Broadcast sample:
' This plays a confirmation message.
Imports System.Collections.Generic
Imports Aculab.Cloud.RestAPIWrapper
Partial Class ConfirmMessage
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)
Dim token As String = ourRequest.InstanceInfo.Token
' Setup the actions
Dim actions As List(Of TelephonyAction) = New List(Of TelephonyAction)
actions.Add(Play.SayText("Thanks for your confirmation. Goodbye."))
' Respond
Dim ourResponse As TelephonyResponse = New TelephonyResponse(actions, token)
ourResponse.ToHttpResponse(Response)
End Sub
End Class
' Visual Basic Wrapper sample for the Aculab Telephony REST API.
'
' A generic error page for all the samples.
Imports Aculab.Cloud.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)
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
' Visual Basic Wrapper sample for the Aculab Telephony REST API.
'
' A generic final page for all the samples:
Imports Aculab.Cloud.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)
' Do application tidying up
' ...
End Sub
End Class
Implemented as Java Servlets:
// Java Servlet sample for the Aculab Telephony REST API.
//
// Voice Broadcast:
// An application that handles answered outbound calls that have been classified.
// Live speakers are played a notification message and then asked to press a
// digit to confirm they have received and understood the message. Answering
// machines are played a different notification message.
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 VoiceBroadcast extends HttpServlet
{
private static final long serialVersionUID = -3689455870958870956L;
@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);
String farEndType = ourRequest.getInstanceInfo().getThisCall().getFarEndType();
// Set up the actions
List<TelephonyAction> actions = new ArrayList<TelephonyAction>();
actions.add(Play.sayText("Hello."));
if (farEndType.compareTo("answering_machine") == 0)
{
// Simply leave a message on the answering machine
actions.add(Play.sayText("This is a recorded notification message to let you know that Saint " +
"Custards Preparatory School will open for the spring term on 5th " +
"September next year. Please call " +
"<say-as interpret-as='digits'>443069990123</say-as> " +
"to let us know that you have received this message."));
}
else
{
// Play the notification message
actions.add(Play.sayText("This is a notification to let you know that Saint Custards Preparatory " +
"School will open for the spring term on 5th September next year."));
// Set up a run menu action to obtain an acknowledgement or repeat the notification message
Play prompt = Play.sayText("Please press 1 to confirm that you have received and understood " +
"this message, or press 2 to hear the message again.");
List<MenuOption> menuOptions = new ArrayList<MenuOption>();
menuOptions.add(new MenuOption('1', new WebPageRequest("ConfirmMessage")));
menuOptions.add(new MenuOption('2', new WebPageRequest("VoiceBroadcast")));
RunMenu runMenuAction = new RunMenu(prompt, menuOptions);
List<Play> timeoutMsgs = new ArrayList<Play>();
timeoutMsgs.add(Play.sayText("I didn't catch your entry.", "Paul"));
runMenuAction.setOnDigitTimeoutMessages(timeoutMsgs);
List<Play> invalidMsgs = new ArrayList<Play>();
invalidMsgs.add(Play.sayText("That wasn't one of the options. Please try again.", "Paul"));
runMenuAction.setOnInvalidDigitMessages(invalidMsgs);
actions.add(runMenuAction);
}
// Respond
TelephonyResponse ourResponse = new TelephonyResponse(actions, "my voice broadcast instance id");
ourResponse.setHttpServletResponse(response);
}
}
// Java Servlet sample for the Aculab Telephony REST API.
//
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 ConfirmMessage extends HttpServlet
{
private static final long serialVersionUID = 1052633605054507967L;
@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);
String token = ourRequest.getInstanceInfo().getToken();
// Set up the actions
List<TelephonyAction> actions = new ArrayList<TelephonyAction>();
actions.add(Play.sayText("Thanks for your confirmation. Goodbye.", "Paul"));
// Respond
TelephonyResponse ourResponse = new TelephonyResponse(actions, token);
ourResponse.setHttpServletResponse(response);
}
}
// Java Servlet sample for the Aculab Telephony REST API.
//
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);
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);
}
}
// Java Servlet sample for the Aculab Telephony REST API.
//
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);
}
}
Implemented as a Flask web application:
@app.route('/VoiceBroadcast', methods=['GET','POST'])
def handle_VoiceBroadcast():
my_request = TelephonyRequest(request)
app_inst_id = my_request.get_application_instance_id()
print("VoiceBroadcast: app_inst_id='{}'".format(app_inst_id))
# get the call classification (machine / non-machine)
this_call = my_request.get_this_call()
list_of_actions = []
list_of_actions.append(Play(text_to_say="Hello."))
# the far end type will only be available if classify is enabled
far_end_type = this_call.get('far_end_type', 'unknown')
if far_end_type.find('answering_machine') != -1:
play_action = Play(text_to_say=("This is a recorded notification message to let you know that Saint "
"Custards Preparatory School will open for the spring term on 5th "
"September next year. Please call "
"<say-as interpret-as='digits'>443069990123</say-as> "
"to let us know that you have received this message."))
list_of_actions.append(play_action)
else:
play_action = Play(text_to_say=("This is a notification to let you know that Saint Custards Preparatory "
"School will open for the spring term on 5th September next year."))
list_of_actions.append(play_action)
menu_options = []
menu_options.append(MenuOption('1',WebPage(url='ConfirmMessage')))
menu_options.append(MenuOption('2',WebPage(url='VoiceBroadcast')))
# set up a run menu action to obtain an acknowledgement or repeat the notification message
my_menu = RunMenu(menu_options)
my_menu.set_prompt(Play(text_to_say=("Please press 1 to confirm that you have received and understood "
"this message, or press 2 to hear the message again.")))
my_menu.set_on_digit_timeout_messages([Play(text_to_say="I didn't catch your entry.")])
my_menu.set_on_invalid_digit_messages([Play(text_to_say="That wasn't one of the options. Please try again.")])
list_of_actions.append(my_menu)
my_response = TelephonyResponse(list_of_actions, token='my voice broadcast instance id')
return Response(response=my_response.get_json(), content_type='application/json;charset=utf-8')
@app.route('/ConfirmMessage', methods=['GET','POST'])
def handle_ConfirmMessage():
my_request = TelephonyRequest(request)
my_token = my_request.get_token()
list_of_actions = []
list_of_actions.append(Play(text_to_say="Thanks for your confirmation. Goodbye."))
my_response = TelephonyResponse(list_of_actions, my_token)
return Response(response=my_response.get_json(), content_type='application/json;charset=utf-8')
@app.route('/ErrorPage', methods=['GET','POST'])
def handle_ErrorPage():
my_request = TelephonyRequest(request)
token = my_request.get_token()
app_inst_id = my_request.get_application_instance_id()
error_result_dict = my_request.get_error_result()
action_string = error_result_dict.get('action', "?")
result_string = error_result_dict.get('result', "?")
print("ErrorPage: app_inst_id='{}' token='{}' action='{}' result='{}'".format(app_inst_id, token, action_string, result_string))
my_response = TelephonyResponse([Play(text_to_say='An error has occurred')])
return Response(response=my_response.get_json(), content_type='application/json;charset=utf-8')
@app.route('/FinalPage', methods=['GET','POST'])
def handle_FinalPage():
# The FinalPage handler follows the guidelines on:
# https://www.aculab.com/cloud/voice-and-fax-apis/rest-api/rest-api-version-2/writing-a-rest-application
# The guidelines are:
# "Your final page should return an empty response, a 204 is preferable, but empty JSON is acceptable."
my_request = TelephonyRequest(request)
token = my_request.get_token()
app_inst_id = my_request.get_application_instance_id()
print("FinalPage: app_inst_id='{}' token='{}'".format(app_inst_id, token))
empty_json = '{}'.encode('utf-8')
return Response(response=empty_json, status=204, content_type='application/json;charset=utf-8')
<?php
header("Content-Type: application/json; charset=UTF-8");
require __DIR__ . "/../../autoload.php";
// set headers to prevent the page being cached by intermediaries
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Content-Type: application/json; charset=UTF-8");
use \Aculab\TelephonyRestAPI\InstanceInfo;
use \Aculab\TelephonyRestAPI\Response;
use \Aculab\TelephonyRestAPI\Play;
use \Aculab\TelephonyRestAPI\RunMenu;
use \Aculab\TelephonyRestAPI\MessageList;
$info = InstanceInfo::getInstanceInfo();
$endType = '';
$response = new Response();
if ($info != null) {
$response->setToken($info->getToken());
$callInfo = $info->getThisCallInfo();
if ($callInfo != null) {
$endType = $callInfo->getFarEndType();
}
}
$response->addAction(Play::sayText("Hello."));
if ($endType == 'human') {
$response->addAction(
Play::sayText(
"This is a notification to let you know that Saint Custards Preparatory " .
"School will open for the spring term on 5th September next year."
)
);
// Create the menu action
$menuPrompt = Play::sayText(
"Please press 1 to confirm that you have " .
"received and understood this message, " .
"or press 2 to hear the message again."
);
$menu = new RunMenu();
$menu->setPrompt($menuPrompt);
$menu->addMenuOption('1', 'ConfirmMessage.php');
$menu->addMenuOption('2', 'First.php');
// Set up some new info messages for digit timeout and invalid digit
$onDigitTimeoutMessages = new MessageList();
$onDigitTimeoutMessages->addMessage(
Play::sayText(
"I didn't catch your entry."
)
);
$menu->setOnDigitTimeoutMessages($onDigitTimeoutMessages);
$onInvalidDigitMessages = new MessageList();
$onInvalidDigitMessages->addMessage(
Play::sayText(
"That wasn't one of the options. Please try again."
)
);
$menu->setOnInvalidDigitMessages($onInvalidDigitMessages);
$response->addAction($menu);
} elseif ($endType == 'answering_machine') {
$response->addAction(
Play::sayText(
"This is a recorded notification message to let you know that Saint " .
"Custards Preparatory School will open for the spring term on 5th " .
"September next year. Please call " .
"<say-as interpret-as='digits'>443069990123</say-as> " .
"to let us know that you have received this message."
)
);
} // else no actions, so the call will be disconnected
print $response;
<?php
header("Content-Type: application/json; charset=UTF-8");
require __DIR__ . "/../../autoload.php";
use \Aculab\TelephonyRestAPI\Play;
use \Aculab\TelephonyRestAPI\Response;
use \Aculab\TelephonyRestAPI\InstanceInfo;
$info = InstanceInfo::getInstanceInfo();
$response = new Response();
$response->setToken($info->getToken());
$play = new Play();
$play->addText('Thanks for your confirmation. Goodbye.');
$response->addAction($play);
print $response;
<?php
header("Content-Type: application/json; charset=UTF-8");
require __DIR__ . "/../../autoload.php";
use Aculab\TelephonyRestAPI\Play;
use Aculab\TelephonyRestAPI\Response;
use Aculab\TelephonyRestAPI\InstanceInfo;
$info = InstanceInfo::getInstanceInfo();
$error = $info->getErrorResult();
$action = $error->getAction();
$desc = $error->getResult();
if (!is_null($action)) {
error_log("Error from action \"$action\" with result:" . PHP_EOL . "$desc" . PHP_EOL);
} else {
error_log("Error result:" . PHP_EOL . "$desc" . PHP_EOL);
}
$response = new Response();
$response->setToken('Error');
$play = new Play();
$play->addText('An error has occurred.');
$response->addAction($play);
print $response;
<?php
require __DIR__ . "/../../autoload.php";
http_response_code(204);
header("Content-Type: application/json; charset=UTF-8");
use Aculab\TelephonyRestAPI\InstanceInfo;
$info = InstanceInfo::getInstanceInfo();
$call = $info->getThisCallInfo();
$callid = $call->getCallId();
$duration = $call->getSecondsCallDuration();
error_log("This call id: $callid" . PHP_EOL . "This call duration: $duration" . PHP_EOL);