FaxServer using Asterisk: Difference between revisions

From Alpine Linux
(More draft notes about asterisk as faxserver)
(replace /etc/init.d with rc-service)
 
(5 intermediate revisions by 3 users not shown)
Line 3: Line 3:
__NOTOC__
__NOTOC__
= Installation =
= Installation =
This wiki-doc is based on [http://www.alpinelinux.org/downloads Alpine Linux 2.6] ''(but might also work on version 2.1.3 or higher)''
This wiki-doc is based on [https://www.alpinelinux.org/downloads Alpine Linux 2.6] ''(but might also work on version 2.1.3 or higher)''


Start by [[Installation|setting up]] a Alpine Linux base system ''(you will most likely want to run <code>setup-alpine</code> to setup the most basic settings)''
Start by [[Installation|setting up]] a Alpine Linux base system ''(you will most likely want to run <code>setup-alpine</code> to setup the most basic settings)''
Line 94: Line 94:
; bindport is the local UDP port that Asterisk will listen on
; bindport is the local UDP port that Asterisk will listen on
bindaddr{{=}}0.0.0.0                ; IP address to bind to (0.0.0.0 binds to all)
bindaddr{{=}}0.0.0.0                ; IP address to bind to (0.0.0.0 binds to all)
srvlookup{{=}}yes                  ; Enable DNS SRV lookups on outbound calls
srvlookup{{=}}no                    ; Enable DNS SRV lookups on outbound calls
disallow{{=}}all                    ; First disallow all codecs
disallow{{=}}all                    ; First disallow all codecs
allow{{=}}ulaw ; Allow codecs (in order of preference)
allow{{=}}ulaw ; Allow codecs (in order of preference)
allow{{=}}alaw ; Allow codecs (in order of preference)
allow{{=}}alaw ; Allow codecs (in order of preference)
udpbindaddr{{=}}0.0.0.0
udpbindaddr{{=}}0.0.0.0
canreinvite{{=}}yes
t38pt_udptl{{=}}yes,redundancy,maxdatagram{{=}}400
}}
==== Enable udptl ====
* Edit the appropriate file
{{cmd|vi /etc/asterisk/udptl.conf}}
* Copy this content to the file
{{cat|/etc/asterisk/udptl.conf|[general]
}}
==== Configure fax ====
* Edit the appropriate file
{{cmd|vi /etc/asterisk/res_fax.conf}}
* Copy this content to the file
{{cat|/etc/asterisk/res_fax.conf|[general]
maxrate{{=}}9600
minrate{{=}}2400
statusevents{{=}}yes
}}
}}


==== Configure dialplan ====
==== Configure dialplan ====
* Edit the appropriate file
* Edit the appropriate file
{{cmd|vi /etc/asterisk/extensions.ael}}
{{cmd|vi /etc/asterisk/extensions.lua}}


* Copy this content to the file
* Copy this content to the file
{{cat|/etc/asterisk/extensions.ael|context fax_incoming {
{{cat|/etc/asterisk/extensions.lua|TODO...
  _X. {{=}}> {
    Set(FAXDATE{{=}}${STRFTIME(,,%Y%m%d%H%M%S)});
    Set(FAXFILE{{=}}/tmp/fax_${EXTEN}_${FAXDATE}.tif);
    Answer();
    Wait(1);
    ReceiveFax(${FAXFILE},f);
    Verbose(3,- Fax receipt completed with status: ${FAXSTATUS});
    if ("${FAXSTATUS}" {{=}} "FAILED") {
      Set(DEBUGINFO\nFAXSTATUS: ${FAXSTATUS}\nFAXERROR: ${FAXERROR}\nLOCALSTATIONID: ${LOCALSTATIONID}\nLOCALHEADERINFO: ${LOCALHEADERINFO}\nREMOTESTATIONID: ${REMOTESTATIONID}\nFAXPAGES: ${FAXPAGES}\nFAXBITRATE: ${FAXBITRATE}\nFAXRESOLUTION: ${FAXRESOLUTION});
      Verbose(3,- Trying to send a email reporting the failure});
      System(echo "${DEBUGINFO}" {{!}} /usr/bin/email -s "Incoming fax for ${EXTEN} failed" grp-support);
      System(/usr/bin/mkdir -p /tmp/fax-failed);
      System(/usr/bin/mv ${FAXFILE} /tmp/fax-failed/);
    } else {
      Verbose(3,- Trying to send a email containing the fax});
      System(/usr/bin/email -s "Incoming fax for ${EXTEN} failed" -b -a ${FAXFILE} grp-${EXTEN});
      System(/usr/bin/mkdir -p /tmp/fax-processed);
      System(/usr/bin/mv ${FAXFILE} /tmp/fax-processed/);
    };
  };
}
}}
}}


