Buzones de Voz
Formatear Esta página necesita ser editada para cumplir los requisitos del wiki. Puedes revisar todas las páginas sin suficiente formato en este enlace. |
To Do Esta página necesita ser completada. Puedes revisar todas las páginas por completar en este enlace. |
Asterisk provee de un sistema de buzón de voz bastante completo, como una aplicación especifica, cuyo modulo es llamado app_voicemail.so. Además existe una función asociada bajo el modulo func_vmcount.so para saber el número de mensajes que contiene un buzón específico como podremos ver ampliado en el apartado de Funciones
Sumario
Conceptos Generales
Los buzones de voz, son, equivalentes al correo electrónico para almacenar correos de texto, pero alojados en nuestra máquina Asterisk, se encargan de alojar mensajes de voz o de audio. Asterisk concibe dos mecanismos para operar con ellos:
- A través de un menú implícito a Asterisk, que nos permite una serie de funciones como la lectura, manipulación y destrucción de los mensajes una vez accedido al mismo
- A través de redirecciones al correo electrónico. Los mensajes se almacenan como archivos de audio, y es posible adaptar el sistema para que los reenvíe a nuestro correo electrónico para ser escuchados a voluntad, y que sean eliminados (o no) de nuestro buzón particular.
- A través de un sistema de almacenamiento especifico, sea servidor SQL, servidor IMAP o incluso algo menos común sincronizaciones con servidor específicos de Buzones de Voz compatibles.
El problema de los buzones de voz, es la cuestión del espacio que ocupan los nuevos archivos de audio algo que debe ser previsto (se pueden aplicar limites por ejemplo). Por tanto en determinadas situaciones el segundo enfoque puede ser determinista a la hora de montar este sistema.
Configuración Básica
Toda la configuración del sistema de los buzones de voz, gira en torno al fichero voicemail.conf dentro del directorio por defecto de configuraciones /etc/asterisk/.
El fichero se estructura por contextos parecido a cualquier fichero de configuración de protocolos como el de SIP y el de IAX.
Para poner en marcha un sistema de buzones de voz sencillo, solo es necesario configurar un contexto al que hacen referencia ciertos buzones, y algún buzón en concreto que hayamos asociado a algún dispositivo. Una vez hecho esto, solo necesitaríamos utilizar las aplicaciones dentro del Dialplan para afectar al entorno del buzón en concreto.
Esto puede verse en el siguiente ejemplo:
11 =>1234,John Doe
Solo con esto, hemos definido el buzón número 11 para el dispositivo que la asocio (recordemos el parámetro especifico mailbox de SIP e IAX), con una contraseña de acceso, "1234", y aparte, hemos definido que corresponderá al Sr. John Doe (como veremos más adelante, la mayoría de los buzones personales han de ser intransferibles como el correo electrónico por cuestiones de privacidad).
Configuración General
Es posible definir un contexto general [general] donde incluir una serie de características comunes a todos los buzones, y al funcionamiento del sistema de buzones de voz en General. Existen una serie de parámetros fundamentales que deberían ser considerados, y que comento a continuación. (La mayoria de las opciones son booleanas, YES o NO simplemente).
- Relacionados a la función de envío de e-mail:
- attach: Sirve para indicar si adjuntar o no el fichero de audio, en el caso que especifiquemos un e-mail para un buzón especifico. Por defecto esta función esta activada
- attachfmt: Formato al cual pasamos los ficheros que vamos a enviar por correo.
- serveremail: Dirección e-mail del remitente en caso que
- charset: Sistema de caracteres que utilizaremos para los mensajes.
- pbxskip: Para descartar una cabecera en el asunto de los mensajes enviados. La cabecera es simplemente [PBX]: puede resultar útil para identificarlos mejor en nuestra bandeja de entrada aunque por defecto la descarta
- fromstring: Para cambiar el remitente al enviar correos.
- emaildateformat: Formato de fecha del e-mail, siguiendo los parametros estandar de *NIX como establecidos en strftime.
- emailsubject: Configurar el asunto del e-mail
- emailbody: Configurar el cuerpo del e-mail.
- Para ambos existen una serie de variables que pueden ser prácticas a la hora de componer los mensajes como las siguientes:
- ${VM_MSGNUM}: Número identificador del mensaje recibido
- ${VM_MAILBOX}: Nombre del buzón de voz
- ${VM_NAME}: Nombre del usuario del buzón de voz
- ${VM_DUR}: Duración del mensaje
- ${VM_CALLERID}: Identificador del Remitente y Número de Teléfono (o extensión) que dejo el mensaje.
- ${VM_DATE}: Fecha que se recepcionó el mensaje
- ${VM_MESSAGEFILE}: Nombre del mensaje de audio referenciado.
- ${VM_CIDNUM}: Solo Número del remitente.
- ${VM_CIDNAME}: Solo el identificador del remitente (nombre).
- Relacionados al sistema de almacenamiento:
- format: Indicamos los Formatos admitidos en los que pueden ser almacenados los ficheros de audio. En caso de utilizar el sistema IMAP para gestionar los buzones de voz, solo se almacenarían en el primer tipo de formato.
- maxmsg: Numero máximo de mensajes que podemos contener en cada buzón. Útil para no saturar el sistema.
- backupdeleted: Cuando borramos un mensaje de audio, va a parar a un almacén temporal. Aquí especificamos el número de mensajes borrados que estamos dispuestos a almacenar como máximo. Cuando entre un nuevo mensaje, y la cola este llena, se irán borrando con el método FIFO (Primero en entrar, primero en salir).
- Relacionados a la operabilidad del sistema de grabación:
- maxsecs: Tiempo en segundos máximo que el remitente tiene para grabar su mensaje, también práctico para calcular en terminos absolutos el máximo de espacio que requeriríamos aproximadamente.
- minsecs: Tiempo mínimo en segundos para que el mensaje quede guardado en nuestro sistema, práctico para evitar mensajes vacíos.
- maxgreet: Tiempo máximo de grabación para el mensaje de bienvenida del buzón cuando ejecutamos la Aplicación Voicemail.
- maxsilence: Tiempo en segundos que debemos escuchar un silencio al final de una grabación para cortarla y evitar que siga grabando sin necesidad.
- silencethreshold: Umbral de sonido, para que sea considerado silencio. En este caso debemos probar distintas opciones, por defecto viene con 128 unidades. El tema es que en este sentido si nos quedamos cortos, podemos perder algunos mensajes por cuestiones en el volumen de la llamada del remitente, por ejemplo.
- Relacionados al sistema de gestión interno de Asterisk de Buzones de Voz (VoiceMailMain):
- skipms: Tiempo en milisegundos que podemos desplazarnos para adelante o para detrás, mientras escuchamos el mensaje de audio, por defecto intervalos de 3 segundos.
- maxlogin: Numero máximo de intentos de acceso antes que Asterisk cuelgue el canal.
- moveheard: Establece si automáticamente, movería los mensajes de voz escuchados, a una carpeta especial de "mensajes escuchados".
- externpasscheck: Llamamos a un programa cuando cambiamos la clave del buzón para comprobar si cumple unos requisitos mínimos de seguridad. En el directorio donde descargamos las fuentes de Asterisk, existe un subdirectorio llamado /contrib/script, y dentro de este, un script en Python que cumple este propósito por si queremos utilizarlo de ejemplo.
- usedirectory: Da la posibilidad de remitir los mensajes almacenados en el buzon a otros destinatarios de correo.
- messagewrap: Permitir modificar la posición de los mensajes en la lista de los buzones de voz a los usuarios.
- minpassword: Número de caracteres mínimos que debe tener el password del usuario.
- Teclas especificas de control:
- listen-control-forward: Tecla(s) para avanzar más rápido en el mensaje grabado. Por defecto #
- listen-control-reverse: Tecla(s) para ir hacia atrás en el mensaje grabado. Por defecto *
- listen-control-pause: Tecla(s) para pausar la reproducción de la grabación. Por defecto, 0
- listen-control-restart: Tecla(s) para reiniciar la reproducción de la grabación. Por defecto, 2
- listen-control-stop: Tecla(s) para parar la reproducción de la grabación. Por defecto el resto de las teclas de un teléfono.
- Otras configuraciones:
- userscontext: Contexto en el que se registran los usuarios por defecto, suele ser "default" por convenio.
- externnotify: En el momento que surja un evento en los buzones (recibir un mensaje nuevo, o consultar el buzón de voz) se ejecutaría una aplicación del sistema *NIX a voluntad nuestra especifica en este parámetro. Esto puede ser útil por ejemplo, para compartir información de mensajeria entre diferentes servidores con el sistema MWI [1]
- mailcmd: Podemos especificar que sistema de email vamos a utilizar en *NIX para enviar los mensajes.
Aplicación VoiceMailMain
Esta aplicación es tan sencilla como compleja, dado que para configurarla en el Dialplan, solo basta con seguir la siguiente sintaxis: VoiceMailMain(<nombre_buzon>@<contexto_buzon>).
La complejidad reside dentro del sistema de menús que esta aplicación ofrece para el usuario, que podría considerarse como un gestor de correo, en este caso de mensajes de voz, pero todo gestionado a traves del telefono, mediante menus contextuales de voz, y marcaciones del telefono para navegar a traves de los mismos.
Estructura del Menú
Mensajes de Audio
La Aplicación VoiceMailMain va lanzando mensajes en esencia, pistas de audio.
Los nombres de estas pistas, pueden ser configurables a traves del fichero de configuración del voicemail.conf. Los nombres de los mensajes por defecto son:
- vm-password: Mensaje que dice "Contraseña"
- vm-newpassword: Mensaje que dice "Por favor, introduce tu nueva contraseña, seguido de la tecla almohadilla"
- vm-passchanged: Mensaje que dice "Su contraseña ha sido modificada"
- vm-reenterpassword: Dice: "Por favor reintroduzca su contraseña seguida de la tecla almohadilla".
- vm-missmatch: Dice: "Las dos contraseñas no coinciden"
- vm-invalidpassword: Dice: "La contraseña es invalida, por favor introduzca mejor".
- vm-pls-try-again: Dice: "Por favor intentelo de nuevo".
- vm-prepend-timeout: Dice: "Y luego pulse almohadilla".
Contextos y Buzones Específicos
Podemos definir contextos para un grupo de buzones (util por ejemplo a efectos de la aplicación Directorio, o simplemente para tenerlos organizados.
Los contextos se especifican entre corchetes por ejemplo [ventas]
Dentro de los contextos, podemos crear los Buzones que necesitemos.
Sintaxis de un Buzón
La sintaxis básica se define de la siguiente forma, a partir de aquí todo es opcional
<nombre del buzon => <contraseña>
Si queremos dejar cualquier parámetro vacio, simplemente ponemos una coma en el hueco vacio, y seguimos adelante con el resto de los parametros que si nos interesen
<nombre del buzon> => <contraseña>,<nombre del usuario>,<direccion email>, <direccion del busca>, <opcion_1> [ | <opcion_N>]
- Los parámetros son bastante intuitivos, las opciones especificas podemos verlas a continuación
- La dirección del busca no es demasiado utilizada en nuestra comunidad local. Podríamos considerarla con dirección e-mail alternativa en un momento dado. Yo la he obviado por su falta de popularidad, pero también pueden especificarse parametros especificos cambiando "pager" donde pone "email" en las opciones generales.
Siguiendo con el ejemplo inicial un poco más sofisiticado:
Clásico ejemplo de buzón que reenvía todo al e-mail del usuario y luego deja limpio el buzón para que no se sature.
Nuevo Usuario
Se considera un nuevo buzon de usuario, cuando especificamos una contraseña exactamente igual que el nombre de buzón.
Contraseña no modificable
Si queremos que la contraseña no pueda modificarse desde el menú VoiceMailMain, basta con poner un guión delante de la misma.
Parámetros específicos de cada buzón
- Relacionados a la función de envío de e-mail:
- delete: Permitimos que tan pronto se envie el mensaje por correo, se autodestruya del servidor. Util junto a la opción "attach" para liberar espacio y utilizar el segundo metodo de gestión
- volgain: Aumenta el volumen del archivo generado para enviar por e-mail, utilizando la herramienta GNU sox. Por ejemplo: 1.0
- Relacionados a la operabilidad del sistema de grabación:
- review: Permitimos al remitente que pueda volver a escuchar su mensaje y editarlo una vez creado.
- operator: Introducimos una nueva extensión estándar en el DialPlan llamada o. En caso que permitamos esta opción, si el remitente pulsa el 0 durante la reproduccion o grabación de la aplicación VoiceMail, le mandará a esta extensión y supuestamente, lo pondrá en contacto con un Operador (si fuera el caso).
- Relacionados al sistema de gestión interno de Asterisk de Buzones de Voz (VoiceMailMain):
- saycid: Dice el Identificador del Remitente antes de escuchar el mensaje.
- sayduration: Dice el tiempo que dura el mensaje de voz.
- saydurantionm: Especifica el minimo tiempo en minutos para que merezca la pena decir el tiempo que dura el mensaje de voz.
- dialout: Contexto del Dialplan, por el cual saldrán las llamadas desde nuestro buzon de voz. Si existe un contexto especificado, se "abrira" una nueva opción en el menú para permitir esto. Podemos especificar simplemente, el contexto por el que salen nuestras llamadas generales.
- sendvoicemail: Permitir la posibilidad de crear mensajes de voz y enviarlos a otros buzones directamente desde el menú.
- searchcontext: Sirve para permitir la búsqueda de buzones por todos los contextos, o solo en el contexto en el que se encuentre el buzón que consultamos. Si queremos que sirva de algo, es importante en este caso que los nombres de buzones aun en diferentes contextos, se conserven diferentes.
- callback: Semejante al parametro dialout, pero en este caso permitir la posibilidad de marcar el número del remitente que dejo el mensaje.
- exitcontext: Si queremos que al salir del VoiceMailMain, entremos en nuevo contexto, por defecto seguimos en el mismo.
- envelope: Permitimos que se reproduzcan los mensajes de audio, referentes a la grabación de voz guardada en el buzón, previos a escuchar el mensaje en si.
- nextaftercmd: Permitir realizar marcaciones especificas, para guardar el mensaje con reproducción en curso (con el 9), o pasar el siguiente (con el 7).
- forcename: Forzamos a los nuevos usuarios, a la grabación de su nombre durante la configuración de su buzón de Voz.
- forcegreetings: Forzamos a los nuevos usuarios, a la grabación de su mensaje de bienvenida durante la configuración de su buzón de Voz.
- tempgreetwarn: Permite recordar al usuario del buzón que todavia utiliza el mensaje por defecto de bienvenida cuando accede a su buzón.
- Otros parámetros
- locale: Configuración de locale especifico de nuestro sistema. Entiendo que debe ser algo asi como es_ES.UTF-8 para la mayoría de los sistemas Españoles.
Protocolo SMDI
Existe un protocolo (Simplified Message Desk Interface) para poder enlazar teléfonos con un sistema especifico de Buzones de Voz. Es posible realizar una integración de este sistema de mensajería con nuestro sistema Asterisk. Este sistema es tan antiguo que trabaja a traves de un puerto Serie, aunque existen implementaciones especificas para hacerlo funcionar a través de un puerto TCP/IP.
El fichero de configuración especifico para el sistema SMDI de Asterisk es llamado smdi.conf y existe un módulo tipo recurso que gestiona esta interfaz res_smdi.so.
Aparte de toda la configuración especifica del fichero smdi.conf para su utilización autónoma, es posible establecer un tipo de "notificación" de mensajería entre los distintos tipos de mensajería (SDMI y los Buzones de Voz de Asterisk), aplicando dos parámetros generales:
- sdmienable: Sirve para activar esta funcionalidad de notificación
- sdmiport: Para indicar el puerto Serie a través del cual se establecerá esta funcionalidad
Directorio de Buzones de Voz
Existe una aplicación especifica llamada Directory encargada de poder llamar a un usuario, a través de su buzón de Voz. Esta basada en una función de muchas PBX llamada Dial-by-Name (marcar utilizando los nombres). En este caso al utilizar esta aplicación y llamar a la extensión que la ejecuta sigue el siguiente proceso:
- Ejecuta una pista de audio como mensaje de bienvenida
La configuración que atañe a este Directorio, se realiza a través de la configuración general de voicemail.conf:
- directoryintro: Especifica el nombre de la pista de audio, que utilizaremos como bienvenida
Hay una configuración especifica de los buzones:
- hidefromdir': Que sirve básicamente para sacar un buzón concreto de la búsqueda desde la aplicación Directory.
Almacenamiento en Bases de Datos
Es posible guardar la estructura de los buzones y los mensajes de voz en una base de datos SQL a través de un driver ODBC. Esto se consigue gracias al recurso ODBC (res_odbc.so), utilizado para múltiples funciones del sistema. Además sobra decir, guardarlo en una base de datos ayudaría para implementar servicios superiores relacionados a nuestro sistema de buzones de voz.
Existe un fichero de configuración llamado res_odbc.conf que gestiona la interfaz entre el sistema ODBC de nuestro sistema *NIX y Asterisk.
Los parametros de configuración para establecer la primera instancia de la configuración se realizan en el apartado general del voicemail.conf:
- odbcstorage: Indica el contenedor ODBC en el que se trasmitirá la información de los buzones de Voz.
- odbctable: La tabla por defecto asociada al sistema de base de datos.
Almacenamiento IMAP
Es posible también crear un sistema de almacenamiento con servidores IMAP clásicos como Dovecot o Cyrus. Toda la conexión de interfaz entre nuestro sistema de Buzones de Voz de Asterisk y el servidor IMAP se realizaría en una parte genérica de conexión con el servidor, en el apartado [general, y luego una parte de autentificación especifica de los buzones, dentro del contexto especifico de los mismos.
Para la parte genérica existen los siguientes parametros:
- imapfolder: Carpeta destino, donde iran a parar los mensajes de voz. Hay que considerar que eventualmente el servidor IMAP suele ser utilizado para funciones de almacenaje de correos electronicos, por lo que podemos señalar una carpeta dentro de la clásica ruta de destino (INBOX) por ejemplo, INBOX/BuzonVoz
- imapserver: En este caso si utilizamos un servidor IMAP en local, pues sería por defecto localhost, en caso que utilicemos un servidor IMAP remoto, señalamos el mismo.
- imapgreetings: Si queremos almacenar los mensajes de bienvenida de los buzones de voz, en el servidor IMAP, o mantenerlos en local. Por defecto se quedan en local.
- greetingsfolder: Si decimos que queremos almacenarlos en el servidor IMAP, concretamente en que directorio, por defecto INBOX.
- imapparentfolder: Hay que señalar cual es la carpeta principal del sistema IMAP ya que algunos servidores no utilizan la carpeta INBOX por defecto.
Mensajes para Zonas Horarias
Existe un apartado dentro del Dialplan aparte de los principales (general y contextos especificos de buzones), para definir algunos parametros acerca de las Zonas Horarias.
Definirlos es util por ejemplo, para señalar correctamente las marcas horarias en los distintos buzones de posibles usuarios a lo largo del mundo.
Existe un parámetro configurable específicos de cada buzón
- tz: La zona horaria por defecto. Por defecto es la americana central, conviene cambiarla por la europea (european). Aunque ya lo podremos definir en el apartado "zonemessages" correspondiente.
Los mensajes de las zonas horarias se definen en el apartado concreto [zonemessages]
Básicamente están estructurados según el sistema *NIX de zonas horarias, dentro del directorio /usr/share/zoneinfo. Si vamos a darle un uso exclusivo a este sistema a nivel nacional, por ejemplo, para el caso de España lo ideal sería configurar la "european" como:
european = Europe/Madrid|'vm-received' a d b 'digits/at' HM
Esto significa literalmente: Primero lanza el mensaje "vm-received" (Recibido) (dia de la semana) (dia del mes) (nombre del mes) "digits/at" (A las) (horas)(minutos), considerando la franja horaria de Madrid (CET+1/+2 en verano).
Referencias
- ↑ Message Waiting Indication, M. Daniel (2006)