Hi, I've run into an interesting problem when setting up prepaid calling card services using VoIP, a Cisco AS5300, and RADIATOR running on FreeBSD.
We are wanting to be able to sell prepaid calling cards, with the card number being the person's home phone number + 4-digit random number. We have the Cisco setup something along the lines of this: call application voice debit tftp://blah.blah/ivr/app_debit.tcl call application voice deibt language 1 en call application voice debit set-location en 0 tftp://blah/audio/en/ call application voice debit warning-time 30 call application voice debit uid-len 10 call application voice debit pin-len 4 We are using a hacked-up version of Block-Time-SQL to make all this work (basically Block-Time-SQL with modifications to use the Cisco attributes.) All of it works fine except for one problem. Whenever a caller hangs up, if they have called from their home phone, they end up being billed double (or triple) the time they used. I tracked it down to this problem: The access server sends a Stop record for the actual call they made out over the VoIP network. Radiator does the appropriate SQL query to deduct the number of seconds used from their account. This is what we want. The access server sends another Stop record for the call that they placed INTO our access server. The Acct-Session-Time for this one is the amount of time they were on the call PLUS the time it took them to enter their card #, etc. Radiator does the appropriate SQL query to deduct the number of seconds here from their account also. Not what we want. (Because now they've been deducted TWICE.) This happens because their USERNAME entry in the database is equal to their ANI, which is what the Cisco uses as User-Name on these records. If the caller placed a call that was local to the server (some of our callers are local to the server, but NOT local to places that the server CAN call local itself) then the server simply creates a VoIP connection to itself on loopback, and then places the call over the phone again. This will generate an additional Stop record for that, which gets deducted, and well, you see the picture. It would be nice if there was a way to filter accounting somehow so that only ONE time would be deducted. I tried doing this with a <Handler> statement, and it doesn't seem to work. Is there a better way to filter accounting requests other than Handlers? I'll have to look at this one some more in the morning, but I thought MAYBE someone out there had done this before and could give me some pointers to save me having to re-invent the wheel. :) Any ideas from anyone on how we could do this? I know, changing the card number to a totally-random 14 digit would probably fix it, but we'd also like to (at some point) be able to have people dial in with their home phone, and simply be prompted for the phone number to call. After collecting the digits, it would read back their credit time, and place the call. So, at that point, their ANI has to be tied to the card somehow... Any help/ideas would be appreciated. Thanks. :) === Archive at http://www.open.com.au/archives/radiator/ Announcements on [EMAIL PROTECTED] To unsubscribe, email '[EMAIL PROTECTED]' with 'unsubscribe radiator' in the body of the message.