Line 136: Line 135:
==== Start things up ====
==== Start things up ====
Now its time to start up the services
Now its time to start up the services
{{cmd|/etc/init.d/asterisk start}}
{{cmd|rc-service asterisk start}}
Configure {{pkg|asterisk}} to autostart at next reboot
Configure {{pkg|asterisk}} to autostart at next reboot
{{cmd|rc-update add asterisk}}
{{cmd|rc-update add asterisk}}
= Testing =
== Sending fax ==
=== Prepare ===
Save a '<tt>.tiff</tt>' file into '<tt>/tmp/</tt>' (in our example we name the file '<tt>/tmp/testfax.tiff</tt>').
Create a file that looks something like this ''(modify it for your local needs)''.
{{cat|/tmp/testfax.txt|[general]
Channel: SIP/123@10.20.30.40
Callerid: "TestFAX"
WaitTime: 30
Maxretries:3
RetryTime: 300
Account: 1000
Application: SendFax
Data: /tmp/testfax.tiff
}}
Change permissions on the newly created files
{{cmd|chown asterisk:asterisk /tmp/testfax*}}
=== Send the fax ===
Now copy the '<tt>/tmp/testfax.txt</tt>' to '<tt>/var/spool/asterisk/outgoing/</tt>'. The second you do that, {{pkg|asterisk}} will try to send the fax based on what you wrote in the file.
{{cmd|cp -p /tmp/testfax.txt /var/spool/asterisk/outgoing/}}
[[Category:Telephony]]

Latest revision as of 10:41, 17 November 2023

This material is work-in-progress ...

This is a experimental page to see if this could replace a more complex setup using Asterisk+IAXmodem+hylafax
(Last edited by Sertonix on 17 Nov 2023.)

This document aims to create a as simple as possible to setup fax server to send and receive faxes using asterisk and asterisk-fax.

Installation

This wiki-doc is based on Alpine Linux 2.6 (but might also work on version 2.1.3 or higher)

Start by setting up a Alpine Linux base system (you will most likely want to run setup-alpine to setup the most basic settings)

Firewall

You might want to setup a firewall to protect your system. We will not address this task in this document. Some firewall alternatives in Alpine Linux are

Configure email

Install required packages

We will use the package email to send the faxes by email to various recipients. Lets start by installing the package

apk add email

General configuration

  • Edit the appropriate file

vi /etc/email/email.conf

Tip: Work with your SMTP provider to set the appropriate settings. Most likely you will want to
  • Change the variables SMTP_SERVER, SMTP_PORT, MY_NAME, MY_EMAIL, ADDRESS_BOOK
  • Comment out the variable SIGNATURE_FILE

Address book

  • Edit the appropriate file (In this example we assume you did not change the value of ADDRESS_BOOK variable).

vi /etc/email/email.address.template

  • Define some email addresses that suits your needs.
    The upcoming asterisk config assumes that you have some predefined records in this address book. Example:

Contents of /etc/email/email.address.template

# Individual email addresses single:joe = joe@foo.bar single:jeff = jeff@foo.bar single:jill = jill@foo.bar # Group that will receive error reports group: grp-support = joe, jeff # Group that will receive faxes originated to extension 12345 group: grp-12345 = joe, jill

