Hola!
Estaba buscando un contestador..lo encontre.. tal vez a alguien le interese.
saludos


Proyecto del contestador telef�nico customizado


*Introducci�n:*

Una alternativa divertida para crear un contestador telef�nico con voice mail es utilizar un programa creado por Niccolo Rigacci llamado voice ( http://metalab.unc.edu//pub/Linux/apps/serialcomm/modem/ <http://metalab.unc.edu/pub/Linux/apps/serialcomm/modem/> o http://sunsite.unc.edu/).
A diferencia del mgetty y otros tantos programas este tiene la ventaja de estar desarrollado casi �ntegramente en el lenguaje del shell bash. Lo que el autor hizo fue crear un programa en C llamado vmcp (Voice M�dem Control Program) que se utiliza para comunicarse con el m�dem. Por medio de ese programa uno puede enviar comandos AT y esperar resultados del m�dem. M�s importante aun es que ese programa se encarga de manejar todo el tema de los famosos c�digos de escape DLE que utilizan los modems voice.
Para quienes no sepan en que consisten estos c�digos haremos una pausa para explicarlos.
*/C�digos de escape DLE:/*
Cuando uno pone al m�dem en modo voice y atiende una llamada son varias las cosas que se pueden recibir del m�dem:
- los tonos DTMF de n�meros discados en el otro lado del tel�fono,
- la agradable voz de alguna persona,
- tono de fax o
- un silencio indicativo de que podr�an estar llamando con una computadora y esperan recibir tono de m�dem.


En la tabla de caracteres ASCII el c�digo 10 hexa corresponde a un car�cter de control llamado */DLE./* Los modems de voice mail acostumbran enviar este c�digo para informar de estos distintos eventos. (tambi�n depende mucho de la configuraci�n del m�dem en ese momento). Cuando reciben c�digos */DTMF /*env�an un car�cter */DLE/* y luego el c�digo */DTMF/* recibido. Cuando est�n programados para grabar sonidos tambi�n reciben un c�digo */DLE/* acompa�ado de todos los datos del sampleado asegur�ndose de que el c�digo 10 hexa (*/DLE/*) sea "escapado" del sample para no provocar problemas. De similar manera uno puede enviar al m�dem datos para que reproduzca un mensaje y debe asegurarse de controlar correctamente los DLE.
Muchos de estos eventos pueden suceder en modo simultaneo, es decir que uno podr�a estar reproduciendo un mensaje mientras graba otro y a la vez analiza posibles tonos */DTMF/* de la persona que esta hablando en el otro lado. Bien, para manejar un m�dem voice hay que conocer unos cuantos comandos AT dado que hay que setear varias cosas.
Antes de grabar un mensaje uno debe configurar la fuente de grabaci�n (l�nea telef�nica, tel�fono conectado al m�dem o entrada de line-in del m�dem por ejemplos). Tambi�n algunos modems disponen de varias configuraciones para compresi�n de datos o velocidades de sampleo, tambi�n se configura el volumen de grabaci�n para detectar silencios. En caso de l�neas un poco ruidosas esto ultimo podr�a ser importante para que la maquina no confunda un ruido de la l�nea y lo grabe cuando la persona en realidad no quiso dejar mensaje. Lo bueno del sistema de Niccolo es que sus programas est�n muy comentarizados y el c�digo es muy f�cil de entender lo cual nos permite hacerle numerosas adaptaciones......


Adaptaci�n 1:

       Soporte de CALLER-ID :
       Hacer tal cosa es b�stente f�cil. Para ello les dir� que el
       comando a enviar para habilitar la recepci�n del caller-id por
       parte del m�dem es: */AT#CID=1/*
       Habiendo habilitado esto en el m�dem luego de recibir el primer
       ring se reportaran varios renglones de informaci�n que suenan
       mas o menos as�: */DATE=la fecha TIME=la hora NMBR=el n�mero
       telef�nico./*
       El programa de shell que hay que modificar se llama */ans/* y el
       c�digo que le agregue es el que sigue a continuaci�n (antes les
       dir� que yo no soy tan prolijo como Niccolo y mi c�digo es
       bastante mejorable)

# Aca sistema de obtencion de datos de lo del CALLER-ID
$VMCP -c"AT#CID=1" -wOK $VMCP -l$LOCK -wRING -t0 > /tmp/caller-id.txt
$VMCP -o /tmp/caller-id.txt -wRING -t10
cat /tmp/caller-id.txt >> /usr/adm/caller-id.log
CALLERID=`grep -e NMBR < /tmp/caller-id.txt | (read a a b ; echo $b)`
rm /tmp/caller-id.txt
echo '**************** Caller ID : $CALLERID'
/usr/local/bin/reportar.sh $CALLERID &
#-----------------------------------


       Todo este c�digo lo puse en reemplazo de la l�nea que dec�a:
       */$VMCP -l$LOCK -wRING -t0 /*y que estaba en la rutina
       */wait_rings()/*casi al principio luego de donde dice reset_modem.
       Como podr�n observar uso el programa */vmcp/* para capturar los
       datos del caller-id a un archivo temporal y luego extraigo el
       n�mero telef�nico para ejecutar un programa m�o llamado
       reportar.sh.
       Les dir� que mi programa reportar.sh lo que hace es comparar el
       n�mero telef�nico con algunos que tengo almacenados y luego por
       una voz sintetizada reproduce alg�n mensaje especial o
       sencillamente dicta el n�mero en la placa de sonido.
       En cualquier momento mejoro el sistema incorporando la gu�a
       telef�nica completa en mi servidor SQL o algo por el estilo. Se
       imaginaran que el tema da para mas as� que quedara para otro
       momento. Bueno el n�mero telef�nico lo dejo en la variable
       CALLERID porque nos ser� �til en otras posibles adaptaciones del
       programa...

Adaptaci�n 2.

           Convertir los mensajes grabados en mails. Dado que mi esposa
       contesta la mensajer�a de un sitio que mantenemos en Internet
       (http://www.manes.com.ar/) ella chequea el mail todos los d�as y
       el ideal para nuestro caso seria que los mensajes del
       contestador telef�nico estuvieran all� tambi�n como mails. Para
       eso se necesitan algunos programas mas y pueden ser necesarias
       adaptaciones de acuerdo al m�dem que uno tenga. Cuando uno usa
       el programa de Niccolo no es demasiado importante el formato que
       utilice el m�dem para samplear las grabaciones dado que los
       mensajes se graban y reproducen con el mismo m�dem. En mi caso
       tenia a mi disposici�n un m�dem de UsRobotics y me las tuve que
       ingeniar un poco. Encontr� que en los fuentes del mgetty
       (disponible en Sunsite y en varios CDs de Linux) en el
       subdirectorio pvftools del subdirectorio voice hay un programa
       que transforma los samples de modems */Voice UsRobotics/* en un
       formato de sonido compactado llamado */gsm/*. Observando los
       fuentes vi que el formato de UsRobotics deber�a tener una
       cabecera de varios bytes que el programa por suerte no emplea.
       Como el programa */vmcp/* no genera esa cabecera dado que toma
       los datos como vienen del m�dem hay que inventarla o tocar los
       fuentes del programa conversor (*/usrgsm.c/*).
           Aun debemos convertir de ese formato a algo mas conocido y
       para eso hay que utilizar un utilitario llamado */tcat/* que
       vienen en un paquete llamado gsm (tambi�n se consigue en Sunsite
       o en los CD en un subdirectorio utils/compress ).
           Como este ultimo programa solo lo descomprime falta darle el
       toque final para que quede en alg�n formato conocido y esto
       ultimo lo hago con el */sox /*( Sunsite o los CDs). Para generar
       el mail atachandole el archivo de sonido utilizo un programa
       llamado */mpack/* que hace lo propio y se consigue en Sunsite o
       los CDs.
       Como ya he terminado les mando el c�digo que agregue:

if [ -e $FNAME ]
then
DAT=$($DATE +'mensaje del %d/%m/%y a las %H:%M:%S TEL '+$CALLERID)
WAV=/tmp/jnewmsg$$.au
(echo 1234567890123456789012345678903 ; cat $FNAME) | usrgsm | tcat | sox -t ul -r 8000 - -t au - > $WAV
mpack -s "$DAT" $WAV $MAILTO
rm $WAV
fi


Esto lo puse en la rutina voice_call luego del CASE que
discrimina llamadas Voice, fax y data. No se dejen enga�ar
porque a una de mis variables la llame WAV pues el formato del
archivo que genero es .au que a m� me gusta mas. Prestar
atenci�n a que los programas est�n en el path. Si se deciden a
poner el programa 'ans' en el archivo /etc/inittab con una l�nea
como:
*/a1:1235:respawn:/usr/local/bin/ans >/dev/null 2>/dev/null/*
puede suceder que alg�n programa que resida en /usr/local/bin no
se encuentre en el path de ese proceso . Por esa raz�n yo
agregue la l�nea: */PATH=$PATH:/usr/local/bin /*en el programa
*/ans/* al comienzo . En un primer momento hab�a intentado poner
los paths completos cuando referenci� a los ejecutables pero eso
no funciono por la siguiente raz�n:
Algunos programas tienen la costumbre de realizar varias
funciones de acuerdo a cual sea el nombre de su propio
ejecutable. En los unixes con el comando link uno puede
f�cilmente darle varios nombres al mismo archivo y en algunas
ocasiones los programas testean su propio nombre para saber que
es lo que deben hacer. Si el testeo no esta muy bien hecho al
dar el path completo del ejecutable el programa ya no quiere andar.


       Otras adaptaciones:
               Ya pueden imaginarse que con el soporte de caller-id y
       al tener el n�mero de origen almacenado en una variable surgen
       numerosas posibilidades...

Sin necesidad de armar un programa reportar.sh como el m�o con s�ntesis de voz no es mala idea grabar algunos mensajes customizados para distintos posibles llamadores y mandarlos a reproducir con un case que testee esos n�meros telef�nicos. Tambi�n se puede programar que si la llamada proviene de ciertos n�meros telef�nicos la maquina de directamente tono de datos o de fax o ejecute programas especiales. Yo a veces me siento tentado a desconectar la campanilla del tel�fono y dejar que la computadora me avise y me filtre los llamados.

Autor: Jorge Luis Chamorro
Fecha: Diciembre de 1998







_______________________________________________
Lugro mailing list
[EMAIL PROTECTED]
http://www.lugro.org.ar/mailman/listinfo/lugro

Responder a