Does this still work?
https://nerdvittles.com/faxing-returns-for-incredible-pbx-2027-platforms/
https://nerdvittles.com/faxing-returns-for-incredible-pbx-2027-platforms/
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.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?

thanks SAMOT!! you, kenn and ward are the besttttttttttttttttttttttttttttttttttIf 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.
exten => fax,1,Noop(Global internal fallback caught fax tone!)
exten => fax,2,Goto(custom-fax-iaxmodem,s,1)
[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)
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.[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()
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.[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)
include => from-pstn-custom ; this context include remains for legacy reasons, but should not be used.
I'm hesitant to say you don't know what you're talking about, but...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.
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.
i see the updated nerd vittles line 2b ward, thanks!!!!!!!!!! too bad we still do not have the queue caller callback yet!The Nerd Vittles fax tutorial has been updated to support Incredible PBX 2026.
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.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.
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.The fax detection actually happens in the Inbound Route configuration with FreePBX.
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."There's no fax tones so there [sic] nothing to detect." [There was, in fact, a detected fax tone.]
You're right I mispoke. FAX_DEST or the fax is detected in that context, which I've said previously."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 are mistaken the order of how things happen....this is what the inbound route will have in it.[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.]
That means fax detection is enabled, call is answered, wait 5 seconds to detect fax tones, continue on to destination.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)
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.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]
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.
Check your inbox!
We’ve sent you an email. Click on the button in the email body to verify your email address – (if you can not find it, check your spam folder).
Upon verification you will be directed to the 3CX setup wizard.