Test functionality

When you done your email configuration you can test this by running commands like this:

email -s "testmail" -b jeff

Configure Asterisk

There are multiple ways to configure Asterisk. This document only describes a very basic setup which you might want to modify based on your needs. But by following this document, you should have a fully functional fax-server using only asterisk and asterisk-fax.

Install required packages

At this stage your Alpine Linux only holds some basic packages for base functionallity. We will need to install some extra packages in order to get the fax functionallity.

apk add asterisk asterisk-fax

General setup

Set some general settings

  • Edit the appropriate file

vi /etc/asterisk/asterisk.conf

  • Copy this content to the file

Contents of /etc/asterisk/asterisk.conf

[global] astetcdir => /etc/asterisk astmoddir => /usr/lib/asterisk/modules astvarlibdir => /var/lib/asterisk astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk astdbdir => /var/lib/asterisk astkeydir => /var/lib/asterisk astdatadir => /var/lib/asterisk astagidir => /var/lib/asterisk/agi-bin

Load appropreate modules

Asterisk needs some modules to be able to handle fax.

  • Edit the appropriate file

vi /etc/asterisk/modules.conf

  • Copy this content to the file

Contents of /etc/asterisk/modules.conf

[modules] autoload=yes
Todo: Try changing this so we don't load more modules than we need


Enable SIP

  • Edit the appropriate file

vi /etc/asterisk/sip.conf

  • Copy this content to the file

Contents of /etc/asterisk/sip.conf

[general] context=fax_incoming  ; Default context for incoming calls allowoverlap=no  ; Disable overlap dialing support. (Default is yes) bindport=5060  ; UDP Port to bind to (SIP standard port is 5060) ; bindport is the local UDP port that Asterisk will listen on bindaddr=0.0.0.0  ; IP address to bind to (0.0.0.0 binds to all) srvlookup=no  ; Enable DNS SRV lookups on outbound calls disallow=all  ; First disallow all codecs allow=ulaw ; Allow codecs (in order of preference) allow=alaw ; Allow codecs (in order of preference) udpbindaddr=0.0.0.0 canreinvite=yes t38pt_udptl=yes,redundancy,maxdatagram=400

Enable udptl

  • Edit the appropriate file

vi /etc/asterisk/udptl.conf

  • Copy this content to the file

Contents of /etc/asterisk/udptl.conf

[general]

Configure fax

  • Edit the appropriate file

vi /etc/asterisk/res_fax.conf

  • Copy this content to the file

Contents of /etc/asterisk/res_fax.conf

[general] maxrate=9600 minrate=2400 statusevents=yes

Configure dialplan

  • Edit the appropriate file

vi /etc/asterisk/extensions.lua

  • Copy this content to the file

Contents of /etc/asterisk/extensions.lua

TODO...

Permissions

For asterisk to be able to read the new config files, we need to set the correct permissions to the files

chown -R asterisk:asterisk /etc/asterisk

Start things up

Now its time to start up the services

rc-service asterisk start

Configure asterisk to autostart at next reboot

rc-update add asterisk

Testing

Sending fax

Prepare

Save a '.tiff' file into '/tmp/' (in our example we name the file '/tmp/testfax.tiff').

Create a file that looks something like this (modify it for your local needs).

Contents of /tmp/testfax.txt

[general] Channel: SIP/123@10.20.30.40 Callerid: "TestFAX" WaitTime: 30 Maxretries:3 RetryTime: 300 Account: 1000 Application: SendFax Data: /tmp/testfax.tiff

Change permissions on the newly created files

chown asterisk:asterisk /tmp/testfax*

Send the fax

Now copy the '/tmp/testfax.txt' to '/var/spool/asterisk/outgoing/'. The second you do that, asterisk will try to send the fax based on what you wrote in the file.

cp -p /tmp/testfax.txt /var/spool/asterisk/outgoing/