<div dir="ltr"><div>Lock files.<br><br></div>Create one when you start sending the fax, on your retry process check for a lock file and if one exists don't retry.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 21, 2018 at 10:49 AM, D'Arcy Cain <span dir="ltr"><<a href="mailto:darcy@vybenetworks.com" target="_blank">darcy@vybenetworks.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am having troubles with sending faxes.  I hope someone can help me<br>
work out a better method.<br>
<br>
Basically we have a special address that our users can send to.  It<br>
winds up on our Asterisk server which runs a Python script that parses<br>
the message for attachments and the phone number from the recipient<br>
address.  The attachments are converted to TIFF and stored in a folder<br>
with various information encoded into the file name such as phone number<br>
and retry information.  That all works fine.<br>
<br>
A separate process picks up the files and sends them using an AMI script<br>
like this:<br>
<br>
Action: Originate<br>
Channel: SIP/provider/%(destination)s<br>
Context: LocalSets<br>
CallerID: Vybe Consulting Inc Fax Service <6475551212><br>
Exten: sendfax<br>
Priority: 1<br>
Timeout: 30000<br>
Variable: faxfile=%(faxfile)s<br>
Variable: uid=%(uid)s<br>
Variable: destination=%(destination)s<br>
Variable: sender_name=Vybe Consulting Inc Fax Service<br>
Variable: sender_num=6475551212<br>
<br>
It then renames the file encoding the next retry time and incrementing<br>
the number of retries.<br>
<br>
The same script checks for files in a success folder and sends the users<br>
a confirmation message that the fax was sent.  The files are moved into<br>
the success folder by Asterisk using this dialplan:<br>
<br>
sendfax,1,Verbose(0,FAX ${faxfile} to ${destination})<br>
  same => n,Set(FAXOPT(headerinfo)=${<wbr>sender_name})<br>
  same => n,Set(FAXOPT(localstationid)=$<wbr>{sender_num})<br>
  same => n,SendFax(${faxfile},d)<br>
  same => n,Set(STATUS=Status: ${FAXOPT(status)})<br>
  same => n,Set(STATUS=${STATUS}\nRemote ID: ${FAXOPT(remotestationid)})<br>
  same => n,Set(STATUS=${STATUS}\<wbr>nMaxrate: ${FAXOPT(maxrate)})<br>
  same => n,Set(STATUS=${STATUS}\<wbr>nMinrate: ${FAXOPT(minrate)})<br>
  same => n,Set(STATUS=${STATUS}\nECM: ${FAXOPT(ecm)})<br>
  same => n,Set(STATUS=${STATUS}\nnumber of pages: ${FAXOPT(pages)})<br>
  same => n,Set(STATUS=${STATUS}\nRate: ${FAXOPT(rate)})<br>
  same => n,Set(STATUS=${STATUS}\<wbr>nResolution: ${FAXOPT(resolution)})<br>
  same => n,GotoIf($["${FAXOPT(status)}" = "SUCCESS"]?faxok)<br>
  same => n,Set(STATUS=${STATUS}\nError: ${FAXOPT(error)})<br>
  same => n(faxok),Verbose(0,FAX ${destination} Status (S): ${STATUS})<br>
  same => n,Set(FAXNAME=${CUT(faxfile,/,<wbr>6)})<br>
  same => n,Set(FILE(/fax_status/${<wbr>FAXNAME})=${STATUS})<br>
  same => n,GotoIf($["${FAXOPT(status)}" != "SUCCESS"]?faxfail)<br>
  same => n,System(/bin/mv '${faxfile}' '/fax_success/${FAXNAME}')<br>
<br>
  same => n,Set(CDR(userfield)=${<wbr>destination})<br>
  same => n,Verbose(0,FAX to ${destination} charged to ${uid})<br>
  same => n(faxfail),Verbose(0,FAX ${destination} Status (F): ${STATUS})<br>
  same => n,Hangup()<br>
<br>
My problem is that if the faxes get too big it starts sending it again<br>
before the previous one has finished.  I can't raise the retry limit too<br>
far because sometimes the receiver is busy and we have to retry in a<br>
reasonable time.<br>
<br>
Is there a way to get a token from the AMI script that I can use to<br>
determine later if Asterisk is still busy with the fax before I try<br>
sending it again?<br>
<br>
Or, am I approaching this all wrong?  Is there a better method of doing<br>
this?<br>
<br>
I am running Asterisk 13.19.0 on NetBSD/amd64 7.1.0.<br>
<span class="gmail-HOEnZb"><font color="#888888"><br>
-- <br>
D'Arcy J.M. Cain<br>
Vybe Networks Inc.<br>
<a href="http://www.VybeNetworks.com/" rel="noreferrer" target="_blank">http://www.VybeNetworks.com/</a><br>
IM:darcy@Vex.Net VoIP: sip:darcy@VybeNetworks.com<br>
<br>
<br>
<br>
<br>
<br>
-- <br>
______________________________<wbr>______________________________<wbr>_________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" rel="noreferrer" target="_blank">http://www.api-digital.com</a> --<br>
<br>
Check out the new Asterisk community forum at: <a href="https://community.asterisk.org/" rel="noreferrer" target="_blank">https://community.asterisk.<wbr>org/</a><br>
<br>
New to Asterisk? Start here:<br>
      <a href="https://wiki.asterisk.org/wiki/display/AST/Getting+Started" rel="noreferrer" target="_blank">https://wiki.asterisk.org/<wbr>wiki/display/AST/Getting+<wbr>Started</a><br>
<br>
asterisk-users mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
   <a href="http://lists.digium.com/mailman/listinfo/asterisk-users" rel="noreferrer" target="_blank">http://lists.digium.com/<wbr>mailman/listinfo/asterisk-<wbr>users</a><br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.<br>---Heinlein</div>
</div>