Faxing with iPBX 2026, Debian 13 and Asterisk 22

If all you need is inbound faxing (or that's a priority right now) you do this:

1. Go into User Manager and create a user
2. Under User Settings tab give the user an email address
3. Under Fax tab enable Faxing for the user
4. In Inbound Routes pick the number that will receive the fax
5. In the Fax tab turn on fax detection, set the mode to SIP and then set the Fax Destination to "Fax Recipient" and select the user.

You are now receiving inbound faxes and the methods between what FreePBX does and the Incredible PBX article are how the fax is handled **after receiving** i.e. how it is stored (or not), tiff to pdf conversion and the emailing process.
 
have not tried yet, still working on installintg the new IPBX.........question........................for ward or Kenn10..........ward was referring to IPBX 2026 originally, but ward's article for installing FAX referred to IPBX 2027 for debian 13, does it matter which debian 13 version I installl? 2026 or 2027 for the FAX installation?
 
have not tried yet, still working on installintg the new IPBX.........question........................for ward or Kenn10..........ward was referring to IPBX 2026 originally, but ward's article for installing FAX referred to IPBX 2027 for debian 13, does it matter which debian 13 version I installl? 2026 or 2027 for the FAX installation?
Joe, 2026 is the latest version and runs on Debian-13. IncrediblePBX-2027 is older and Debian-12 will be expiring soon. If you look at what @Samot posted above, you can use the built-in FAX receiving function of FreePBX. That lets you receive faxes. That is a FreePBX function and should work on FreePBX-17 on IncrediblePBX-2026.

As to the IncredibleFax working with IncrediblePBX-2026, I don't think anyone has tried to use Ward's solution from IncrediblePBX-2027. I haven't heard anyone so if you want to give it a try, you can be our Guinea pig. :eek:
 
Last edited:
ok thanks kenn! hope you are enjoying the soccer! we in the states are playing this wednesday, pretty exciting. in your opinion...................i am now using vitalpbx 3 for my office, works great! but you know me, i like to tinker and (eventually break things, LOL) and i have been running IPBX for a long time (Incredible PBX 15.0.38 'Incredible PBX PUBLIC') but since it does not have a queue caller callback module, this is why i use vital pbx, as it does. I have been reluctant to upgrade to VPBX 4, since i have sooooooo much work and time invested in VPBX 3 with all ward's extras and mods, that I am afraid I will not be able to get VPBX 4 up to speed as I am now with VPBX 3, but I divest.......................Im just getting a bit board and came up with the idea if IPBX 2026 but since no queue callback, maybe i should attempt VPBX 4? your thoughts?
 
If all you need is inbound faxing (or that's a priority right now) you do this:

1. Go into User Manager and create a user
2. Under User Settings tab give the user an email address
3. Under Fax tab enable Faxing for the user
4. In Inbound Routes pick the number that will receive the fax
5. In the Fax tab turn on fax detection, set the mode to SIP and then set the Fax Destination to "Fax Recipient" and select the user.

You are now receiving inbound faxes and the methods between what FreePBX does and the Incredible PBX article are how the fax is handled **after receiving** i.e. how it is stored (or not), tiff to pdf conversion and the emailing process.
thanks SAMOT!! you, kenn and ward are the bestttttttttttttttttttttttttttttttttt
 
Asterisk 22/23 have MAJOR plumbing changes. To receive faxes, follow the existing tutorial and then add these additions in /etc/asterisk/extensions_custom.conf for Incredible PBX 2026. No User Manager setup required. Sending a fax still works as documented in the existing tutorial.

1. Add the following code at top of file just below [from-internal-custom]:
Code:
exten => fax,1,Noop(Global internal fallback caught fax tone!)
exten => fax,2,Goto(custom-fax-iaxmodem,s,1)

2. Add the following code at the bottom of the file:
Code:
[macro-dialout-one-predial-hook]
exten => s,1,Noop(Enforcing global inheritance for fax detection)
; This line forces any fax detection on this channel to jump out to our custom handler
exten => s,n,Set(CHANNEL(faxdetect)=yes)
exten => s,n,Set(CONNECTEDLINE(name,i)=Fax Catch Active)
exten => s,n,Return()

; Create a standalone global context that Asterisk can fall back to

[dialOne-with-exten]
exten => fax,1,Noop(Global intercept captured fax tone!)
exten => fax,2,Goto(custom-fax-iaxmodem,s,1)

[from-pstn-custom]
exten => fax,1,Noop(Global trunk fallback caught fax tone!)
exten => fax,2,Goto(custom-fax-iaxmodem,s,1)

3. Run: asterisk -rx "dialplan reload"

4. Run: asterisk -rx "core reload"

NOTE: This solution may work just as well by ignoring Step 1. It's there to be on the safe side for pioneers. I don't use it.
 
Last edited:
[macro-dialout-one-predial-hook]
exten => s,1,Noop(Enforcing global inheritance for fax detection) ; This line forces any fax detection on this channel to jump out to our custom handler
exten => s,n,Set(CHANNEL(faxdetect)=yes)
exten => s,n,Set(CONNECTEDLINE(name,i)=Fax Catch Active)
exten => s,n,Return()
None of this is actually used. There's no fax tones so there nothing to detect and CONNECTEDLINE is pointless since the other side (or your side) won't see it anyways.
[dialOne-with-exten]
exten => fax,1,Noop(Global intercept captured fax tone!)
exten => fax,2,Goto(custom-fax-iaxmodem,s,1)

[from-pstn-custom]
exten => fax,1,Noop(Global trunk fallback caught fax tone!)
exten => fax,2,Goto(custom-fax-iaxmodem,s,1)
These aren't doing what you think they are. First, dialOne-with-exten happens when you're calling an extension so in order for that to work the FAX_DEST needs to be dialOne-with-exten,fax,1 which it will never be. The same with the from-pstn-custom. Second, from-pstn-custom is a legacy left over and much like from-internal-custom shouldn't be used.

include => from-pstn-custom ; this context include remains for legacy reasons, but should not be used.

Again, a lot of these fax extensions that are being placed in various places will never be used unless
1. The fax is detected within that context, which it's not.
2. The FAX_DEST is set to one of those contexts, which it's not.
 
None of this is actually used. There's no fax tones so there nothing to detect and CONNECTEDLINE is pointless since the other side (or your side) won't see it anyways.

These aren't doing what you think they are. First, dialOne-with-exten happens when you're calling an extension so in order for that to work the FAX_DEST needs to be dialOne-with-exten,fax,1 which it will never be. The same with the from-pstn-custom. Second, from-pstn-custom is a legacy left over and much like from-internal-custom shouldn't be used.



Again, a lot of these fax extensions that are being placed in various places will never be used unless
1. The fax is detected within that context, which it's not.
2. The FAX_DEST is set to one of those contexts, which it's not.
I'm hesitant to say you don't know what you're talking about, but...

My Incredible PBX 2026 platform works just fine using the above code including display of NoOp(Global intercept captured fax tone!) in the Asterisk CLI.
 
Last edited:
OK I'll revise my previous statement. Those fax extensions will work if the fax detection actually happens there. However, there is zero guarantee that it will. Once it gets past the inbound route it all becomes an opportunistic race of the detection happening within specific contexts that the call doesn't fully stay in. The fact it made it to dialOne-with-exten is more a flag than anything else. Took a long for tones to be sent/detected.

Is this supposed to be a "shared" service? I thought it was a fax2email solution.
 
OK I'll revise my previous statement. Those fax extensions will work if the fax detection actually happens there. However, there is zero guarantee that it will. Once it gets past the inbound route it all becomes an opportunistic race of the detection happening within specific contexts that the call doesn't fully stay in. The fact it made it to dialOne-with-exten is more a flag than anything else. Took a long for tones to be sent/detected.

Is this supposed to be a "shared" service? I thought it was a fax2email solution.
I've never had an inbound fax fail for lack of fax tone detection so I'm not sure where you're pulling that conclusion from. The fax detection actually happens in the Inbound Route configuration with FreePBX.

Please go back and read your earlier post. My concern with some of your posts is they come across as authoritative when some of the contents is dead wrong. Here are a couple examples. And the problem this causes is some folks might actually rely upon your mistaken advice... before you later backtrack.

"There's no fax tones so there [sic] nothing to detect." [There was, in fact, a detected fax tone.]

"dialOne-with-exten happens when you're calling an extension so in order for that to work the FAX_DEST needs to be dialOne-with-exten,fax,1 which it will never be." [The inbound route in our case sends the calls to ext. 701 with fax detection rerouting the call to the Fax (HylaFax) Custom Destination of custom-fax-iaxmodem,s,1, not DialOne.]
 
The fax detection actually happens in the Inbound Route configuration with FreePBX.
Fax detect is set in the inbound route. The timer in the GUI just sets how long a Wait() happens. This does not guarantee that fax detection happens in the inbound route, it should but if the Wait() expires the call progress continues.
"There's no fax tones so there [sic] nothing to detect." [There was, in fact, a detected fax tone.]
Please re-read the post. That was in regards to [macro-dialout-one-predial-hook] which happens for outbound calls, not inbound calls. Since you're using SendFax() to transmit the fax the outbound fax is transmitting tones not detecting tones. It has nothing to do with an incoming fax.
"dialOne-with-exten happens when you're calling an extension so in order for that to work the FAX_DEST needs to be dialOne-with-exten,fax,1 which it will never be."
You're right I mispoke. FAX_DEST or the fax is detected in that context, which I've said previously.
[The inbound route in our case sends the calls to ext. 701 with fax detection rerouting the call to the Fax (HylaFax) Custom Destination of custom-fax-iaxmodem,s,1, not DialOne.]
You are mistaken the order of how things happen....this is what the inbound route will have in it.
exten => s,n,Set(FAX_DEST=custom-fax-iaxmodem^s^1)
exten => s,n,Set(FAXOPT(faxdetect)=yes)
exten => s,n,Answer
exten => s,n,Wait(5)
exten => s,n(dest-ext),Goto(from-did-direct,701,1)
That means fax detection is enabled, call is answered, wait 5 seconds to detect fax tones, continue on to destination.
Here's dialOne-with-exten, the only place where your Noop of Global intercept captured fax tone! exists. This is the last step in dialling a chan_pjsip extension. It is literally what dials it.
noreply*CLI> dialplan show dialOne-with-exten
[ Context 'dialOne-with-exten' created by 'pbx_config' ]
'fax' => 1. Noop(Global intercept captured fax tone!) [extensions_custom.conf:8]
2. Goto(custom-fax-iaxmodem,s,1) [extensions_custom.conf:9]

'h' => 1. Gosub(macro-hangupcall,s,1()) [extensions_additional.conf:4962]
'_X' => 1. Set(CHANNEL(hangup_handler_push)=app-missedcall-hangup,${DialMCEXT},1) [extensions_additional.conf:4958]
2. Dial(${DSTRING},${ARG1},${D_OPTIONS}${CWRING}b(func-apply-sipheaders^s^1)) [extensions_additional.conf:4959]
3. Return() [extensions_additional.conf:4960]
'_[+-X].' => 1. Set(CHANNEL(hangup_handler_push)=app-missedcall-hangup,${DialMCEXT},1) [extensions_additional.conf:4954]
2. Dial(${DSTRING},${ARG1},${D_OPTIONS}${CWRING}b(func-apply-sipheaders^s^1)) [extensions_additional.conf:4955]
3. Return() [extensions_additional.conf:4956]
Include => 'dialOne-with-exten-custom' [pbx_config]
So the fax was detected, per your own proof, in the dialOne-with-exten context and dialOne-with-exten,fax,1 was hit which took it the custom fax context. Since your screenshot shows the hangup handler executing that means the Dial() was in progress for PJSIP/701.

No, the fax was not detected in inbound routes like you thought it was. Your own screenshot shows where it was detected since that's the context that handled it.
 
Here's a final thought. If you don't like our approach to faxing, do us all a favor: DON'T USE IT. By the way, where can we read about your solution??
 

Members online

Forum statistics

Threads
26,724
Messages
174,636
Members
20,286
Latest member
lluis.riera
Get 3CX - Absolutely Free!

Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.
Back
Top