За что я люблю Linux, так это за его универсальность....
Превращаем рабочую станцию в телефонный автоответчик
Введение
В один прекрасный момент пришел к выводу, что рабочая станция которая находиться у меня в рабстве и постоянно готова к выполнению поставленной мною задачи не достаточно сильно загружена. Решил восполнить этот пробел, загрузив её работой по приему телефонных звонков в моё отсутствие. О том как реализовать это на практике пойдет речь в этой статье....
Программное и аппаратное обеспечение
- Intel(R) Celeron(R) CPU 1.70GHz; 768 MB RAM; HDD 40GB. Модем Acorp-56EMSF-2
- Базовая система -- дистрибутив Debian GNU/Linux 3.1 "Sarge"; Kernel 2.6.16.16
Установка mgetty проводилась в соответствии со стандартными процедурам.
vc01 ~ ( 01:24 ) > apt-cache search mgetty
mgetty - Smart Modem getty replacement
mgetty-viewfax - Program for displaying Group-3 Fax files under X
mgetty-docs - Documentation Package for mgetty
mgetty-fax - Faxing tools for mgetty
mgetty-voice - Voicemail handler for mgetty
mgetty-pvftools - Programs for listening and manipulating pvf and rmd files
mingetty - Console-only getty
vc01 ~ ( 01:25 ) >apt-get install mgetty mgetty-viewfax mgetty-fax mgetty-voice mgetty-pvftools mingetty
Правим mgetty - Smart Modem getty replacement
mgetty-viewfax - Program for displaying Group-3 Fax files under X
mgetty-docs - Documentation Package for mgetty
mgetty-fax - Faxing tools for mgetty
mgetty-voice - Voicemail handler for mgetty
mgetty-pvftools - Programs for listening and manipulating pvf and rmd files
mingetty - Console-only getty
vc01 ~ ( 01:25 ) >apt-get install mgetty mgetty-viewfax mgetty-fax mgetty-voice mgetty-pvftools mingetty
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
.........................................
/etc/mgetty/voice.conf
port ttyS0
-- Последовательный портrings 3
-- Три звонка и поднимается трубкаanswer_mode voice:fax:data
-- Порядок ответа голос:факс:данныеrec_max_len 30
-- Задаем максимальную длину сообщения у меня 30 секунд.rec_min_len 2
-- Минимальная длинна сообщения.port_speed 115200
-- Устанавливаем скорость порта.backup_message standard.rmd
-- Файл приветственного сообщения.phone_owner root
-- Владелец файлов сообщений (root).phone_group voice
-- Группа файлов сообщений (voice).phone_mode 0660
-- Права для файлов сообщений (-rw--rw---).В
/etc/inittab
пишим# starting vgettyДля того чтобы иметь доступ к сообщениям в
S1:2345:respawn:/usr/sbin/vgetty ttyS0
/var/spool/voice/incoming/
. Добавляем себя в группу voice
vc01 ~ ( 01:50 ) > sudo addgroup $USER voice
Добавляется пользователь `$USER' в группу `voice'...
Готово.
vc01 ~ ( 01:50 ) >
Создаем скрипт следующего содержания:
Код:
Для настройки оповещения о приходе новых сообщений, создаем скрипт следующего содержания:
#!/bin/bash
#--------------------------------
MINC=/var/spool/voice/incoming/
MDIR=/home/$USER/msg
#--------------------------------
clear
case "$1" in
-h|--h|--he|--hel|--help)
echo "
Copyringts (c) Andrey G-v 2007
Options:
-h, --help Показать справку и выйти
-v, --version Показать информацию о версии
"
exit 1
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "ubdate 0.1 "
exit 1
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
esac
clear
echo -en " \33[33m
==============================
1) Новые сообщения:
2) Слушать старьё:
3) Выход:
==============================
Выберите действие :# \33[0m"
read num
case $num in
1)
if !( [ -d $MDIR ] ); then
mkdir $MDIR ;
fi
cd $MINC
for i in `ls -x1 *.[Rr][Mm][Dd] 2> /dev/null`; do
MSDATE=$(date -r $i +Msg-%d%m%y-%H%M%S.wav)
rmdtopvf -b $i | pvftowav > $MDIR/$MSDATE
done
cd $MDIR
for i in `ls -x1 *.[Ww][Aa][Vv] 2> /dev/null`; do
echo "Играю "$i"..."
play $i
done
rm -f $MINC/*.[Rr][Mm][Dd]
;;
2)
clear
cd $MDIR
LSDIR=$(ls -x1 *.[Ww][Aa][Vv] 2> /dev/null)
echo -en " \33[33m
==============================
$LSDIR
==============================
Имя фаила :# \33[0m"
read PLFILE
#ls -x1 *.[Ww][Aa][Vv]
echo "Играю "$PLFILE"..."
play $PLFILE
;;
3)
clear
echo "Не туда попал? :)"
sleep 3
;;
*)
clear
echo "ОШИБКА! НЕ ВЕРНЫЙ АРГУМЕНТ! :("
exit 1
;;
esac
Код:
И скормим этот скрипт cron(у). Информация о наличии новых сообщений будет приходить к вам на e-mail
#!/bin/bash
MESDIR=`ls /var/spool/voice/incoming/*.[Rr][Mm][Dd] 2> /dev/null | wc -l`
if [ $MESDIR != "0" ]; then
echo Для Вас есть $MESDIR сообщение\(ний\). | mail -s "Есть сообщения на автоответчике" $USER # Имя пользователя
fi
vc01 ~ ( 02:09 ) > crontab -e
#Запускать каждые 10 минут
0,10,20,30,40,50 * * * * $HOME/bin/ваш_скрипт.sh
Теперь практически всё готово для запуска автоответчика, осталось только записать или скачать фаил приветствия.0,10,20,30,40,50 * * * * $HOME/bin/ваш_скрипт.sh
Втыкаем ваш микрофон в соответствующие гнездо модема, и записываем ваше гениальное приветствие выполняя следующие команды:
vc01 ~ ( 02:10 ) > sudo /usr/bin/vm record -m -l ttyS0 -v standard.rmd
vc01 ~ ( 02:11 ) > sudo chown $USER:$USER standard.rmd
vc01 ~ ( 02:11 ) > rmdtopvf -b standard.rmd | pvftowav > temp.wav && play temp.wav
Выставляем права доступа и копируем файл
standard.rmd
в каталог /var/spool/voice/messages/
vc01 ~ ( 02:13 ) > sudo cp -v standard.rmd /var/spool/voice/messages/
vc01 ~ ( 02:13 ) > ls -al /var/spool/voice/messages/
итого 68Теперь все окончательно готово для запуска, для этого говорим процессу
drwxr-xr-x 2 root voice 4096 2007-03-13 14:13 .
drwxr-xr-x 4 root root 4096 2006-07-13 14:13 ..
-rw-rw-r-- 1 andrey andrey 54212 2007-03-13 14:13 standard.rmd
vc01 ~ ( 02:13 ) > sudo chown root:voice /var/spool/voice/messages/standard.rmd
vc01 ~ ( 02:13 ) > ls -al /var/spool/voice/messages/
итого 68
drwxr-xr-x 2 root voice 4096 2007-03-13 14:13 .
drwxr-xr-x 4 root root 4096 2006-07-13 14:13 ..
-rw-rw-r-- 1 root voice 54212 2007-03-13 14:13 standard.rmd
init
перечитать файл конфигурации /etc/inittab
vc01 ~ ( 02:13 ) > sudo kill -HUP 1