Koozali.org: home of the SME Server

Obsolete Releases => SME VoIP (Asterisk, SAIL etc) => Topic started by: soprom on June 06, 2009, 07:02:12 PM

Title: function like VICIDIAL : teleyapper
Post by: soprom on June 06, 2009, 07:02:12 PM
Hi all!

I'm looking for an opensource app that can autodial pre-recorded messages to a list of phone numbers (I've read it is also called blast and broadcast).

Anyone tried VICIDIAL or something like it?
Title: Re: Anyone using VICIDIAL ?
Post by: bbialy on June 07, 2009, 11:27:30 AM
If you don't need any user friendly interface it is easy to prepare custom app which will dial numbers listed in text files and playback files. It is also possible to have many simultanous calls. I can help to handle it.

If you need interface case is more complicated. I don't have expirences with that. I would search some click to dial application and prepare autodial context for it.

Regards
Maciej
Title: Re: Anyone using VICIDIAL ?
Post by: SARK devs on June 07, 2009, 01:05:49 PM
Hi Sophie,

I think Maciej is right.  Vicidial is not trivial to install and you would need to run it on a separate asterisk instance to SAIL.  They are probably too far apart conceptually to be integrated.

For a simple "dial and play" type blaster such as you describe then I think a simple custom app either reading a file or databse of numbers would probably be the fastest and easiest route.

Best

S

 
Title: Re: Anyone using VICIDIAL ?
Post by: soprom on June 07, 2009, 03:20:30 PM
Thanks for any help about this, because I have no experience with custom apps. If I can get help with this, I might be able to work on the gui.

The project is to supply a list of phone numbers to call and a voice file to asterisk. Then to have a report with the phone numbers with a status (done, error).

There is something about this here:
http://nerdvittles.com/index.php?p=113#comments (http://nerdvittles.com/index.php?p=113#comments)
Title: Broadcasting (blast) with selintra
Post by: soprom on June 07, 2009, 04:08:15 PM
Here is some stuff from nerdvittles (creative commons):
http://nerdvittles.com/index.php?p=113 (http://nerdvittles.com/index.php?p=113)

This should be adapted to selintra and could be a starting point...

The workflow is going like this:

x674 controls the dialer
- password protected
- ivr [yapper]:
   1. listen to prerecorded messages
   2. record new [yapper2]
   3. start calling [yapper3]
      issue group option [yapper-options] or 0
      listen to the total of matching records
      issue confirmation


files:
Code: [Select]
wget http://nerdvittles.com/checkgroup.zip
wget http://nerdvittles.com/aah2/teleyapper25.zip
wget http://nerdvittles.com/aah2/teleyapper2.zip
wget http://nerdvittles.com/wp-content/teleyapper.sql


Described installation:
Code: [Select]
#=========================
#checkgroup.php (edit file for options setting)
#=========================
cd /var/lib/asterisk/agi-bin
wget http://nerdvittles.com/checkgroup.zip
unzip checkgroup.zip
rm checkgroup.zip
chmod 775 checkgroup.php
chown asterisk:asterisk checkgroup.php
#----------------
#options:
#$debug = 1;
#$newlogeachdebug = 1;
#$emaildebuglog = 0;
#$email = "yourname@yourdomain" ;
#=========================

#=========================
#teleyapper.php
#=========================
cd /var/lib/asterisk/agi-bin
wget http://nerdvittles.com/aah2/teleyapper25.zip
unzip teleyapper25.zip
rm teleyapper25.zip
chmod 775 teleyapper.php
chown asterisk:asterisk teleyapper.php
/* ----------------
options:
$maxretries=1 ;
$retrytime=60 ;
$waittime=60 ;
$callspread=1 ;
$debug = 1;
$newlogeachdebug = 1;
$emaildebuglog = 0;
$email = "yourname@yourdomain" ;
$trunk = "local" ;
$callerid = chr(34) . "TeleYapper" . chr(34) . " <6781234567>"  ;
*/
#=========================

