Lock files. Create one when you start sending the fax, on your retry process check for a lock file and if one exists don't retry.
On Mon, May 21, 2018 at 10:49 AM, D'Arcy Cain <da...@vybenetworks.com> wrote: > I am having troubles with sending faxes. I hope someone can help me > work out a better method. > > Basically we have a special address that our users can send to. It > winds up on our Asterisk server which runs a Python script that parses > the message for attachments and the phone number from the recipient > address. The attachments are converted to TIFF and stored in a folder > with various information encoded into the file name such as phone number > and retry information. That all works fine. > > A separate process picks up the files and sends them using an AMI script > like this: > > Action: Originate > Channel: SIP/provider/%(destination)s > Context: LocalSets > CallerID: Vybe Consulting Inc Fax Service <6475551212> > Exten: sendfax > Priority: 1 > Timeout: 30000 > Variable: faxfile=%(faxfile)s > Variable: uid=%(uid)s > Variable: destination=%(destination)s > Variable: sender_name=Vybe Consulting Inc Fax Service > Variable: sender_num=6475551212 > > It then renames the file encoding the next retry time and incrementing > the number of retries. > > The same script checks for files in a success folder and sends the users > a confirmation message that the fax was sent. The files are moved into > the success folder by Asterisk using this dialplan: > > sendfax,1,Verbose(0,FAX ${faxfile} to ${destination}) > same => n,Set(FAXOPT(headerinfo)=${sender_name}) > same => n,Set(FAXOPT(localstationid)=${sender_num}) > same => n,SendFax(${faxfile},d) > same => n,Set(STATUS=Status: ${FAXOPT(status)}) > same => n,Set(STATUS=${STATUS}\nRemote ID: ${FAXOPT(remotestationid)}) > same => n,Set(STATUS=${STATUS}\nMaxrate: ${FAXOPT(maxrate)}) > same => n,Set(STATUS=${STATUS}\nMinrate: ${FAXOPT(minrate)}) > same => n,Set(STATUS=${STATUS}\nECM: ${FAXOPT(ecm)}) > same => n,Set(STATUS=${STATUS}\nnumber of pages: ${FAXOPT(pages)}) > same => n,Set(STATUS=${STATUS}\nRate: ${FAXOPT(rate)}) > same => n,Set(STATUS=${STATUS}\nResolution: ${FAXOPT(resolution)}) > same => n,GotoIf($["${FAXOPT(status)}" = "SUCCESS"]?faxok) > same => n,Set(STATUS=${STATUS}\nError: ${FAXOPT(error)}) > same => n(faxok),Verbose(0,FAX ${destination} Status (S): ${STATUS}) > same => n,Set(FAXNAME=${CUT(faxfile,/,6)}) > same => n,Set(FILE(/fax_status/${FAXNAME})=${STATUS}) > same => n,GotoIf($["${FAXOPT(status)}" != "SUCCESS"]?faxfail) > same => n,System(/bin/mv '${faxfile}' '/fax_success/${FAXNAME}') > > same => n,Set(CDR(userfield)=${destination}) > same => n,Verbose(0,FAX to ${destination} charged to ${uid}) > same => n(faxfail),Verbose(0,FAX ${destination} Status (F): ${STATUS}) > same => n,Hangup() > > My problem is that if the faxes get too big it starts sending it again > before the previous one has finished. I can't raise the retry limit too > far because sometimes the receiver is busy and we have to retry in a > reasonable time. > > Is there a way to get a token from the AMI script that I can use to > determine later if Asterisk is still busy with the fax before I try > sending it again? > > Or, am I approaching this all wrong? Is there a better method of doing > this? > > I am running Asterisk 13.19.0 on NetBSD/amd64 7.1.0. > > -- > D'Arcy J.M. Cain > Vybe Networks Inc. > http://www.VybeNetworks.com/ > IM:da...@vex.net VoIP: sip:da...@vybenetworks.com > > > > > > -- > _____________________________________________________________________ > -- Bandwidth and Colocation Provided by http://www.api-digital.com -- > > Check out the new Asterisk community forum at: https://community.asterisk. > org/ > > New to Asterisk? Start here: > https://wiki.asterisk.org/wiki/display/AST/Getting+Started > > asterisk-users mailing list > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users > -- 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. ---Heinlein
-- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- Check out the new Asterisk community forum at: https://community.asterisk.org/ New to Asterisk? Start here: https://wiki.asterisk.org/wiki/display/AST/Getting+Started asterisk-users mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-users