Informizely customer feedback surveys
By using the Aculab site, you agree with our use of cookies.
  • Cloud voice, SMS and fax

    Powerful, easy to integrate voice, SMS and fax APIs.

    Find out more

  • Voice biometrics

    Add enhanced security and user convenience with biometric voice authentication to your customer contact apps
     

    Find out more

  • Gateways

    For IP and TDM interworking, protocol conversion and more
     

    Find out more

  • Telephony hardware and software

    Reliable, deployment proven technology for a wide range of enterprise and telco grade telecom applications
     

    Find out more

simple receive fax Sample

A simple inbound application that starts a fax session on an inbound call and receives a fax to a tif file.

A progress page is set so that the application can present the negotiated fax settings and a page count after each page has been received. A next page is set so that the application can present the fax termination result and the name of the tif file.

Use actions: Receive Fax

    • {
          "actions" :
          [
              {
                  "receive_fax" :
                  {
                      "next_page"  :
                      {
                          "url"    : "ReceiveFaxComplete",
                          "method" : "Post"
                      }
                      "progress_page":
                      {
                          "url"    : "FaxProgress",
                          "method" : "Post"
                      }
                  }
              }
          ],
          "token" : "my 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 SimpleReceiveFax : 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(new ReceiveFax(new WebPageRequest("ReceiveFaxComplete.aspx"), new WebPageRequest("ReceiveFaxProgress.aspx")));
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(actions, "my receive fax instance id");
              ourResponse.ToHttpResponse(Response);
          }
      }
      
    • using System;
      using System.Collections.Generic;
      using RestAPIWrapper;
      
      public partial class ReceiveFaxProgress : 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;
              ReceiveFaxProgress progress = (ReceiveFaxProgress)ourRequest.InstanceInfo.ActionProgress;
      
              // Add your own code here to use the progress information.
              // e.g. update a database, write to a log...
              int pagesReceived = progress.PagesReceived;
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(token);
              ourResponse.ToHttpResponse(Response);
          }
      }
      
      
    • using System;
      using System.Collections.Generic;
      using RestAPIWrapper;
      
      public partial class ReceiveFaxComplete : 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;
              ReceiveFaxResult result = (ReceiveFaxResult)ourRequest.InstanceInfo.ActionResult;
      
              // Add your own code here to use the result information.
              // e.g. update a database, write to a log...
              int pagesReceived = result.PagesReceived;
              String faxFilename = result.FaxFilename;
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(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 SimpleReceiveFax
          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
      
              ' Setup the actions
              Dim actions As List(Of TelephonyAction) = New List(Of TelephonyAction)
              actions.Add(New ReceiveFax(New WebPageRequest("ReceiveFaxComplete.aspx"), New WebPageRequest("ReceiveFaxProgress.aspx")))
      
              ' Respond
              Dim ourResponse As TelephonyResponse = New TelephonyResponse(actions, "my receive fax instance id")
              ourResponse.ToHttpResponse(Response)
          End Sub
      End Class
      
    • Imports System
      Imports System.Collections.Generic
      Imports RestAPIWrapper
      
      Partial Class ReceiveFaxProgress
          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
              Dim progress As RestAPIWrapper.ReceiveFaxProgress = ourRequest.InstanceInfo.ActionProgress
      
              ' Add your own code here to use the progress information.
              ' e.g. update a database, write to a log...
              Dim pagesReceived As Integer = progress.PagesReceived
      
              ' 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 ReceiveFaxComplete
          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
              Dim result As ReceiveFaxResult = ourRequest.InstanceInfo.ActionResult
      
              ' Add your own code here to use the result information.
              ' e.g. update a database, write to a log...
              Dim pagesReceived As Integer = result.PagesReceived
              Dim faxFilename As String = result.FaxFilename
      
              ' 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 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 SimpleReceiveFax 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(new ReceiveFax(new WebPageRequest("ReceiveFaxComplete"), new WebPageRequest("ReceiveFaxProgress")));
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(actions, "my receive fax 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 ReceiveFaxProgress 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();
              ReceiveFaxProgress result = (ReceiveFaxProgress)ourRequest.getInstanceInfo().getActionProgress();
      
              // Add your own code here to use the progress information.
              // e.g. update a database, write to a log...
              int pagesReceived = progress.getPagesReceived();
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(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 ReceiveFaxComplete 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();
              ReceiveFaxResult result = (ReceiveFaxResult)ourRequest.getInstanceInfo().getActionResult();
      
              // Add your own code here to use the result information.
              // e.g. update a database, write to a log...
              int pagesReceived = result.getPagesReceived();
              String faxFilename = result.getFaxFilename();
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(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(token='receive fax 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:
                  fax_action = ReceiveFax(progress_page=WebPage(url='fax_progress_page', method='POST'),
                                          next_page=WebPage(url='fax_completed_page', method='POST'))
                  my_actions.add(fax_action)
      
              elif 'fax_progress_page' == page:
                  negotiated_settings = query_info.Progress['progress'].get('negotiated_settings')
                  if negotiated_settings:
                      modem = negotiated_settings['modem']
                      datarate = negotiated_settings['data_rate']
                      print("Modem {0} rate {1}".format(modem, datarate))
                  pages = query_info.Progress['progress'].get('pages_received', '0')
                  print("Page count {0}".format(pages))
                      
              elif 'fax_completed_page' == page:
                  fax_result = query_info.ActionResult['result']['description']
                  fax_filename = query_info.ActionResult['result']['fax_filename']
                  print("The fax result is {0}".format(fax_result))
                  print("The fax filename is {0}".format(fax_filename))
      
              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");
      
      $fax = new Aculab\TelephonyRestAPI\ReceiveFax();
      $fax->setProgressPage('FaxProgress.php', 'POST');
      $fax->setNextPage('ReceiveFaxComplete.php', 'POST');
      
      $response = new Aculab\TelephonyRestAPI\Actions();
      $response->setToken('my instance id');
      $response->add($fax);
      
      print $response;
      
    • declare(encoding='UTF-8');
      spl_autoload_register();
      header("Content-Type: application/json; charset=UTF-8");
      
      $info = Aculab\TelephonyRestAPI\InstanceInfo::getInstanceInfo();
      $p = $info->getActionProgress();
      $str = 'recv progress: ';
      $str .= ' pages: ' . $p->getPagesReceived();
      $ns = $p->getNegotiatedFaxSettings();
      $str .= ' modem: ' . $ns->getModem() . ' at: ' . $ns->getDataRate() . ' remote: ' . $ns->getRemoteSubscriberId();
      error_log($str);
      
      print '';
      
    • declare(encoding='UTF-8');
      spl_autoload_register();
      header("Content-Type: application/json; charset=UTF-8");
      
      $info = Aculab\TelephonyRestAPI\InstanceInfo::getInstanceInfo();
      $result = $info->getActionResult();
      $str = 'Fax file: ' . $result->getFaxFilename() . ' result: ' . $result->getDescription();
      $str .= ' pages: ' . $result->getPagesReceived();
      $str .= ' time: ' . $result->getSecondsDuration();
      error_log($str);
      
      print '';
      
      
    • 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 '';
      

The Aculab blog

News, views and industry insights from Aculab

  • Jail time for biometrics

    The people who work in the Broadville Retention Centre, a temporary home for semi-retired hoodlums, love working there. The centre in south-west London, England, has views of flightpaths from Heathrow Airport; sights evocative of the freedom temporarily denied its residents. Workers at the centre on the other hand enjoy freedom of movement, not only in coming and going according to their shift patterns, but also within the building complex.

    Read more

  • Aculab Cloud and the EU GDPR

    The EU General Data Protection Regulation (GDPR) is important to Aculab and its customers in the EU region, and also for our non-EU customers who use Aculab Cloud for their customers who reside in the EU. This is a summary of what we have done to ensure the privacy and security of customer data on Aculab Cloud.

    Read more

  • Preparing to meet the EU GDPR rules with Aculab Cloud

    Firstly, lets establish what the GDPR is, and why it’s important to Aculab and its customers in the EU region, and also for our non-EU customers who use Aculab Cloud for their customers who reside in the EU.

    Read more

  • Improved Aculab Cloud documentation and a new console

    We’ve been busy in the background recently at Aculab with a major website refresh. Aculab has evolved over decades (40 years this year!) from a vendor supplying hardware to a much more software-centric product company. We still sell telecom gateways extensively, but nowadays the bulk of our enabling technology business is software, and in particular our communications platform-as-a-service (CPaaS) product, Aculab Cloud.

    Read more

  • Interoperability is predictable

    Way back in 2007, while presenting a seminar in Prague, someone asked me for my prediction on when SS7 would no longer be in use. My answer was suitably vague, but something on the lines of, “at least 10 to 15 years.” Ten years on, I wasn’t wrong. Still, I may not be right. SS7 is showing its age, but it’s not about to draw its pension just yet.

    Read more