Asterisk tips wiki

Asterisk Audio wiki


This is the product of me trying to get a better understanding of the dialplan. Use at you own risk.
It will give you a wiki, that your users can add recordings to, delete them again, append something to them and all.
Be careful. This system has 6 ext (maximum-file-length - 1) possible entries, so it might very well take up all your
harddisk-space.


Files you will need:

in /var/lib/asterisk/sounds/wiki/:

help/options.gsm - "The following subentries exist"
help/noopts.gsm - "No subentries were found"
help/8-append.gsm - "Press 8 to append something to the current file"
help/9-delete.gsm - "Press 9 to delete the current file"
help/7-modify.gsm - "Press 7 to modify the current file"
help/0-goup.gsm - "Press 0 to go up one level"
help/or.gsm - "or"
0.gsm - Your Main wiki-File ("Hello, this is our wiki.. press (*) for help, or choose a subentry by pressing (1)-(6)")
ask_overwrite.gsm - "Are you sure you want to overwrite this file?"
ask_delete.gsm - "Are you sure you want to delete this file?"
ask_append.gsm - "Are you sure you want to append to this file?"

in /var/lib/asterisk/system/:

fexists.sh

  1. !/bin/bash

for file in $1; do
if [ -f $file ] ; then
exit;
else
exit 1;
fi
done


wikiconcat.sh

  1. !/bin/bash
mv $1 $1temp.gsm
sox $1temp.gsm $2 $1
rm $1temp.gsm
rm $2


The dialplan:

[wiki]
exten => s,1,Answer

  1. initialise the digitstack with 0 #
exten => s,2,SetVar(digitstack=0)

  1. check if the file corresponding to the current digitstack exists #
exten => s,3,System(/var/lib/asterisk/system/fexists.sh /var/lib/asterisk/sounds/wiki/${digitstack}.gsm)
exten => s,4,Noop(s3)

  1. if yes, playback #
exten => s,5,Background(wiki/${digitstack})
exten => s,6,Goto(wikioptions,s,1)

  1. if not, record #
exten => s,104,Record(/var/lib/asterisk/sounds/wiki/${digitstack}:gsm)
exten => s,105,Goto(s,3)

  1. if (0) is dialed, delete last digit from the digitstack, thus going up one level in the menu #
exten => _0,1,SetVar(digitstack=${digitstack:0:$[${LEN(${digitstack})} - 1]})
exten => _0,2,GotoIf($[${LEN(${digitstack})} = 0]?s,2)
exten => _0,3,Goto(s,3)

  1. if (7) is dialed, ask for confirmation, then record new file, overwriting the old one #
exten => _7,1,SetVar(pressed=7)
exten => _7,2,SetVar(ask=overwrite)
exten => _7,3,SetVar(goyes=6)
exten => _7,4,SetVar(gono=7)
exten => _7,5,Goto(wikikeepdel,s,1)
exten => _7,6,Record(/var/lib/asterisk/sounds/wiki/${digitstack}:gsm)
exten => _7,7,Goto(s,3)

  1. if (8) is dialed, record, then ask for confirmation, then append to current file #
exten => _8,1,Record(/var/lib/asterisk/sounds/wiki/${digitstack}-temp:gsm)
exten => _8,2,SetVar(pressed=8)
exten => _8,3,SetVar(ask=append)
exten => _8,4,SetVar(goyes=7)
exten => _8,5,SetVar(gono=9)
exten => _8,6,Goto(wikikeepdel,s,1)
exten => _8,7,System(/var/lib/asterisk/system/wikiconcat.sh /var/lib/asterisk/sounds/wiki/${digitstack}.gsm /var/lib/asterisk/sounds/wiki/${digitstack}-temp.gsm)
exten => _8,8,Goto(s,3)
exten => _8,9,System(rm /var/lib/asterisk/sounds/wiki/${digitstack}-temp.gsm)
exten => _8,10,Goto(s,3)

  1. if (9) is dialed, ask for confirmation, then delete #
exten => _9,1,SetVar(pressed=9)
exten => _9,2,SetVar(ask=delete)
exten => _9,3,SetVar(goyes=6)
exten => _9,4,SetVar(gono=9)
exten => _9,5,Goto(wikikeepdel,s,1)
exten => _9,6,System(rm /var/lib/asterisk/sounds/wiki/${digitstack}*.gsm)
exten => _9,7,SetVar(digitstack=${digitstack:0:$[${LEN(${digitstack})} - 1]})
exten => _9,8,GotoIf($[${LEN(${digitstack})} = 0]?s,2)
exten => _9,9,Goto(s,3)

  1. playback help if (*) is pressed #

