Auto dialout using POTS lines

I have read all I can find about how to create a call that will be made using a POTS line but I am still having problems. What is the best way to do this? (i.e, has the highest likelihood of working). Here is what I have done:

  1. I create a .call file in the /var/spool/asterisk/outgoing directory that looks like this:

Channel: Zap/1/9991234
MaxRetries: 2
WaitTime: 30

Context: internal
Extension: *81
Priority: 1

If the call is made to an asterisk extension or if the call is made out over a PBX line to another pbx extension and callprogress=yes, it works (most of the time). By “works” I mean that the connection to *81 occurs after the lines is answered. However, if the call is made using a POTS line to some arbitrary number, it fails. Has anyone written a module that can (more or less) reliably determine when a line has been answered? I was going to try to create a context with a call to waitforsilence but I didn’t think that would work, especally if the number called was a cell phone which would be fairly noisy. Has anyone written a module that can detect voice followed by (relative) silence? I suppose I could require an acknowledgement by entering a dtmf but that is so inelegant. ISDN or PRI would undoubtedly work better but would be too costly.

Is there a way to do auto callout over POTS that will work?