#=========================
#teleyapper2.php
#=========================
cd /var/lib/asterisk/agi-bin
wget http://nerdvittles.com/aah2/teleyapper2.zip
unzip teleyapper2.zip
rm teleyapper2.zip
chmod 775 teleyapper2.php
chown asterisk:asterisk teleyapper2.php
#----------------
#options:
#$debug = 1;
#$emaildebuglog = 0;
#$email = "yourname@yourdomain" ;
#=========================


#=========================
#dialplan:
#=========================

Code: [Select]
exten => 674,1,Answer  ; dial MSG on any extension to manage your TeleYapper system
exten => 674,2,Wait(1)
exten => 674,3,Authenticate(1234)
exten => 674,4,Goto(yapper,s,1)

[yapper]

exten => s,1,DigitTimeout(7)
exten => s,2,ResponseTimeout(10)
exten => s,3,Background(T-to-hear-cur-ancmnt)
exten => s,4,Background(press-1)
exten => s,5,Background(to-rerecord-yr-message)
exten => s,6,Background(press-2)
exten => s,7,Background(to-place-outgoing-call)
exten => s,8,Background(press-3)
exten => s,9,Background(to-hear-menu-again)
exten => s,10,Background(press-4)
exten => s,11,Background(to-hang-up)
exten => s,12,Background(press-5)
exten => 1,1,Playback(custom/broadcast)
exten => 1,2,Wait(2)
exten => 1,3,Goto(s,3)
exten => 2,1,Goto(yapper2,s,1)
exten => 3,1,Goto(yapper-options,s,1)
exten => 4,1,Goto(s,3)
exten => 5,1,Playback(goodbye)
exten => 5,2,Hangup
exten => t,1,Goto(s,3)
exten => i,1,Goto(s,3)
exten => o,1,Goto(s,3)
exten => h,1,Hangup


[yapper2]

exten => s,1,Playback(after-the-tone)
exten => s,2,Playback(say-temp-msg-prs-pound)
exten => s,3,Wait(2)
exten => s,4,Record(custom/broadcast:gsm)
exten => s,5,Wait(2)
exten => s,6,Playback(custom/broadcast)
exten => s,7,Wait(2)
exten => s,8,Playback(your-msg-has-been-saved)
exten => s,9,Wait(2)
exten => s,10,Goto(yapper,s,1)


[yapper3]

exten => s,1,AGI(checkgroup.php|${GROUP})
exten => s,2,NoOp(tmp variable: ${tmp})
exten => s,3,GotoIf($[${tmp} = 0]?9,1)
exten => s,4,Set(COUNTER=${tmp}|g)
exten => s,5,Playback(the-num-i-have-is)
exten => s,6,SayNumber(${COUNTER})
exten => s,7,Playback(vm-messages)
exten => s,8,Wait(1)
exten => s,9,DigitTimeout(7)
exten => s,10,ResponseTimeout(10)
exten => s,11,Background(to-call-this-number)
exten => s,12,Background(press-1)
exten => s,13,Background(to-hang-up)
exten => s,14,Background(press-2)
exten => s,15,Background(vm-advopts)
exten => 1,1,Goto(yapper-gen,s,1)
exten => 2,1,Playback(goodbye)
exten => 2,2,Hangup
exten => 3,1,Goto(yapper-redial,s,1)
exten => 9,1,Playback(dir-nomatch)
exten => 9,2,Wait(1)
exten => 9,3,Goto(yapper,s,1)
exten => t,1,Playback(goodbye)
exten => t,2,Hangup
exten => i,1,Playback(goodbye)
exten => i,2,Hangup
exten => h,1,Hangup


[yapper-options]

exten => s,1,Wait(1)
exten => s,2,Playback(you-have-these-options)
exten => s,3,Playback(digits/0)
exten => s,4,Playback(through)
exten => s,5,Playback(digits/9)
exten => s,6,Playback(press-star-cancel)
exten => s,7,Read(tmp,vm-enter-num-to-call,1)
exten => s,8,Set(GROUP=${tmp}|g)
exten => s,9,NoOp(${GROUP})
exten => s,10,GotoIf($["foo${GROUP}" = "foo"]?s,78)
exten => s,11,GotoIf($["foo${GROUP}" = "foo*"]?s,88)
exten => s,12,GotoIf($["foo${GROUP}" = "foo#"]?s,98)
exten => s,13,Goto(yapper3,s,1)
exten => s,78,Playback(connection-timed-out)
exten => s,79,Wait(1)
exten => s,80,Goto(yapper,s,1)
exten => s,88,Playback(cancelled)
exten => s,89,Wait(1)
exten => s,90,Goto(yapper,s,1)
exten => s,98,Playback(option-not-implemented)
exten => s,99,Goto(yapper,s,1)


