Thank you for the excellent discussion. Call files seem to best fit my needs. I’ve tries setting one up and it initiates the call, but as soon as the other end answers it hangs up. So I’m well on my way, but not there yet. Below are the call files and an excerpt of the log, all hopefully sanitized a bit. Can someone help me across the finish line? Thanks in advance for anything you can do.
Channel: DAHDI/g0/{phone-number}
MaxRetries: 0
RetryTime: 60
WaitTime: 60
Archive: yes
Context: from-internal
Extension: s
Priority: 1
Set: FAXFILE=/root/testfax.tiff
Set: FAXHEADER=Test Fax
Set: TIMESTAMP=2016/12/07 : 16:40:01
Set: DESTINATION={phone-number}
Set: LOCALID={source-number?}
Set: EMAIL={my-e-mail-address}
[15:37:19] WARNING[2491] pbx_spool.c: Unable to set utime on /var/spool/asterisk/outgoing/testfax.call: Operation not permitted
[15:37:19] pbx_spool.c: Attempting call on DAHDI/g0/{phonenumber} for s@from-internal:1 (Retry 1)
[15:37:19] sig_pri.c: Requested transfer capability: 0x00 - SPEECH
[15:37:19] dial.c: Called g0/{phonenumber}
[15:37:19] dial.c: DAHDI/i1/{phonenumber}-25d is proceeding
[15:37:19] dial.c: DAHDI/i1/{phonenumber}-25d is making progress
[15:37:34] dial.c: DAHDI/i1/{phonenumber}-25d answered
[15:37:34] pbx.c: Executing [s@from-internal:1] Answer("DAHDI/i1/{phonenumber}-25d", "") in new stack
[15:37:34] pbx.c: Executing [s@from-internal:2] Wait("DAHDI/i1/{phonenumber}-25d", "1") in new stack
[15:37:35] pbx.c: Executing [s@from-internal:3] Macro("DAHDI/i1/{phonenumber}-25d", "user-callerid,") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:1] Set("DAHDI/i1/{phonenumber}-25d", "TOUCH_MONITOR={data}.{data}") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:2] Set("DAHDI/i1/{phonenumber}-25d", "AMPUSER=") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:3] GotoIf("DAHDI/i1/{phonenumber}-25d", "0?report") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:4] ExecIf("DAHDI/i1/{phonenumber}-25d", "1?Set(REALCALLERIDNUM=)") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:5] Set("DAHDI/i1/{phonenumber}-25d", "AMPUSER=") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:6] GotoIf("DAHDI/i1/{phonenumber}-25d", "0?limit") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:7] Set("DAHDI/i1/{phonenumber}-25d", "AMPUSERCIDNAME=") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:8] GotoIf("DAHDI/i1/{phonenumber}-25d", "1?report") in new stack
[15:37:35] pbx.c: Goto (macro-user-callerid,s,15)
[15:37:35] pbx.c: Executing [s@macro-user-callerid:15] GotoIf("DAHDI/i1/{phonenumber}-25d", "0?continue") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:16] ExecIf("DAHDI/i1/{phonenumber}-25d", "1?Set(__CALLEE_ACCOUNCODE=)") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:17] Set("DAHDI/i1/{phonenumber}-25d", "__TTL=64") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:18] GotoIf("DAHDI/i1/{phonenumber}-25d", "1?continue") in new stack
[15:37:35] pbx.c: Goto (macro-user-callerid,s,29)
[15:37:35] pbx.c: Executing [s@macro-user-callerid:29] Set("DAHDI/i1/{phonenumber}-25d", "CALLERID(number)=") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:30] Set("DAHDI/i1/{phonenumber}-25d", "CALLERID(name)=") in new stack
[15:37:35] pbx.c: Executing [s@macro-user-callerid:31] GotoIf("DAHDI/i1/{phonenumber}-25d", "1?cnum") in new stack
[15:37:35] pbx.c: Goto (macro-user-callerid,s,33)
[15:37:35] pbx.c: Executing [s@macro-user-callerid:33] Set("DAHDI/i1/{phonenumber}-25d", "CDR(cnum)=") in new stack
[15:37:35] WARNING[2444] func_cdr.c: CDR requires a value (CDR(variable)=value)
[15:37:35] pbx.c: Executing [s@macro-user-callerid:34] Set("DAHDI/i1/{phonenumber}-25d", "CHANNEL(language)=en") in new stack
[15:37:35] pbx.c: Executing [s@from-internal:4] GotoIf("DAHDI/i1/{phonenumber}-25d", "0?activate") in new stack
[15:37:35] pbx.c: Executing [s@from-internal:5] GotoIf("DAHDI/i1/{phonenumber}-25d", "0?deactivate:end") in new stack
[15:37:35] pbx.c: Goto (from-internal,s,10)
[15:37:35] pbx.c: Executing [s@from-internal:10] Macro("DAHDI/i1/{phonenumber}-25d", "hangupcall,") in new stack
[15:37:35] pbx.c: Executing [s@macro-hangupcall:1] GotoIf("DAHDI/i1/{phonenumber}-25d", "1?theend") in new stack
[15:37:35] pbx.c: Goto (macro-hangupcall,s,3)
[15:37:35] pbx.c: Executing [s@macro-hangupcall:3] ExecIf("DAHDI/i1/{phonenumber}-25d", "0?Set(CDR(recordingfile)=)") in new stack
[15:37:35] pbx.c: Executing [s@macro-hangupcall:4] Hangup("DAHDI/i1/{phonenumber}-25d", "") in new stack
[15:37:35] app_macro.c: Spawn extension (macro-hangupcall, s, 4) exited non-zero on 'DAHDI/i1/{phonenumber}-25d' in macro 'hangupcall'
[15:37:35] pbx.c: Spawn extension (from-internal, s, 10) exited non-zero on 'DAHDI/i1/{phonenumber}-25d'
[15:37:35] pbx.c: Executing [h@from-internal:1] Macro("DAHDI/i1/{phonenumber}-25d", "hangupcall") in new stack
[15:37:35] pbx.c: Executing [s@macro-hangupcall:1] GotoIf("DAHDI/i1/{phonenumber}-25d", "1?theend") in new stack
[15:37:35] pbx.c: Goto (macro-hangupcall,s,3)
[15:37:35] pbx.c: Executing [s@macro-hangupcall:3] ExecIf("DAHDI/i1/{phonenumber}-25d", "0?Set(CDR(recordingfile)=)") in new stack
[15:37:35] pbx.c: Executing [s@macro-hangupcall:4] Hangup("DAHDI/i1/{phonenumber}-25d", "") in new stack
[15:37:35] app_macro.c: Spawn extension (macro-hangupcall, s, 4) exited non-zero on 'DAHDI/i1/{phonenumber}-25d' in macro 'hangupcall'
[15:37:35] pbx.c: Spawn extension (from-internal, h, 1) exited non-zero on 'DAHDI/i1/{phonenumber}-25d'
[15:37:35] chan_dahdi.c: Hungup 'DAHDI/i1/{phonenumber}-25d'