Informizely customer feedback surveys
By using the Aculab site, you agree with our use of cookies.

voice broadcast Sample

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.

Use actions: Play , Run Menu

    • {
          "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='vxml:digits'>441908273800</say-as>
                                               to let us know that you have received this message."
                          }
                      ]
                  }
              }
          ],
          "token" : "my voice broadcast instance id"
      }
    • {
          "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"
      }
    • {
          "actions" :
          [
              {
                  "play" :
                  {
                      "play_list" :
                      [
                          {
                              "text_to_say" : "Thanks for your confirmation. Goodbye."
                          }
                      ]
                  }
              }
          ],
          "token" : "my voice broadcast 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 VoiceBroadcast : 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 farEndType = ourRequest.InstanceInfo.ThisCall.FarEndType;
      
              // Setup the actions
              List<TelephonyAction> actions = new List<TelephonyAction>();
      
              actions.Add(Play.SayText("Hello."));
      
              if (farEndType.CompareTo("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='vxml:digits'>441908273800</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 this message again.");
                  List<MenuOption> menuOptions = new List<MenuOption>();
                  menuOptions.Add(new MenuOption('1', new WebPageRequest("ConfirmMessage.aspx")));
                  menuOptions.Add(new MenuOption('2', new WebPageRequest("VoiceBroadcast.aspx")));
                  RunMenu runMenuAction = new RunMenu(prompt, menuOptions);
                  runMenuAction.OnDigitTimeoutMessages.Add(Play.SayText("I didn't catch your entry."));
                  runMenuAction.OnInvalidDigitMessages.Add(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);
          }
      }
      
    • using System;
      using System.Collections.Generic;
      using 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);
              if (!ourRequest.IsValid)
              {
                  return;
              }
              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 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 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)
              If Not ourRequest.IsValid Then
                  Return
              End If
      
              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("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 " + _
                                           "441908273800 " + _
                                           "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 this 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(prompt, menuOptions)
                  runMenuAction.OnDigitTimeoutMessages = New List(Of Play)
                  runMenuAction.OnDigitTimeoutMessages.Add(Play.SayText("I didn't catch your entry."))
                  runMenuAction.OnInvalidDigitMessages = New List(Of Play)
                  runMenuAction.OnInvalidDigitMessages.Add(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
      
    • Imports System
      Imports System.Collections.Generic
      Imports 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)
              If Not ourRequest.IsValid Then
                  Return
              End If
              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
      
    • 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 VoiceBroadcast 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 farEndType = ourRequest.getInstanceInfo().getThisCall().getFarEndType();
      
              // Set up the actions
              List<TelephonyAction> actions = new ArrayList<TelephonyAction>();
      
              actions.add(Play.sayText("Hello."));
      
              if (farEndType.compareTo("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='vxml:digits'>441908273800</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 acknoledgement 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 this message again.");
                  List<MenuOption> menuOptions = new ArrayList<MenuOption>();
                  menuOptions.add('1', new WebPageRequest("ConfirmMessage"));
                  menuOptions.add('2', new WebPageRequest("VoiceBroadcast"));
                  RunMenu runMenuAction = new RunMenu(prompt, menuOptions);
      
                  List<Play> onDigitTimeoutMessages = new ArrayList<Play>();
                  onDigitTimeoutMessages.add(Play.sayText("I didn't catch your entry."));
                  runMenuAction.setOnDigitTimeoutMessages(onDigitTimeoutMessages);
      
                  List<Play> onInvalidDigitMessages = new ArrayList<Play>();
                  onInvalidDigitMessages.add(Play.sayText("That wasn't one of the options. Please try again."));
                  runMenuAction.setOnInvalidDigitMessages(onInvalidDigitMessages);
      
                  actions.add(runMenuAction);
              }
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(actions, "my voice broadcast 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 ConfirmMessage 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();
      
              // Set up the actions
              List<TelephonyAction> actions = new ArrayList<TelephonyAction>();
              actions.add(Play.sayText("Thanks for your confirmation. 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.

      # This is an outbound application and, as such, needs to be invoked by the web services API.
      # It uses a Python wrapper for the web services API to invoke this sample.
      # Before running this sample you will need to configure an outbound service that points to it.
      
      import sys, os
      from threading import Thread
      from getpass import getpass
      sys.path.append(os.path.abspath('../..'))
      
      from aculab.telephony_rest_api import *
      from aculab.simple_server import *
      from aculab.base_application import ApplicationBase
      from aculab.web_services import invoke_outbound_service
      
      
      if sys.version > '3':
          def raw_input(text):
              return input(text)
      
      
      class MyThread(Thread):
          def __init__(self, function):
              Thread.__init__(self)
              self._function = function
              self.return_code = 0
      
          def run(self):
              self.return_code = self._function()
      
      
      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(token='voice broadcast 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:
                  # get the call classification (machine / non-machine)       
                  this_call = query_info.ThisCall
                  # the far end type will only be available if classify is enabled
                  far_end_type = this_call.get('far_end_type', 'unknown')
                  play_action = Play(text_to_say="Hello.")
                  if 'far_end_type' == 'answering_machine':
                      play_action.add_text(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='vxml:digits'>441908273800</say-as> "
                                                        "to let us know that you have received this message."),
                                           tts_voice='English US Male Polly Joey')
                      my_actions.add(play_action)
                  else:
                      play_action.add_text(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."),
                                           tts_voice='English US Male Polly Joey')
                      my_actions.add(play_action)
      
                      # set up a run menu action to obtain an acknowledgement or repeat the notification message
                      my_menu = RunMenu()
                      my_menu.on_prompt_play(Play(text_to_say=("Please press 1 to confirm that you have received and understood "
                                                               "this message, or press 2 to hear this message again.")))
                      my_menu.append_menu_option('1', WebPage(url='confirm_message'))
                      my_menu.append_menu_option('2', WebPage(url='first_page'))
                      my_menu.append_on_digit_timeout_message(Play(text_to_say="I didn't catch your entry."))
                      my_menu.append_on_invalid_digit_message(Play(text_to_say="That wasn't one of the options. Please try again."))
                      my_actions.add(my_menu);
      
              elif 'confirm_message' == page:
                  my_actions.add(Play(text_to_say="Thanks for your confirmation. 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]
      
      
      def test_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()
      
      
      if __name__ == "__main__":
          test_thread = MyThread(test_main)
          test_thread.start()
      
          service_name        = raw_input('the outbound service to invoke:')
          service_password    = getpass('your outbound service password:')
          call_to             = raw_input('call to:')
          call_from           = raw_input('call from:')
          token               = raw_input('token:')
          outbound_parameters = raw_input('the outbound service parameters:')
          target              = raw_input('the cloud region or Rapide IP address:')
          username            = raw_input('your cloud or Rapide username:')
      
          outbound_calls = invoke_outbound_service.OutboundCalls(call_to=call_to.strip(),
                                         call_from=call_from.strip(),
                                         token=token.strip(), 
                                         outbound_parameters=outbound_parameters.strip())
          application_instance_ids = invoke_outbound_service.invoke_outbound_service(target=target.strip(), 
                                                             username=username.strip(), 
                                                             service_name=service_name.strip(),
                                                             service_password=service_password.strip(), 
                                                             outbound_calls=outbound_calls)
          test_thread.join()
      
    • declare(encoding='UTF-8');
      spl_autoload_register();
      
      // 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\Actions;
      use \Aculab\TelephonyRestAPI\Play;
      use \Aculab\TelephonyRestAPI\RunMenu;
      use \Aculab\TelephonyRestAPI\MessageList;
      
      $info = InstanceInfo::getInstanceInfo();
      $endType = '';
      $response = new Actions();
      if ($info != null) {
          $response->setToken($info->getToken());
      
          $callInfo = $info->getThisCallInfo();
          if ($callInfo != null) {
              $endType = $callInfo->getFarEndType();
          }
      }
      
      if ($endType == 'human') {
          $response->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."
              )
          );
          // 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($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->add($menu);
      } elseif ($endType == 'answering_machine') {
          $response->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 01234 567890 to let us know that " .
                  "you have received this message."
              )
          );
      } // else no actions, so the call will be disconnected
      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 your confirmation. 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 '';