Вобщем я хочу сделать Голосовую почту средствами Vgetty...
Есть стандартный скрипт отправки сообщения но он меня не устраивает
т.к. не отслеживает взятие трубки на телефоне клиента и начинает проигрывание сообщения сразу после набора номера.
Я чуток модернизировал скрипт с целью отловить EVENTS такие как DIAL_TONE и LOOP_BREAK. Но у меня ничего не выходит. Во время дозвона ни один из этих EVENT не показывается. Хотя после поднятия трубки я могу отследить DTMF и BUSY_TONE(После того как повесил трубку). Вопрос - как же всё- таки отследить LOOP_BREAK или хотя-бы DIAL_TONE ... Судя по исходникам во время WAIT может произойти и DIAL_TONE и LOOP_BREAK...
#! /usr/bin/vm shell
#
# Этот скрипт звонит по номеру $1 и проигрывает сообщение $2
#
#
#
#------------------------ Функции--------------------
function receive
{
read -r INPUT <&$VOICE_INPUT;
echo "$INPUT";
}
function send
{
echo $1 >&$VOICE_OUTPUT;
kill -PIPE $VOICE_PID
}
#------------------------ Функции--------------------
#---------------- Инициализация и установка выходного устройства ----------------
ANSWER=`receive`
if [ "$ANSWER" != "HELLO SHELL" ]; then
kill -KILL $$
fi
send "HELLO VOICE PROGRAM"
ANSWER=`receive`
if [ "$ANSWER" != "READY" ]; then
kill -KILL $$
fi
send "ENABLE EVENTS"
ANSWER=`receive`
if [ "$ANSWER" != "READY" ]; then
kill -KILL $$
fi
#---------------- Инициализация и установка выходного устройства ----------------
#---------------------------------- Звоним --------------------------------------
echo "Набор"
send "DIAL $1"
echo "Получение результатов набора"
ANSWER=`receive`
if [ "$ANSWER" != "DIALING" ]; then
kill -KILL $$
fi
echo "$ANSWER"
echo "Проверка на готовность"
ANSWER=`receive`
if [ "$ANSWER" != "READY" ]; then
echo "ERROR: $ANSWER, aborting"
exit 99
fi
echo "$ANSWER"
echo "Звонок окончен"
#---------------------------------- Звоним --------------------------------------
#---------------------------------- Ждём пока чуаак возьмёт трубку --------------------------------------
echo "Ожидание"
send "WAIT 3600"
echo "Запрос на проверку ожидания"
ANSWER=`receive`
echo "Проверка"
if [ "$ANSWER" != "WAITING" ]; then
kill -KILL $$
fi
echo "$ANSWER"
echo "Цикл пошёл!"
while true; do
echo "Запрос на EVENTS внутри цикла"
ANSWER=`receive`
echo "Показуха"
echo "$ANSWER"
case $ANSWER in
LOOP_BREAK) break;;
BUSY_TONE) send "STOP"; receive; send "GOODBYE";receive; exit 0;kill -PIPE $VOICE_PID;;
esac
done
send "STOP"
ANSWER=`receive`
if [ "$ANSWER" != "READY" ]; then
echo "Could not stop waiting"
exit 99
fi
---------------------------------- Ждём пока чуаак возьмёт трубку --------------------------------------
#---------------------------------- Вырубаем функции --------------------------------------
#send "DISABLE EVENTS"
#ANSWER=`receive`
#if [ "$ANSWER" != "READY" ]; then
# kill -KILL $$
#fi
#---------------------------------- Вырубаем функции --------------------------------------
echo "Let's play"
#---------------- Проигрыш сообщения --------------------------------------------
send "PLAY $2"
ANSWER=`receive`
if [ "$ANSWER" != "PLAYING" ]; then
kill -KILL $$
fi
ANSWER=`receive`
if [ "$ANSWER" != "READY" ]; then
kill -KILL $$
fi
#---------------- Проигрыш сообщения --------------------------------------------
#---------------- Закрытие shell --------------------------------------------
send "GOODBYE"
ANSWER=`receive`
if [ "$ANSWER" != "GOODBYE SHELL" ]; then
kill -KILL $$
fi
#---------------- Закрытие shell --------------------------------------------
echo "OK: message send"
exit 0
Linux+Vgetty+/dev/hands = Voicemail --- Ай хав ТраблZ (Не получается отследить Loop_break DIAL_TONE при доздвоне.)
Модератор: Модераторы разделов