[yapper-gen]

exten => s,1,Playback(speed-dial)
exten => s,2,Playback(activated)
exten => s,3,Wait(1)
exten => s,4,Playback(goodbye)
exten => s,5,Hangup
exten => h,1,DeadAGI(teleyapper.php|${GROUP}|${COUNTER}|1)
exten => h,2,Hangup


[yapper-redial]

exten => s,1,Playback(speed-dial)
exten => s,2,Playback(activated)
exten => s,3,Wait(1)
exten => s,4,Playback(goodbye)
exten => s,5,Hangup
exten => h,1,DeadAGI(teleyapper.php|${GROUP}|${COUNTER}|3)
exten => h,2,Hangup


[broadcast]

exten => s,1,Answer
exten => s,2,Wait(2)
exten => s,3,Playback(system-status-msg)
exten => s,4,Wait(2)
;exten => s,5,BackgroundDetect(custom/broadcast|1000|50|3000)
exten => s,5,Playback(custom/broadcast)
exten => s,6,Goto(talk,1)
exten => t,1,Goto(talk,1)
exten => i,1,Goto(talk,1)
exten => o,1,Goto(talk,1)
exten => h,1,NoOp(Callee hung up call before menu. Dialed: ${DIAL}  ID: ${ID}.)
exten => h,2,Set(STATUS='EarlyHangup'|g)
exten => h,3,DeadAGI(teleyapper2.php|${ID}|${STATUS}|${DIAL})
exten => h,4,Hangup
exten => talk,1,Goto(broadcast2,s,1)


[broadcast2]

