Buzones de Voz

De Asterisk Wiki
Saltar a: navegación, buscar

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

Completo Sistema Voicemail de Asterisk

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:

Archivo: /etc/asterisk/voicemail.conf
[default]
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):
    • allowemptypw: Permite que no asignemos una contraseña a un buzón concreto en la configuración especifica de buzones.
    • 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_buzón>@<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 través del teléfono, mediante menús contextuales de voz, y marcaciones del telefono para navegar a traves de los mismos.

Estructura del Menú

Para conocer la estructura del menú lo correcto sería ejecutar la Aplicación VoiceMailMain e ir recorriendo las opciones manualmente.

En términos generales se estructura de la siguiente forma:

  1. Lectura de los mensajes del buzón
  2. Gestión de Carpetas del buzón
  3. Opciones avanzadas
  4. Opciones especificas del Buzón

* Ayuda # Salir del menú

Por regla general para volver atrás en las subopciones, hay que pulsar el asterisco.

Aplicación VoiceMail

Esta aplicación solo sirve para realizar la grabación del mensaje y el mecanismo para realizar esta grabación. Hay que considerar que en función de las opciones especificas en el voicemail.conf hará una cosa u otra (por ejemplo, el hecho de permitir regrabar un mensaje, o ponerse en contacto con la operadora).

La sintaxis es la siguiente: VoiceMail(<nombre_buzón>@<contexto>[&<nombre_buzón_N>@<contexto_N>],<opciones>)

  • Podemos pasar a varios buzones el mensaje
  • Las opciones son las siguientes
    • s: Elimina las instrucciones de bienvenida de los buzones
    • u: Dice el mensaje previo: "La persona del buzón <nombre_del_buzón> a la que ha llamado no esta disponible", después sigue con las instrucciones
    • b: Dice el mensaje previo: "La persona del buzón <nombre_del_buzón> a la que ha llamado esta ocupada", después sigue con las instrucciones
    • g(<numero>): Ajusta la ganancia en volumen del mensaje a grabar.

La b y la u se pueden combinar con la s, para evitar instrucciones.

Finalmente, sonara la pista beep.gsm, que podemos imaginar que reproduce.

Durante la grabación hay que considerar que es posible pulsar teclas, teniendo en cuenta que determinadas configuraciones se hayan realizado en el fichero correspondiente:

  • Pulsando el # paramos la grabación con el mensaje almacenado. No habría que esperar a que el silencio se produzca, colgando también se pararía
  • Pulsando el 2 (si esta habilitado) podríamos acceder a volver a escuchar nuestro mensaje guardado.
  • Pulsando el 3 (si esta habilitado) podríamos volver a escuchar el mensaje.
  • Pulsando el 0, accederiamos a la extensión de operadora (la o) si esta definida

Directorio de Almacenaje

Por defecto el directorio de almacenaje de los mensajes es /var/spool/asterisk/voicemail/<contexto>/<nombre_del_buzon>/INBOX/.

Con las distintas opciones de almacenaje que podremos ver en el siguiente articulo, esta serviría de puente en todos los casos.

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:

Archivo: /etc/asterisk/voicemail.conf
[default]
11 =>1234,John Doe,john@doe.com,,delete=yes|attach=yes


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:

  1. 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 parámetros:

  • imapfolder: Carpeta destino, donde irán a parar los mensajes de voz. Hay que considerar que eventualmente el servidor IMAP suele ser utilizado para funciones de almacenaje de correos electrónicos, 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.
  • imapport: El puerto del servidor IMAP.
  • 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.
  • pollmailboxes: Permitir comprobar los buzones de voz automáticamente.
  • pollfreq: Intervalo de chequeo todos los buzones de voz para agregar los mensajes al sistema IMAP
  • imapflag: Opciones especificas para el sistema IMAP, aquí podemos especificar opciones tales como el tipo de encriptación (SSL).

Finalmente hay dos parámetros específicos de los buzones para la autentificación:

  • authuser: Usuario del sistema IMAP
  • authpassword: Contraseña del sistema IMAP

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

  1. Message Waiting Indication, M. Daniel (2006)

Véase también

Enlaces Externos

  • Dovecot, pagina oficial de este servidor IMAP
  • Cyrus, servidor IMAP alternativo.