exten => _*,1,Playback(wiki/help/0-goup)
exten => _*,2,Playback(wiki/help/7-modify)
exten => _*,3,Playback(wiki/help/8-append)
exten => _*,4,Playback(wiki/help/9-delete)
exten => _*,5,Goto(wiki,s,3)

  1. for any other number (1)-(6), put it on the digitstack #
include => wikigrabnum


[wikigrabnum]
  1. Grab dialed number and put it on the digitstack #
exten => _X,1,SetVar(digitstack=${digitstack}${EXTEN})
exten => _X,2,Noop(X1)
exten => _X,3,Goto(wiki,s,3)

[wikikeepdel]
  1. Are you sure ? #
exten => s,1,Background(wiki/ask_${ask})
exten => s,2,Goto(s,1)

exten => _1,1,Goto(wiki,${pressed},${goyes})
exten => _2,1,Goto(wiki,${pressed},${gono})

exten => i,1,Goto(s,1)

[wikioptions]
  1. List existing entries in the current submenu #
exten => s,1,SetVar(option=0)
exten => s,2,SetVar(options=0)
exten => s,3,Playback(wiki/help/options)
exten => s,4,SetVar(option=$[${option} + 1])
exten => s,5,System(/var/lib/asterisk/system/fexists.sh /var/lib/asterisk/sounds/wiki/${digitstack}${option}.gsm)
exten => s,6,NoOp ;Playback(wiki/help/or)
exten => s,7,SayDigits(${option})
exten => s,8,SetVar(options=1)
exten => s,9,GotoIf($[ "${option}" = "7" ]?s,10:s,4)
exten => s,10,GotoIf($[ "${options}" = "0" ]?s,11:wiki,s,3)
exten => s,11,Playback(wiki/help/noopts)
exten => s,12,Goto(wiki,s,3)

exten => s,106,GotoIf($[ "${option}" = "7" ]?s,10:s,4)



the last thing you need is an entry in your dial-in context, that does a "Goto(wiki,s,1)"


i hope there're no tikiwiki-formatting-related errors in this.. seems sometimes it's a bad thing to use some common characters for formating... or i'm too stupid to find out how this works... so if you find errors here, feel free to correct them... ;-)

Asterisk Audio wiki


This is the product of me trying to get a better understanding of the dialplan. Use at you own risk.
It will give you a wiki, that your users can add recordings to, delete them again, append something to them and all.
Be careful. This system has 6 ext (maximum-file-length - 1) possible entries, so it might very well take up all your
harddisk-space.


Files you will need:

in /var/lib/asterisk/sounds/wiki/:

help/options.gsm - "The following subentries exist"
help/noopts.gsm - "No subentries were found"
help/8-append.gsm - "Press 8 to append something to the current file"
help/9-delete.gsm - "Press 9 to delete the current file"
help/7-modify.gsm - "Press 7 to modify the current file"
help/0-goup.gsm - "Press 0 to go up one level"
help/or.gsm - "or"
0.gsm - Your Main wiki-File ("Hello, this is our wiki.. press (*) for help, or choose a subentry by pressing (1)-(6)")
ask_overwrite.gsm - "Are you sure you want to overwrite this file?"
ask_delete.gsm - "Are you sure you want to delete this file?"
ask_append.gsm - "Are you sure you want to append to this file?"

in /var/lib/asterisk/system/:

fexists.sh

  1. !/bin/bash

for file in $1; do
if [ -f $file ] ; then
exit;
else
exit 1;
fi
done


wikiconcat.sh

  1. !/bin/bash
mv $1 $1temp.gsm
sox $1temp.gsm $2 $1
rm $1temp.gsm
rm $2


The dialplan:

[wiki]
exten => s,1,Answer

  1. initialise the digitstack with 0 #
exten => s,2,SetVar(digitstack=0)

  1. check if the file corresponding to the current digitstack exists #
exten => s,3,System(/var/lib/asterisk/system/fexists.sh /var/lib/asterisk/sounds/wiki/${digitstack}.gsm)
exten => s,4,Noop(s3)

  1. if yes, playback #
exten => s,5,Background(wiki/${digitstack})
exten => s,6,Goto(wikioptions,s,1)

  1. if not, record #
exten => s,104,Record(/var/lib/asterisk/sounds/wiki/${digitstack}:gsm)
exten => s,105,Goto(s,3)

  1. if (0) is dialed, delete last digit from the digitstack, thus going up one level in the menu #