exten => s,1,Set(STATUS='Answered'|g)
exten => s,2,DigitTimeout(4)
exten => s,3,ResponseTimeout(4)
exten => s,4,Background(to-hear-msg-again)
exten => s,5,Background(press-1)
exten => s,6,Background(to-blklist-last-caller)
exten => s,7,Background(digits/2)
exten => s,8,Background(otherwise-press)
exten => s,9,Background(digits/3)
exten => t,1,NoOp(Callee's Answering Machine probably answered. Dialed: ${DIAL}  ID: ${ID}.)
exten => t,2,Set(STATUS='AnsMachine'|g)
exten => t,3,Background(restarting)
exten => t,4,Wait(1)
exten => t,5,Playback(custom/broadcast)  ; playing again for ans machine
exten => t,6,Background(goodbye)
exten => t,7,Hangup
exten => h,1,DeadAGI(teleyapper2.php|${ID}|${STATUS}|${DIAL})
exten => h,2,Hangup
exten => i,1,Goto(1,1)
exten => o,1,Goto(1,1)
exten => 1,1,Set(STATUS='ReplayedMsg'|g)
exten => 1,2,Goto(t,3)
exten => 2,1,Set(STATUS='Zap'|g)
exten => 2,2,Background(num-was-successfully)
exten => 2,3,Background(removed)
exten => 2,4,Background(goodbye)
exten => 2,5,NoOp(Callee Requested to have number removed. Dialed: ${DIAL}  ID: ${ID}.)
exten => 2,6,Hangup
exten => 3,1,Set(STATUS='OK'|g)
exten => 3,2,Background(goodbye)
exten => 3,3,NoOp(Callee Acknowledged Call. Dialed: ${DIAL}  ID: ${ID}.)
exten => 3,4,Hangup


It would help greatly to a have a howto for newbee!



Title: Re: Anyone using VICIDIAL ?
Post by: soprom on June 07, 2009, 05:00:50 PM

Testing: here's what I did...

1. created table with data
2. installed php files
3. added new custom app named "blaster" with all the needed dialplan
    - description yapper
    - span both
    - cluster sophie
4. committed and called extension 674


Asterisk said DigitTimeout is missing. I replaced it with "timout" with same result...

Code: [Select]
Connected to Asterisk 1.4.21.1 currently running on pbx (pid = 4480)
Verbosity is at least 4
    -- Executing [674@internal:1] AGI("SIP/5000-0987bbb0", "selintra|OutCluster|674") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/selintra
    -- AGI Script selintra completed, returning 0
    -- Executing [674@sophie:1] Answer("SIP/5000-0987bbb0", "") in new stack
    -- Executing [674@sophie:2] Wait("SIP/5000-0987bbb0", "1") in new stack
    -- Executing [674@sophie:3] Authenticate("SIP/5000-0987bbb0", "55555") in new stack
    -- <SIP/5000-0987bbb0> Playing 'agent-pass' (language 'fr')
    -- <SIP/5000-0987bbb0> Playing 'auth-thankyou' (language 'fr')
    -- Executing [674@sophie:4] Goto("SIP/5000-0987bbb0", "yapper|s|1") in new stack
    -- Goto (yapper,s,1)
[Jun  7 10:57:27] WARNING[31672]: pbx.c:1832 pbx_extension_helper: No application 'DigitTimeout' for extension (yapper, s, 1)
  == Spawn extension (yapper, s, 1) exited non-zero on 'SIP/5000-0987bbb0'
    -- Executing [h@yapper:1] Hangup("SIP/5000-0987bbb0", "") in new stack
  == Spawn extension (yapper, h, 1) exited non-zero on 'SIP/5000-0987bbb0'

Title: Re: Anyone using VICIDIAL ?
Post by: soprom on June 07, 2009, 05:17:05 PM

following up...


Dialplan needs this change to work:

Replace all
Code: [Select]
DigitTimeout(with
Code: [Select]
Set(TIMEOUT(digit)=
and

Replace all
Code: [Select]
ResponseTimeout(with
Code: [Select]
Set(TIMEOUT(response)=
Create folder:
Code: [Select]
mkdir /var/lib/asterisk/sounds/custom
chown asterisk:asterisk /var/lib/asterisk/sounds/custom

The IVR works but nothing happens...

Asterisk says:

Code: [Select]
  == CDR updated on SIP/5000-0992e4b8
    -- Executing [1@yapper3:1] Goto("SIP/5000-0992e4b8", "yapper-gen|s|1") in new stack
    -- Goto (yapper-gen,s,1)
    -- Executing [s@yapper-gen:1] Playback("SIP/5000-0992e4b8", "speed-dial") in new stack
    -- <SIP/5000-0992e4b8> Playing 'speed-dial' (language 'fr')
    -- Executing [s@yapper-gen:2] Playback("SIP/5000-0992e4b8", "activated") in new stack
    -- <SIP/5000-0992e4b8> Playing 'activated' (language 'fr')
    -- Executing [s@yapper-gen:3] Wait("SIP/5000-0992e4b8", "1") in new stack
    -- Executing [s@yapper-gen:4] Playback("SIP/5000-0992e4b8", "goodbye") in new stack
    -- <SIP/5000-0992e4b8> Playing 'goodbye' (language 'fr')
    -- Executing [s@yapper-gen:5] Hangup("SIP/5000-0992e4b8", "") in new stack
  == Spawn extension (yapper-gen, s, 5) exited non-zero on 'SIP/5000-0992e4b8'
    -- Executing [h@yapper-gen:1] DeadAGI("SIP/5000-0992e4b8", "teleyapper.php|1|1|1") in new stack
    -- [b]Launched AGI Script /var/lib/asterisk/agi-bin/teleyapper.php[/b]
    -- AGI Script teleyapper.php completed, returning 0
    -- Executing [h@yapper-gen:2] Hangup("SIP/5000-0992e4b8", "") in new stack
  == Spawn extension (yapper-gen, h, 2) exited non-zero on 'SIP/5000-0992e4b8'

Title: Re: Anyone using VICIDIAL ?
Post by: soprom on June 07, 2009, 06:40:00 PM
Getting better but...

Database credentials need to be edited (line 175) in file:
/var/lib/asterisk/agi-bin/teleyapper.php

Also, the line must have a valid trunk name:
$trunk = "IAX2/514outpeer" ;

and... it works!

Must have this to speak french now...

Title: Re: function like VICIDIAL : teleyapper
Post by: SARK devs on June 07, 2009, 07:06:30 PM
Cool - I thought it looked as tho' it would just plug-in to sail custom app structure...  and you said you couldn't do custom apps... and now you're an expert!

Just one thing Sophie..  French?  French?  Surely Quebecois?  :)



 
Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 07, 2009, 07:32:49 PM
Quote
French?  French?  Surely Quebecois?

Indeed!!! I hope that someday there will be fr_ca and fr_qc!!!

This project went smoothly and I guess I under-estimated my understanding of it. NerdVittle have a way to put things simply and clearly.  They deserve the credit with you guys from selintra.


From this thread, would you be able to tell where language can be changed to "fr" ?

Thanks!
Title: Re: function like VICIDIAL : teleyapper
Post by: Franco on June 07, 2009, 07:56:46 PM
Soprom,
How about a How-to for the wiki?
It's a interesting project.

Thanks,
Title: Re: function like VICIDIAL : teleyapper
Post by: SARK devs on June 07, 2009, 08:09:02 PM
Quote
From this thread, would you be able to tell where language can be changed to "fr" ?

language is set for each channel (IAX,SIP,Zap).  Set it in headers->sip.conf/zapata.conf/iax.conf... However, your system is already set for French (I can see that from the console output) so I'm not sure I understand your question.

Regards

S
Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 07, 2009, 08:16:36 PM
My system is missing many sound files since I can't get "canadian french" anymore. The link I have is dead.



French (canadian female voice):

Code: [Select]
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-wav-1.4.11-53.noarch.rpm
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-ulaw-1.4.11-53.noarch.rpm
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-gsm-1.4.11-53.noarch.rpm
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-g729-1.4.11-53.noarch.rpm
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-g722-1.4.11-53.noarch.rpm
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-alaw-1.4.11-53.noarch.rpm
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-1.4.11-53.noarch.rpm
wget http://dl.atrpms.net/all/asterisk-core-sounds-fr-sln16-1.4.11-53.noarch.rpm

rpm -Uvh asterisk-core-sounds-fr-*.rpm
Title: Re: function like VICIDIAL : teleyapper
Post by: SARK devs on June 07, 2009, 08:40:26 PM
:(

Understood

Best

S
Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 08, 2009, 04:26:26 AM
Sound files not available for french language:

Code: [Select]
9001 press-1
9002 press-2
9003 press-3
9004 press-4
9005 press-5
9006 T-to-hear-cur-ancmnt
9007 to-rerecord-yr-message
9008 to-place-outgoing-call
9009 to-hear-menu-again
9010 to-hang-up
9011 goodbye
9012 after-the-tone
9013 say-temp-msg-prs-pound
9014 your-msg-has-been-saved
9015 the-num-i-have-is
9016 to-call-this-number
9017 you-have-these-options
9018 through
9019 press-star-cancel
9020 connection-timed-out
9021 cancelled
9022 option-not-implemented

Using selintra to make file with *60*nnnn, I renamed the generated files and moved them in the sounds folder.

Code: [Select]
mv /var/lib/asterisk/sounds/usergreeting9001.gsm /var/lib/asterisk/sounds/fr/press-1
mv /var/lib/asterisk/sounds/usergreeting9002.gsm /var/lib/asterisk/sounds/fr/press-2
mv /var/lib/asterisk/sounds/usergreeting9003.gsm /var/lib/asterisk/sounds/fr/press-3
mv /var/lib/asterisk/sounds/usergreeting9004.gsm /var/lib/asterisk/sounds/fr/press-4
mv /var/lib/asterisk/sounds/usergreeting9005.gsm /var/lib/asterisk/sounds/fr/press-5
mv /var/lib/asterisk/sounds/usergreeting9006.gsm /var/lib/asterisk/sounds/fr/T-to-hear-cur-ancmnt
mv /var/lib/asterisk/sounds/usergreeting9007.gsm /var/lib/asterisk/sounds/fr/to-rerecord-yr-message
mv /var/lib/asterisk/sounds/usergreeting9008.gsm /var/lib/asterisk/sounds/fr/to-place-outgoing-call
mv /var/lib/asterisk/sounds/usergreeting9009.gsm /var/lib/asterisk/sounds/fr/to-hear-menu-again
mv /var/lib/asterisk/sounds/usergreeting9010.gsm /var/lib/asterisk/sounds/fr/to-hang-up
mv /var/lib/asterisk/sounds/usergreeting9011.gsm /var/lib/asterisk/sounds/fr/goodbye
mv /var/lib/asterisk/sounds/usergreeting9012.gsm /var/lib/asterisk/sounds/fr/after-the-tone
mv /var/lib/asterisk/sounds/usergreeting9013.gsm /var/lib/asterisk/sounds/fr/say-temp-msg-prs-pound
mv /var/lib/asterisk/sounds/usergreeting9014.gsm /var/lib/asterisk/sounds/fr/your-msg-has-been-saved
mv /var/lib/asterisk/sounds/usergreeting9015.gsm /var/lib/asterisk/sounds/fr/the-num-i-have-is
mv /var/lib/asterisk/sounds/usergreeting9016.gsm /var/lib/asterisk/sounds/fr/to-call-this-number
mv /var/lib/asterisk/sounds/usergreeting9017.gsm /var/lib/asterisk/sounds/fr/you-have-these-options
mv /var/lib/asterisk/sounds/usergreeting9018.gsm /var/lib/asterisk/sounds/fr/through
mv /var/lib/asterisk/sounds/usergreeting9019.gsm /var/lib/asterisk/sounds/fr/press-star-cancel
mv /var/lib/asterisk/sounds/usergreeting9020.gsm /var/lib/asterisk/sounds/fr/connection-timed-out
mv /var/lib/asterisk/sounds/usergreeting9021.gsm /var/lib/asterisk/sounds/fr/cancelled
mv /var/lib/asterisk/sounds/usergreeting9022.gsm /var/lib/asterisk/sounds/fr/option-not-implemented
Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 10, 2009, 03:29:51 AM
I does not work with Asterisk 1.4.24 because of a bug waiting to be fixed.
Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 12, 2009, 11:03:14 PM
Soprom,
How about a How-to for the wiki?

For now (until the bug is corrected it won't really matter), I've posted my notes here:
http://drupal.logiciel-libre.org/yapper (http://drupal.logiciel-libre.org/yapper)

I aggree that a bunch of howtos under Asterisk/custumapps would be a great way to complement this super pbx! There are so many fun things to make a phone rings!!!

Which wiki tho? Selintra or Contribs?

Title: Re: function like VICIDIAL : teleyapper
Post by: SARK devs on June 14, 2009, 02:14:09 PM
HI Sophie,

Is this all good now?

I'd like to publish your work on the SARKPBX Wiki if it is running OK.

Best

S
Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 14, 2009, 05:02:10 PM

This app is running on sail-2.2.1 but not on sail-2.3.1 with Asterisk 1.4.24.

I see that ATRPMS has asterisk.i386 1:1.4.25.1-78.el4 but smecontribs is still at version asterisk-1.4.24.1-76.el4



Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 14, 2009, 05:45:11 PM
Will test after this update:

Code: [Select]
yum update --enablerepo=atrpms \
 dahdi-linux-kmdl-`uname -r` \
 dahdi-tools \
 libpri \
 asterisk \
 asterisk-addons

(see http://wiki.contribs.org/ATrpms (http://wiki.contribs.org/ATrpms) if needed)
Title: Re: function like VICIDIAL : teleyapper
Post by: soprom on June 14, 2009, 05:56:06 PM
... and it works after this last update!

The main concern with this app is the localization. It requires most of the work.

I'll be working on a manager to edit the list of numbers to call and to review results like
5145550610  2009-06-14 11:54:45   Answered...
Title: Re: function like VICIDIAL : teleyapper
Post by: SARK devs on June 14, 2009, 07:22:24 PM
As you've already found...

1.4.25 is fine.

We run it here



I think we are just about ready to declare 2.3.1-12 stable(ish) -  (holds breath, waits for bug report to arrive)
 
;)