right  Talk To Us!

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 '';