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.
Note, the progress page is expected to respond with a status of 204 No Content.

Uses actions: Receive Fax

    • {
          "actions" :
          [
              {
                  "receive_fax" :
                  {
                      "next_page"  :
                      {
                          "url"    : "ReceiveFaxComplete",
                          "method" : "Post"
                      },
                      "progress_page":
                      {
                          "url"    : "ReceiveFaxProgress",
                          "method" : "Post"
                      }
                  }
              }
          ],
          "token" : "my instance id",
          "api_version": "2.0"
      }
      
    • {
          "actions" :
          [
          ],
          "token" : "my instance id",
          "api_version": "2.0"
      }
      
    • {
          [
          ],
          "token" : "Error for Action: xxxx  ActionIndex: xxxx  Result: xxxx"
      }
      
    • {
      }
      
      
    • Implementing this sample as an ASP.Net Web application:

      • // CSharp Wrapper sample for the Aculab Telephony REST API.
        //
        // Simple Receive Fax:
        // A simple application that receives a fax from an answered inbound call.
        // It requests progress notifications while the fax is being received and a call 
        // to a next page when the fax receiving completes.
        
        using System;
        using System.Collections.Generic;
        using Aculab.Cloud.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);
                String token = ourRequest.InstanceInfo.Token;
        
                // Setup the actions
                List<TelephonyAction> actions = new List<TelephonyAction>
                {
                    new ReceiveFax(new WebPageRequest("ReceiveFaxComplete.aspx"), new WebPageRequest("ReceiveFaxProgress.aspx"))
                };
        
                // Respond
                TelephonyResponse ourResponse = new TelephonyResponse(actions, token);
                ourResponse.ToHttpResponse(Response);
            }
        }
        
      • // CSharp Wrapper sample for the Aculab Telephony REST API.
        //
        // A page from the Simple Receive Fax sample:
        // This receives notifications of the progress of the fax receiving.
        
        using System;
        using System.Net;
        using Aculab.Cloud.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);
                String token = ourRequest.InstanceInfo.Token;
                Aculab.Cloud.RestAPIWrapper.ReceiveFaxProgress progress = (Aculab.Cloud.RestAPIWrapper.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
                Response.StatusCode = (int)HttpStatusCode.NoContent;
            }
        }
        
      • // CSharp Wrapper sample for the Aculab Telephony REST API.
        //
        // A page from the Simple Receive Fax sample:
        // This is called when the fax receiving has completed.
        
        using System;
        using Aculab.Cloud.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);
                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 Aculab.Cloud.RestAPIWrapper;
        
        public partial class ErrorPage : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                // Unpack the request
                TelephonyRequest ourRequest = new TelephonyRequest(Request);
                ErrorResult result = ourRequest.InstanceInfo.ErrorResult;
        
                String token = String.Format("Action: {0}\nActionIndex: {1}\nResult: {2}",
                    result.Action, result.ActionIndex, result.Result);
        
                // Respond
                TelephonyResponse ourResponse = new TelephonyResponse(null, token);
                ourResponse.ToHttpResponse(Response);
            }
        }
        
        
      • using System;
        using Aculab.Cloud.RestAPIWrapper;
        
        public partial class FinalPage : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                // Unpack the request
                TelephonyRequest ourRequest = new TelephonyRequest(Request);
            }
        }
        
        
    • Implementing this sample as an ASP.Net Core Web application:

      • // CSharp Wrapper sample for the Aculab Telephony REST API.
        //
        // Simple Receive Fax:
        // A simple application that receives a fax from an answered inbound call.
        // It requests progress notifications while the fax is being received and a call 
        // to a next page when the fax receiving completes.
        
        using System;
        using System.Collections.Generic;
        using Microsoft.AspNetCore.Mvc;
        using Aculab.Cloud.RestAPIWrapper;
        using System.Net;
        using System.Threading.Tasks;
        
        namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
        {
            [Route("SimpleReceiveFax")]
            public class SimpleReceiveFaxController : ControllerBase
            {
                // Process the GET or POST request, set up the actions and construct the json response.
                [Route("FirstPage")]
                [HttpGet]
                [HttpPost]
                [ProducesResponseType(200)]
                [ProducesResponseType(400)]
                [ProducesResponseType(500)]
                public async Task<IActionResult> SimpleReceiveFax()
                {
                    try
                    {
                        // Unpack the request
                        var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
                        String token = telephonyRequest.InstanceInfo.Token;
        
                        // Setup the actions required
                        List<TelephonyAction> actions = new List<TelephonyAction>();
                        actions.Add(new ReceiveFax(new WebPageRequest("SimpleReceiveFax/ReceiveFaxComplete"), 
                                                   new WebPageRequest("SimpleReceiveFax/ReceiveFaxProgress")));
        
                        // Create response
                        TelephonyResponse ourResponse = new TelephonyResponse(actions, token);
                        return new OkObjectResult(ourResponse.ToJson(this));
                    }
                    catch (ArgumentException)
                    {
                        return BadRequest();
                    }
                    catch (Exception e)
                    {
                        return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
                    }
                }
            }
        }
        
      • // CSharp Wrapper sample for the Aculab Telephony REST API.
        //
        // Simple Receive Fax:
        // A simple application that receives a fax from an answered inbound call.
        // It requests progress notifications while the fax is being received and a call 
        // to a next page when the fax receiving completes.
        
        using System;
        using System.Collections.Generic;
        using Microsoft.AspNetCore.Mvc;
        using Aculab.Cloud.RestAPIWrapper;
        using System.Net;
        using System.Threading.Tasks;
        
        namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
        {
            [Route("SimpleReceiveFax")]
            public class SimpleReceiveFaxController : ControllerBase
            {
                // Process the GET or POST progress request.
                [Route("ReceiveFaxProgress")]
                [HttpGet]
                [HttpPost]
                [ProducesResponseType(200)]
                [ProducesResponseType(400)]
                [ProducesResponseType(500)]
                public async Task<IActionResult> ReceiveFaxProgress()
                {
                    try
                    {
                        // Unpack the request
                        var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
                        String token = telephonyRequest.InstanceInfo.Token;
                        RestAPIWrapper.ReceiveFaxProgress progress = (RestAPIWrapper.ReceiveFaxProgress)telephonyRequest.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 with no content
                        return StatusCode((int)HttpStatusCode.NoContent);
                    }
                    catch (ArgumentException)
                    {
                        return BadRequest();
                    }
                    catch (Exception e)
                    {
                        return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
                    }
                }
            }
        }
        
      • // CSharp Wrapper sample for the Aculab Telephony REST API.
        //
        // Simple Receive Fax:
        // A simple application that receives a fax from an answered inbound call.
        // It requests progress notifications while the fax is being received and a call 
        // to a next page when the fax receiving completes.
        
        using System;
        using System.Collections.Generic;
        using Microsoft.AspNetCore.Mvc;
        using Aculab.Cloud.RestAPIWrapper;
        using System.Net;
        using System.Threading.Tasks;
        
        namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
        {
            [Route("SimpleReceiveFax")]
            public class SimpleReceiveFaxController : ControllerBase
            {
                // Process the GET or POST request, set up the actions and construct the json response.
                [Route("ReceiveFaxComplete")]
                [HttpGet]
                [HttpPost]
                [ProducesResponseType(200)]
                [ProducesResponseType(400)]
                [ProducesResponseType(500)]
                public async Task<IActionResult> ReceiveFaxComplete()
                {
                    try
                    {
                        // Unpack the request
                        var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
                        String token = telephonyRequest.InstanceInfo.Token;
                        ReceiveFaxResult result = (ReceiveFaxResult)telephonyRequest.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;
        
                        // Create response
                        TelephonyResponse ourResponse = new TelephonyResponse(token);
                        return new OkObjectResult(ourResponse.ToJson(this));
                    }
                    catch (ArgumentException)
                    {
                        return BadRequest();
                    }
                    catch (Exception e)
                    {
                        return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
                    }
                }
            }
        }
        
      • // ASP.NET Core CSharp Wrapper sample for the Aculab Telephony REST API.
        
        using System;
        using Microsoft.AspNetCore.Mvc;
        using Aculab.Cloud.RestAPIWrapper;
        using System.Net;
        using System.Threading.Tasks;
        
        namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
        {
            public class RESTSampleController : ControllerBase
            {
                // Process the GET or POST request for the Error condition
                [Route("ErrorPage")]
                [HttpGet]
                [HttpPost]
                [ProducesResponseType(200)]
                [ProducesResponseType(400)]
                [ProducesResponseType(500)]
                public async Task<IActionResult> ErrorPage()
                {
                    try
                    {
                        // Unpack the request
                        var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
                        ErrorResult result = telephonyRequest.InstanceInfo.ErrorResult;
        
                        String token = String.Format("Action: {0}\nActionIndex: {1}\nResult: {2}",
                            result.Action, result.ActionIndex, result.Result);
        
                        // Create response
                        TelephonyResponse ourResponse = new TelephonyResponse(null, token);
                        return new OkObjectResult(ourResponse.ToJson(this));
                    }
                    catch (ArgumentException)
                    {
                        return BadRequest();
                    }
                    catch (Exception e)
                    {
                        return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
                    }
                }
            }
        }
        
      • // ASP.NET Core CSharp Wrapper sample for the Aculab Telephony REST API.
        
        using System;
        using Microsoft.AspNetCore.Mvc;
        using Aculab.Cloud.RestAPIWrapper;
        using System.Net;
        using System.Threading.Tasks;
        
        namespace Aculab.Cloud.RESTAPI.NETCoreCSharpSamples.Controllers
        {
            public class RESTSampleController : ControllerBase
            {
                // Process the GET or POST request for the Final Page
                [Route("FinalPage")]
                [HttpGet]
                [HttpPost]
                [ProducesResponseType(200)]
                [ProducesResponseType(400)]
                [ProducesResponseType(500)]
                public async Task<IActionResult> FinalPage()
                {
                    try
                    {
                        // Unpack the request
                        var telephonyRequest = await TelephonyRequest.UnpackRequestAsync(Request);
                        String token = telephonyRequest.InstanceInfo.Token;
        
                        // Create response
                        // Only very limited actions can be returned here
                        TelephonyResponse ourResponse = new TelephonyResponse(null, token);
                        return new OkObjectResult(ourResponse.ToJson(this));
                    }
                    catch (ArgumentException)
                    {
                        return BadRequest();
                    }
                    catch (Exception e)
                    {
                        return StatusCode((int)HttpStatusCode.InternalServerError, e.Message);
                    }
                }
            }
        }
        
  • Implemented as ASP.Net Web App:

    • ' Visual Basic Wrapper sample for the Aculab Telephony REST API.
      '
      ' The first page for the Simple Receive Fax sample:
      ' A simple application that receives a fax from an answered inbound call.
      ' It requests progress notifications while the fax is being received and a call 
      ' to a next page when the fax receiving completes.
      Imports System.Collections.Generic
      Imports Aculab.Cloud.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)
      
              ' 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 instance id")
              ourResponse.ToHttpResponse(Response)
          End Sub
      End Class
      
      
    • ' Visual Basic Wrapper sample for the Aculab Telephony REST API.
      '
      ' A page from the Simple Receive Fax sample:
      ' This receives notifications of the progress of the fax receiving.
      Imports System.Net
      Imports Aculab.Cloud.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)
              Dim token As String = ourRequest.InstanceInfo.Token
              Dim progress As Aculab.Cloud.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
              Response.StatusCode = HttpStatusCode.NoContent
          End Sub
      End Class
      
      
    • ' Visual Basic Wrapper sample for the Aculab Telephony REST API.
      '
      ' A page from the Simple Receive Fax sample:
      ' This is called when the fax receiving has completed.
      Imports Aculab.Cloud.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)
              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
      
      
    • ' Visual Basic Wrapper sample for the Aculab Telephony REST API.
      '
      ' A generic error page for all the samples.
      Imports Aculab.Cloud.RestAPIWrapper
      
      Partial Class ErrorPage
          Inherits System.Web.UI.Page
      
          Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
      
              ' Unpack the request
              Dim ourRequest As TelephonyRequest = New TelephonyRequest(Request)
              Dim result As ErrorResult = ourRequest.InstanceInfo.ErrorResult
      
              Dim token As String = String.Format("Action: {0}\nActionIndex: {1}\nResult: {2}", _
                  result.Action, result.ActionIndex, result.Result)
      
              ' Respond
              Dim ourResponse As TelephonyResponse = New TelephonyResponse(token)
              ourResponse.ToHttpResponse(Response)
          End Sub
      End Class
      
      
    • ' Visual Basic Wrapper sample for the Aculab Telephony REST API.
      '
      ' A generic final page for all the samples:
      Imports Aculab.Cloud.RestAPIWrapper
      
      Partial Class FinalPage
          Inherits System.Web.UI.Page
      
          Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
      
              ' Unpack the request
              Dim ourRequest As TelephonyRequest = New TelephonyRequest(Request)
      
              ' Do application tidying up
              ' ...
          End Sub
      End Class
      
      
  • Implemented as Java Servlets:

    • // Java Servlet sample for the Aculab Telephony REST API.
      //
      // Simple Receive Fax:
      // A simple application that receives a fax from an answered inbound call.
      // It requests progress notifications while the fax is being received and a call 
      // to a next page when the fax receiving completes.
      
      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 SimpleReceiveFax extends HttpServlet
      {
      	private static final long serialVersionUID = 7808170260824303032L;
      
      	@Override
          public void doGet(HttpServletRequest request,
                            HttpServletResponse response)
              throws IOException, ServletException
          {
             	handleRequest(request, response);
          }
          
          @Override
          public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
                          throws IOException, ServletException
          {
          	handleRequest(request, response);
          }
          
          private void handleRequest(HttpServletRequest request,
                                     HttpServletResponse response) throws IOException
          {
              // Unpack the request
              TelephonyRequest ourRequest = new TelephonyRequest(request);
      
              String token = ourRequest.getInstanceInfo().getToken();
              
              // Set up the actions
              List<TelephonyAction> actions = new ArrayList<TelephonyAction>();
              ReceiveFax rxFaxAction = new ReceiveFax(
                      new WebPageRequest("ReceiveFaxComplete"), 
                      new WebPageRequest("ReceiveFaxProgress"));
              actions.add(rxFaxAction);
      
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(actions, token);
              ourResponse.setHttpServletResponse(response);
          }
      }
      
      
    • // Java Servlet sample for the Aculab Telephony REST API.
      //
      // A page from the Simple Receive Fax sample:
      // This receives notifications of the progress of the fax receiving.
      
      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
      {
      	private static final long serialVersionUID = -5873850255346099488L;
      
      	@Override
          public void doGet(HttpServletRequest request,
                            HttpServletResponse response)
              throws IOException, ServletException
          {
             	handleRequest(request, response);
          }
          
          @Override
          public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
                          throws IOException, ServletException
          {
          	handleRequest(request, response);
          }
          
          private void handleRequest(HttpServletRequest request,
                                     HttpServletResponse response) throws IOException
          {
              // Unpack the request
              TelephonyRequest ourRequest = new TelephonyRequest(request);
      
              String token = ourRequest.getInstanceInfo().getToken();
              com.aculab.telephonyrestapi.ReceiveFaxProgress progress = (com.aculab.telephonyrestapi.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
              response.setStatus(HttpServletResponse.SC_NO_CONTENT);
          }
      }
      
      
    • // Java Servlet sample for the Aculab Telephony REST API.
      //
      // A page from the Simple Receive Fax sample:
      // This is called when the fax receiving has completed.
      
      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
      {
      	private static final long serialVersionUID = -8602547053444851906L;
      
      	@Override
          public void doGet(HttpServletRequest request,
                            HttpServletResponse response)
              throws IOException, ServletException
          {
             	handleRequest(request, response);
          }
          
          @Override
          public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
                          throws IOException, ServletException
          {
          	handleRequest(request, response);
          }
          
          private void handleRequest(HttpServletRequest request,
                                     HttpServletResponse response) throws IOException
          {
              // Unpack the request
              TelephonyRequest ourRequest = new TelephonyRequest(request);
      
              String token = ourRequest.getInstanceInfo().getToken();
              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();
              
              // Respond
              TelephonyResponse ourResponse = new TelephonyResponse(token);
              ourResponse.setHttpServletResponse(response);
          }
      }
      
      
    • // Java Servlet sample for the Aculab Telephony REST API.
      //
      
      package com.aculab.telephonyrestapi.samples;
      
      import javax.servlet.http.*;
      import javax.servlet.ServletException;
      import java.io.IOException;
      import java.util.ArrayList;
      import java.util.List;
      
      import com.aculab.telephonyrestapi.*;
      
      public class ErrorPage extends HttpServlet
      {
          private static final long serialVersionUID = -4842873371047361437L;
      
          @Override
          public void doGet(HttpServletRequest request,
                            HttpServletResponse response)
              throws IOException, ServletException
          {
             	handleRequest(request, response);
          }
          
          @Override
          public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
                          throws IOException, ServletException
          {
          	handleRequest(request, response);
          }
          
          private void handleRequest(HttpServletRequest request,
                                     HttpServletResponse response) throws IOException
          {
              // Unpack the request
              TelephonyRequest ourRequest = new TelephonyRequest(request);
      
              ErrorResult result = ourRequest.getInstanceInfo().getErrorResult();
      
              String token = String.format("Action: %s\nActionIndex: %d\nResult: %s", result.getAction(), result.getActionIndex(), result.getResult());
              
              // Respond
              List<TelephonyAction> actions = new ArrayList<TelephonyAction>();
              TelephonyResponse ourResponse = new TelephonyResponse(actions, token);
              ourResponse.setHttpServletResponse(response);
          }
      }
      
      
    • // Java Servlet sample for the Aculab Telephony REST API.
      //
      
      package com.aculab.telephonyrestapi.samples;
      
      import javax.servlet.http.*;
      import javax.servlet.ServletException;
      import java.io.IOException;
      import com.aculab.telephonyrestapi.*;
      
      public class FinalPage extends HttpServlet
      {
          private static final long serialVersionUID = 5940620014313056844L;
      
          @Override
          public void doGet(HttpServletRequest request,
                            HttpServletResponse response)
              throws IOException, ServletException
          {
             	handleRequest(request, response);
          }
          
          @Override
          public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
                          throws IOException, ServletException
          {
          	handleRequest(request, response);
          }
          
          private void handleRequest(HttpServletRequest request,
                                     HttpServletResponse response) throws IOException
          {
              // Unpack the request
              TelephonyRequest ourRequest = new TelephonyRequest(request);
          }
      }
      
      
  • Implemented as a Flask web application:

    • @app.route('/SimpleReceiveFax', methods=['GET','POST'])
      def handle_SimpleReceiveFax():
      
          my_request = TelephonyRequest(request)
          app_inst_id = my_request.get_application_instance_id()
          print("SimpleReceiveFax: app_inst_id='{}'".format(app_inst_id))
      
          fax_action = ReceiveFax(next_page=WebPage(url='ReceiveFaxComplete', method='POST'),
                          progress_page=WebPage(url='ReceiveFaxProgress', method='POST'))
      
          list_of_actions = []
          list_of_actions.append(fax_action)
          my_response = TelephonyResponse(list_of_actions, token='my instance id')
          return my_response.get_json()
      
      
    • @app.route('/ReceiveFaxProgress', methods=['GET','POST'])
      def handle_ReceiveFaxProgress():
      
          my_request = TelephonyRequest(request)
          my_token = my_request.get_token()
          action_progress = my_request.get_action_progress()
          negotiated_settings = action_progress.get('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 = action_progress.get('progress').get('pages_received', '0')
          print("Page count {0}".format(pages))
      
          # Return 'No content' Http Response code
          empty_json = '{}'.encode('utf-8')
          return empty_json, 204
      
      
    • @app.route('/ReceiveFaxComplete', methods=['GET','POST'])
      def handle_ReceiveFaxComplete():
      
          my_request = TelephonyRequest(request)
          my_token = my_request.get_token()
          action_result = my_request.get_action_result()
          
          fax_result = action_result.get('result').get('description')
          fax_filename = action_result.get('result').get('fax_filename')
          print("The fax result is {0}".format(fax_result))
          print("The fax filename is {0}".format(fax_filename))
          
          my_response = TelephonyResponse([], my_token)
          return my_response.get_json()  
      
    • @app.route('/ErrorPage', methods=['GET','POST'])
      def handle_ErrorPage():
          
          my_request = TelephonyRequest(request)
          token = my_request.get_token()
          app_inst_id = my_request.get_application_instance_id()
          error_result_dict = my_request.get_error_result()
          action_string = error_result_dict.get('action', "?")
          result_string = error_result_dict.get('result', "?")
          print("ErrorPage: app_inst_id='{}' token='{}' action='{}' result='{}'".format(app_inst_id, token, action_string, result_string))
          
          my_response = TelephonyResponse([Play(text_to_say='An error has occurred')])
          return my_response.get_json()
      
      
    • @app.route('/FinalPage', methods=['GET','POST'])
      def handle_FinalPage():
          # The FinalPage handler follows the guidelines on:
          # https://www.aculab.com/cloud/voice-and-fax-apis/rest-api/rest-api-version-2/rest-api-version-2/writing-a-rest-application
          # The guidelines are:
          #   "Your final page should return an empty response, a 204 is preferable, but empty JSON is acceptable."
          my_request = TelephonyRequest(request)
          token = my_request.get_token()
          app_inst_id = my_request.get_application_instance_id()
          print("FinalPage: app_inst_id='{}' token='{}'".format(app_inst_id, token))
          empty_json = '{}'.encode('utf-8')
          return empty_json
          
      
    • <?php
      header("Content-Type: application/json; charset=UTF-8");
      
      require __DIR__ . "/../../autoload.php";
      
      use Aculab\TelephonyRestAPI\ReceiveFax;
      use Aculab\TelephonyRestAPI\WebPageRequest;
      use Aculab\TelephonyRestAPI\Response;
      
      $fax = new ReceiveFax(new WebPageRequest('ReceiveFaxComplete.php', 'POST'));
      $fax->setProgressPage('ReceiveFaxProgress.php', 'POST');
      
      
      $response = new Response();
      $response->setToken('my instance id');
      $response->addAction($fax);
      
      print $response;
      
      
    • <?php
      header("Content-Type: application/json; charset=UTF-8");
      http_response_code(204);
      
      require __DIR__ . "/../../autoload.php";
      
      use Aculab\TelephonyRestAPI\InstanceInfo;
      
      $info = InstanceInfo::getInstanceInfo();
      $p = $info->getActionProgress();
      
      // Add your own code here to use the progress information.
      // e.g. update a database, write to a log...
      $pages = $p->getPagesReceived();
      
      
    • <?php
      header("Content-Type: application/json; charset=UTF-8");
      
      require __DIR__ . "/../../autoload.php";
      
      use Aculab\TelephonyRestAPI\InstanceInfo;
      use Aculab\TelephonyRestAPI\Response;
      
      $info = InstanceInfo::getInstanceInfo();
      $result = $info->getActionResult();
      
      // Add your own code here to use the result information.
      // e.g. update a database, write to a log...
      $filename = $result->getFaxFilename();
      $description = $result->getDescription();
      $pages = $result->getPagesReceived();
      $duration = $result->getSecondsDuration();
      
      
      $response = new Response();
      $response->setToken($info->getToken());
      
      print $response;
      
      
    • <?php
      header("Content-Type: application/json; charset=UTF-8");
      
      require __DIR__ . "/../../autoload.php";
      
      use Aculab\TelephonyRestAPI\Play;
      use Aculab\TelephonyRestAPI\Response;
      use Aculab\TelephonyRestAPI\InstanceInfo;
      
      $info = InstanceInfo::getInstanceInfo();
      
      $error = $info->getErrorResult();
      $action = $error->getAction();
      $desc = $error->getResult();
      if (!is_null($action)) {
          error_log("Error from action \"$action\" with result:" . PHP_EOL . "$desc" . PHP_EOL);
      } else {
          error_log("Error result:" . PHP_EOL . "$desc" . PHP_EOL);
      }
      
      $response = new Response();
      $response->setToken('Error');
      
      $play = new Play();
      $play->addText('An error has occurred.');
      $response->addAction($play);
      
      print $response;
      
      
    • <?php
      require __DIR__ . "/../../autoload.php";
      
      http_response_code(204);
      header("Content-Type: application/json; charset=UTF-8");
      
      use Aculab\TelephonyRestAPI\InstanceInfo;
      
      $info = InstanceInfo::getInstanceInfo();
      $call = $info->getThisCallInfo();
      $callid = $call->getCallId();
      $duration = $call->getSecondsCallDuration();
      error_log("This call id: $callid" . PHP_EOL . "This call duration: $duration" . PHP_EOL);