Автоответчик на базе модема Acorp Sprinter@56k и vgetty

Все больше пользователей оставляют компьютер постоянно включенным, когда они находятся вне дома. Ведь работающий под управлением Linux компьютер способен самостоятельно в заданное время соединиться с интернетом, проверить почту, отослать смс хозяину по приходу новых писем, скачать нужные файлы... да и вообще быть доступным с работы, если понадобятся какие-нибудь файлы, оставаясь при этом защищенным от сетевых атак и вирусов.

В данной статье пойдет речь об использовании комьютера в качестве автоответчика. Причем с сответствующей правкой конфигов, автоответчик можно будет использовать не только для указанного модема, но и для любого другого голосового модема.

Установка
Практически в каждом дистрибутиве Linux есть программа для приема модемных звонков mgetty. Но у нее есть и расширение для приема голосовых звонков vgetty. Соответствующий пакет в дистрибутиве обычно называется mgetty-voice. В случае отсутствия mgetty в дистрибутиве исходники можно скачать с адреса ftp://alpha.greenie.net/pub/mgetty/source/

Настройка
vgetty хранит свою конфигурацию в файле /etc/mgetty+sendfax/voice.conf. Укажем следующие параметры в этом файле:
voice_dir /var/spool/voice
Это рабочая папка программы, относительно которой будут располагаться все остальные
receive_dir incoming
В эту папку будут помещаться принятые голосовые сообщения
message_dir messages
В эту папку надо поместить записанное приветствие для автоответчика
backup_message standard.rmd
Имя файла – приветствия
port_speed 115200
Скорость порта. В документации программы указано, что на многих машинах не будет работать со скоростью выше 38400, но этой скорости может оказаться явно недостаточно для работы в голосовом режиме.
rec_silence_threshold 128
Порог определения тишины. На модеме Acorp Sprinter@56k (EMSF-2) нельзя указывать произвольный порог, надо ставить уже предопределенные значения.
forceV253 TRUE
Принудительно указываем vgetty, что модем поддерживает голосовые команды стандарта V253. В противном случае программа определяет модем как стандартный Rockwell и пытается использовать rockwell'овский набор команд, который отличается от V253.
rings 2
Число звонков, после которых модем берет трубку. Значения меньше 2 не поддерживаются. Это связанно с тем. что программа пытается использовать определение номера по стандарту CID, который на наших линиях практически не используется.
message_program /home/sergey/progs/php/sendsms
Путь к программе которая запускается после приема звонка. Ниже будет указано, как использовать эту программу.
ring_report_delay 1
Задержка между импульсами звонка. Для указанного модема надо использовать 1.

Записываем приветствие в формате WAV, а затем конфертируем его сначала в pvf командой wavtopvf, а затем в rmd командой pvftormd, переименовываем файл в standatd.rmd и кладем его в папку messages.

Что необходимо сделать, когда будет получено голосовое сообщение? Желательно сконвертировать его в WAV, чтобы можно было прослушать на любом плэере, а также неплохо бы отправить SMS, что был получен звонок. Этим занимается скрипт sendsms:
#!/bin/sh

#sending sms that we receive a phome call
php /home/sergey/progs/php/sms.php

#forming the WAV message file name (it sonsists of record date)
fileName="/home/sergey/documents/incoming/`date +%H:%M:%S`.wav"

#converting file to wav
rmdtopvf $1 | pvftowav > $fileName

#removing original file
rm -f $1

А программа sendsms.php занимается отправкой смс (в указанном примере – на билайн через его mail-sms шлюз. При использовании указанного скрипта надо поменять:
7XXXXXXXXXX – на номер телефона
xxxxx@xxx.xxx – действующий e-mail адрес (шлюз билайна может отправлять смс только с реальных адресов. поэтому программа mail, которая отправляет письма с адресов вида sergey@localhost не подходит)
<?
print("\n sending sms...");
$message = "Phone call at " . date("H:i:s");
if(mail("7XXXXXXXXXX@sms.beemail.ru", "test", $message, "From: xxxxx@xxx.xxx")) {
print("Success \n");
} else {
print("Failure :-( \n");
}
?>

Естественно, для отправки письма необходимо соединение с интернетом. Поэтому в случае диалапа необходимо вставлять в скрипт в начале команды для дозвона, а в конце – для разрыва соединения.

[b]Запуск[/b]
Для запуска vgetty добавляем в файл /etc/inittab строчку
# starting vgetty
S1:345:respawn:/sbin/vgetty ttyS0

где ttyS0 – компорт, на котором установлен модем.

После этого перечитываем inittab:

# /sbin/init q

После этого модем готов к приему голосовых звонков.