exten => _0,1,SetVar(digitstack=${digitstack:0:$[${LEN(${digitstack})} - 1]})
exten => _0,2,GotoIf($[${LEN(${digitstack})} = 0]?s,2)
exten => _0,3,Goto(s,3)

  1. if (7) is dialed, ask for confirmation, then record new file, overwriting the old one #
exten => _7,1,SetVar(pressed=7)
exten => _7,2,SetVar(ask=overwrite)
exten => _7,3,SetVar(goyes=6)
exten => _7,4,SetVar(gono=7)
exten => _7,5,Goto(wikikeepdel,s,1)
exten => _7,6,Record(/var/lib/asterisk/sounds/wiki/${digitstack}:gsm)
exten => _7,7,Goto(s,3)

  1. if (8) is dialed, record, then ask for confirmation, then append to current file #
exten => _8,1,Record(/var/lib/asterisk/sounds/wiki/${digitstack}-temp:gsm)
exten => _8,2,SetVar(pressed=8)
exten => _8,3,SetVar(ask=append)
exten => _8,4,SetVar(goyes=7)
exten => _8,5,SetVar(gono=9)
exten => _8,6,Goto(wikikeepdel,s,1)
exten => _8,7,System(/var/lib/asterisk/system/wikiconcat.sh /var/lib/asterisk/sounds/wiki/${digitstack}.gsm /var/lib/asterisk/sounds/wiki/${digitstack}-temp.gsm)
exten => _8,8,Goto(s,3)
exten => _8,9,System(rm /var/lib/asterisk/sounds/wiki/${digitstack}-temp.gsm)
exten => _8,10,Goto(s,3)

  1. if (9) is dialed, ask for confirmation, then delete #
exten => _9,1,SetVar(pressed=9)
exten => _9,2,SetVar(ask=delete)
exten => _9,3,SetVar(goyes=6)
exten => _9,4,SetVar(gono=9)
exten => _9,5,Goto(wikikeepdel,s,1)
exten => _9,6,System(rm /var/lib/asterisk/sounds/wiki/${digitstack}*.gsm)
exten => _9,7,SetVar(digitstack=${digitstack:0:$[${LEN(${digitstack})} - 1]})
exten => _9,8,GotoIf($[${LEN(${digitstack})} = 0]?s,2)
exten => _9,9,Goto(s,3)

  1. playback help if (*) is pressed #

exten => _*,1,Playback(wiki/help/0-goup)
exten => _*,2,Playback(wiki/help/7-modify)
exten => _*,3,Playback(wiki/help/8-append)
exten => _*,4,Playback(wiki/help/9-delete)
exten => _*,5,Goto(wiki,s,3)

  1. for any other number (1)-(6), put it on the digitstack #
include => wikigrabnum


[wikigrabnum]
  1. Grab dialed number and put it on the digitstack #
exten => _X,1,SetVar(digitstack=${digitstack}${EXTEN})
exten => _X,2,Noop(X1)
exten => _X,3,Goto(wiki,s,3)

[wikikeepdel]
  1. Are you sure ? #
exten => s,1,Background(wiki/ask_${ask})
exten => s,2,Goto(s,1)

exten => _1,1,Goto(wiki,${pressed},${goyes})
exten => _2,1,Goto(wiki,${pressed},${gono})

exten => i,1,Goto(s,1)

[wikioptions]
  1. List existing entries in the current submenu #
exten => s,1,SetVar(option=0)
exten => s,2,SetVar(options=0)
exten => s,3,Playback(wiki/help/options)
exten => s,4,SetVar(option=$[${option} + 1])
exten => s,5,System(/var/lib/asterisk/system/fexists.sh /var/lib/asterisk/sounds/wiki/${digitstack}${option}.gsm)
exten => s,6,NoOp ;Playback(wiki/help/or)
exten => s,7,SayDigits(${option})
exten => s,8,SetVar(options=1)
exten => s,9,GotoIf($[ "${option}" = "7" ]?s,10:s,4)
exten => s,10,GotoIf($[ "${options}" = "0" ]?s,11:wiki,s,3)
exten => s,11,Playback(wiki/help/noopts)
exten => s,12,Goto(wiki,s,3)

exten => s,106,GotoIf($[ "${option}" = "7" ]?s,10:s,4)



the last thing you need is an entry in your dial-in context, that does a "Goto(wiki,s,1)"


i hope there're no tikiwiki-formatting-related errors in this.. seems sometimes it's a bad thing to use some common characters for formating... or i'm too stupid to find out how this works... so if you find errors here, feel free to correct them... ;-)

Created by: taggy, Last modification: Fri 03 of Dec, 2004 (18:03 UTC)
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+