228 lines
5.7 KiB
Bash
Executable file
228 lines
5.7 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# Voicemail.conf
|
|
|
|
ast_add_conf voicemail
|
|
|
|
init_voicemailconf() {
|
|
ast_add_reload voicemail
|
|
|
|
ast_enable_type voicegeneral
|
|
ast_enable_type voicemail
|
|
ast_enable_type voicezone
|
|
ast_enable_type dialplanvoice
|
|
|
|
voice_format="wav49|gsm|wav"
|
|
voice_serveremail=
|
|
voice_attach=no
|
|
voice_skipms=3000
|
|
voice_maxsilence=10
|
|
voice_silencethreshold=128
|
|
voice_maxlogins=3
|
|
voice_emaildateformat="%A, %B %d, %Y at %r"
|
|
voice_sendvoicemail=no
|
|
voice_maxmsg=100
|
|
voice_maxmessage=180
|
|
voice_minmessage=3
|
|
voice_maxgreet=60
|
|
return 0
|
|
}
|
|
|
|
voicegeneral_list="format serveremail attach skipms maxsilence silencethreshold maxlogins emaildateformat sendvoicemail maxmsg maxmessage minmessage maxgreet"
|
|
voicegeneral_ext_list=""
|
|
|
|
valid_voicemail(){
|
|
is_in_list $1 ${voicegeneral_list} ${voicegeneral_ext_list}
|
|
return $?
|
|
}
|
|
|
|
voicebox_list="context number password name email pager"
|
|
|
|
voicebox_listopt="tz attach serveremail saycid dialout callback review operator envelope sayduration saydurationm"
|
|
|
|
valid_voicebox() {
|
|
is_in_list $1 ${voicebox_list} ${voicebox_listopt}
|
|
return $?
|
|
}
|
|
|
|
check_add_voicebox() {
|
|
if [ ! -z "${voicebox_number}" ] ; then
|
|
[ -z "${voicebox_context}" ] && voicebox_context=default
|
|
logdebug 1 "Adding Voicebox ${voicebox_number} in ${voicebox_context}"
|
|
# Construct the voicebox line
|
|
local line="$voicebox_number => "
|
|
[ -z "${voicebox_tz}" ] && voicebox_tz=homeloc
|
|
[ -z "${voicebox_name}" ] && voicebox_name=OpenWRT
|
|
|
|
logdebug 1 "Adding in order options"
|
|
for i in password name email pager ; do
|
|
eval "local value=\"\${voicebox_$i}\""
|
|
line="${line}${value},"
|
|
done
|
|
|
|
# Then add named options.
|
|
logdebug 2 "Adding in named options"
|
|
for i in ${voicebox_listopt} ; do
|
|
eval val=\${voicebox_$i}
|
|
[ -z "${val}" ] || append line "$i=$val" \|
|
|
done
|
|
|
|
logdebug 2 "Check for empty"
|
|
# Check if the current voicebox context has anything
|
|
eval local cur="\${voicebox_section_$voicebox_context}"
|
|
# if not add it to the list of contexts used
|
|
[ -z "$cur" ] && append voice_contextlist "${voicebox_context}" " "
|
|
|
|
# Then add the voicebox line to the context
|
|
logdebug 4 "Add Voicebox $line to ${voicebox_context}"
|
|
append voicebox_section_${voicebox_context} "$line" "$N"
|
|
fi
|
|
|
|
# Then clear the settings for the next one.
|
|
for i in ${voicebox_list} ${voicebox_listopt} ; do
|
|
eval unset voicebox_$i
|
|
done
|
|
}
|
|
|
|
create_voicemailconf() {
|
|
# Construct the file
|
|
file=${DEST_DIR}/voicemail.conf
|
|
get_checksum voicemail_conf $file
|
|
|
|
local isempty=1
|
|
if [ -z "${voice_contextlist}" ] ; then
|
|
local isempty=2
|
|
rm -f $file
|
|
else
|
|
echo "${asteriskuci_gen}[general]" > $file
|
|
for i in ${voicegeneral_list} ; do
|
|
eval value=\${voice_$i}
|
|
if [ ! -z "$value" ] ; then
|
|
echo "$i=$value" >> $file
|
|
fi
|
|
done
|
|
echo "${N}[zonemessages]" >> $file
|
|
echo "homeloc=${asterisk_zone}| Q IMp" >> $file
|
|
echo "${voicezone_list}" >> $file
|
|
for i in ${voice_contextlist} ; do
|
|
echo "${N}[$i]" >> $file
|
|
eval "local cursection=\"\${voicebox_section_${i}}\""
|
|
echo "$cursection" >> $file
|
|
eval unset voicebox_section_${i}
|
|
done
|
|
unset voice_contexts
|
|
fi
|
|
check_checksum "$voicemail_conf" "$file" || ast_voicemail_restart=$isempty
|
|
}
|
|
|
|
handle_voicegeneral() {
|
|
option_cb() {
|
|
if valid_voicemail $1 $2 ; then
|
|
eval voice_$1="$2"
|
|
else
|
|
logerror "Invalid general voice option: $1"
|
|
fi
|
|
}
|
|
}
|
|
|
|
handle_voicemail() {
|
|
check_add voicebox
|
|
voicebox_context="${1%[-_]*}"
|
|
if [ "${voicebox_context}" == "$1" ] ; then
|
|
voicebox_context=default
|
|
fi
|
|
voicebox_number=${1#*[-_]}
|
|
option_cb() {
|
|
case $1 in
|
|
zone) voicebox_tz="$2" ;;
|
|
*)
|
|
if valid_voicebox $1 $2 ; then
|
|
eval "voicebox_$1=\"$2\""
|
|
else
|
|
logerror "Invalid voicebox option: $1"
|
|
fi
|
|
esac
|
|
}
|
|
}
|
|
|
|
# Locality options for voicemail
|
|
|
|
check_add_voicezone() {
|
|
if [ ! -z "${voicezone_name}" ] ; then
|
|
[ -z "${voicezone_zone}" ] && voicezone_zone=${asterisk_zone}
|
|
if [ -z "${voicezone_message}" ] ; then
|
|
voicezone_message="Q IMp"
|
|
else
|
|
voicezone_message=`echo "$voicezone_message"|tr \" \'`
|
|
fi
|
|
append voicezone_list "${voicezone_name}=${voicezone_zone}|${voicezone_message}" "${N}"
|
|
fi
|
|
unset voicezone_name
|
|
unset voicezone_zone
|
|
unset voicezone_message
|
|
}
|
|
|
|
handle_voicezone() {
|
|
voicezone_name=$1
|
|
option_cb() {
|
|
case $1 in
|
|
name) voicezone_name="$2" ;;
|
|
zone) voicezone_zone="$2" ;;
|
|
message) voicezone_message="$2" ;;
|
|
*) logerror "Invalid voicezone option: $1"
|
|
esac
|
|
}
|
|
}
|
|
|
|
handle_dialplanvoice() {
|
|
check_add dialplanvoice
|
|
option_cb() {
|
|
case $1 in
|
|
dialplan|extension|voicecontext|voicebox)
|
|
eval "dial_voice_$1=\"$2\"" ;;
|
|
*) logerror "Invalid option: $1 for dialplanvoice"
|
|
esac
|
|
}
|
|
}
|
|
|
|
check_add_dialplanvoice() {
|
|
if [ ! -z "${dial_voice_dialplan}" -a ! -z "${dial_voice_extension}" ] ; then
|
|
local ext="exten => ${dial_voice_extension},"
|
|
[ -z "${dial_voice_voicebox}" ] && dial_voice_voicebox=default
|
|
if [ -z "${dial_voice_voicebox}" ] ; then
|
|
logerror "Expecting voicebox for ${dial_voice_dialplan}/${dial_voice_extension}"
|
|
else
|
|
check_add_context ${dial_voice_dialplan}
|
|
local voiceext="${dial_voice_voicebox}@${dial_voice_voicecontext}"
|
|
enable_voicemail
|
|
append dialplan_context_${dial_voice_dialplan} "${ext}1,VoiceMailMain(${voiceext})" "${N}"
|
|
fi
|
|
fi
|
|
for i in dialplan extension voicecontext voicebox ; do
|
|
eval "unset dial_voice_$i"
|
|
done
|
|
}
|
|
|
|
enable_voicemail() {
|
|
enable_module res_adsi
|
|
enable_module app_voicemail
|
|
enable_format gsm
|
|
}
|
|
|
|
|
|
add_dialplan_voice() {
|
|
local context=$1
|
|
logdebug 1 "Adding Dialplan voice $1 $2"
|
|
check_add_context "$context"
|
|
local ext="exten => $2,"
|
|
enable_voicemail
|
|
append dialplan_context_${context} "${ext}1,VoiceMailMain($3)" "${N}"
|
|
}
|
|
|
|
|
|
|
|
reload_voicemail() astcmd "module reload app_voicemail.so"
|
|
unload_voicemail() astcmd "module unload app_voicemail.so"
|
|
|
|
|
|
# vim: ts=2 sw=2 noet foldmethod=indent
|