Upgrade 3CX to v18 and get it hosted free!

Asterisk tips wiki

Author image

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… 😉


Article Reviews

Write a Review

Your email address will not be published. Required fields are marked *

Required Field. Minimum 5 characters.

Required Field. Minimum 5 characters, maximum 50.

Required field.There is an error with this field.

Required Field.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

There are no reviews for this article. Be the first one to write a review.

Related Posts:

Get 3CX - Absolutely Free!
Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.