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
-
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?
-
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
-
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
-
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)
-
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:
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:
#=========================
#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:
#=========================
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!
-
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...
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'
-
following up...
Dialplan needs this change to work:
Replace all
DigitTimeout(
with
Set(TIMEOUT(digit)=
and
Replace all
ResponseTimeout(
with
Set(TIMEOUT(response)=
Create folder:
mkdir /var/lib/asterisk/sounds/custom
chown asterisk:asterisk /var/lib/asterisk/sounds/custom
The IVR works but nothing happens...
Asterisk says:
== 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'
-
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...
-
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? :)
-
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!
-
Soprom,
How about a How-to for the wiki?
It's a interesting project.
Thanks,
-
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
-
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):
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
-
:(
Understood
Best
S
-
Sound files not available for french language:
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.
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
-
I does not work with Asterisk 1.4.24 because of a bug waiting to be fixed.
-
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?
-
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
-
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
-
Will test after this update:
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)
-
... 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...
-
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)
;)