lavariega.com

Mi espacio de notas, hablo de Tecnología.
auditar grabaciones de issabel linux

Auditar Issabel PBX para saber si está grabando llamadas

En este post voy a explicar cómo auditar un servidor Issabel PBX para confirmar si las llamadas están siendo grabadas correctamente. Es una especie de auditaría a las grabaciones en Issabel PBX La idea es revisar tres puntos principales:

  1. Grabación en extensiones SIP.
  2. Grabación en colas.
  3. Grabación en grupos de timbrado o Ring Groups.
  4. Validación final con archivos reales de audio.

Este procedimiento es útil cuando queremos confirmar si Issabel realmente está generando grabaciones, especialmente después de una migración, cambios en el dialplan, ajustes de Call Recording o modificaciones desde la interfaz web.


Escenario de ejemplo

Para este ejemplo vamos a usar los siguientes rangos:

Extensiones: 1001 a 1200
Colas:       2001 a 2020
Grupos:      3001 a 3020

El objetivo es comprobar que esos elementos estén configurados para grabar llamadas.


1. Verificar grabaciones en Issabel

En algunas versiones de Issabel o FreePBX, la grabación de extensiones no se encuentra directamente en la tabla users de MySQL/MariaDB. Aunque exista el campo recording, puede estar vacío.

La configuración real puede estar en la AstDB de Asterisk, bajo la familia AMPUSER.

Para revisar una extensión específica:

asterisk -rx "database show AMPUSER/1001"

Hay que buscar valores como estos:

/AMPUSER/1001/recording/in/external   : always
/AMPUSER/1001/recording/out/external  : always
/AMPUSER/1001/recording/in/internal   : always
/AMPUSER/1001/recording/out/internal  : always
/AMPUSER/1001/recording/ondemand      : disabled
/AMPUSER/1001/recording/priority      : 10

Significado:

recording/in/external   = llamadas entrantes externas
recording/out/external  = llamadas salientes externas
recording/in/internal   = llamadas entrantes internas
recording/out/internal  = llamadas salientes internas

Si todas están en always, la extensión está configurada para grabar siempre.

La línea recording/ondemand : disabled indica que la grabación bajo demanda está desactivada para esa extensión, es decir, el usuario no puede iniciar o detener manualmente la grabación durante una llamada usando un código o botón.


2. Auditar todas las extensiones de un rango

Para revisar todas las extensiones del rango 1001 a 1200, podemos usar:

for ext in $(seq 1001 1200); do
  echo "===== EXTENSION $ext ====="
  asterisk -rx "database show AMPUSER/$ext" | egrep "recording/in/external|recording/out/external|recording/in/internal|recording/out/internal|recording/ondemand|recording/priority"
done

Esto mostrará la configuración de grabación de cada extensión.

Para detectar extensiones que no estén en always, se puede usar:

for ext in $(seq 1001 1200); do
  in_ext=$(asterisk -rx "database get AMPUSER/$ext recording/in/external" 2>/dev/null | awk -F': ' '{print $2}' | xargs)
  out_ext=$(asterisk -rx "database get AMPUSER/$ext recording/out/external" 2>/dev/null | awk -F': ' '{print $2}' | xargs)
  in_int=$(asterisk -rx "database get AMPUSER/$ext recording/in/internal" 2>/dev/null | awk -F': ' '{print $2}' | xargs)
  out_int=$(asterisk -rx "database get AMPUSER/$ext recording/out/internal" 2>/dev/null | awk -F': ' '{print $2}' | xargs)

  if [ "$in_ext" != "always" ] || [ "$out_ext" != "always" ] || [ "$in_int" != "always" ] || [ "$out_int" != "always" ]; then
    echo "$ext | in_external=$in_ext | out_external=$out_ext | in_internal=$in_int | out_internal=$out_int"
  fi
done

Si este comando no devuelve resultados, significa que todas las extensiones del rango están configuradas para grabar siempre.


3. Verificar grabación de colas en Issabel

Las colas se revisan en la base de datos asterisk, principalmente en estas tablas:

queues_config
queues_details

En algunas instalaciones, la grabación de colas no se valida con queues_config.monitor_type, sino con los parámetros dentro de queues_details.

Para revisar las colas del rango 2001 a 2020:

USE asterisk;

SELECT
    qc.extension AS cola,
    qc.descr AS nombre_cola,
    MAX(CASE WHEN qd.keyword = 'monitor-format' THEN qd.data END) AS formato_grabacion,
    MAX(CASE WHEN qd.keyword = 'monitor-join' THEN qd.data END) AS incluir_tiempo_espera
FROM queues_config qc
LEFT JOIN queues_details qd
    ON qd.id = qc.extension
WHERE qc.extension BETWEEN '2001' AND '2020'
GROUP BY qc.extension, qc.descr
ORDER BY qc.extension;

Resultado esperado:

formato_grabacion      = gsm, wav o wav49
incluir_tiempo_espera  = yes

Por ejemplo:

monitor-format = gsm
monitor-join   = yes

Esto indica que la cola tiene grabación activa y que la grabación incluye el tiempo en espera.


4. Detectar colas sin grabación

Para encontrar colas del rango 2001 a 2020 que no tengan formato de grabación configurado:

SELECT
    qc.extension AS cola,
    qc.descr AS nombre_cola,
    MAX(CASE WHEN qd.keyword = 'monitor-format' THEN qd.data END) AS formato_grabacion,
    MAX(CASE WHEN qd.keyword = 'monitor-join' THEN qd.data END) AS incluir_tiempo_espera
FROM queues_config qc
LEFT JOIN queues_details qd
    ON qd.id = qc.extension
WHERE qc.extension BETWEEN '2001' AND '2020'
GROUP BY qc.extension, qc.descr
HAVING formato_grabacion IS NULL
    OR TRIM(formato_grabacion) = ''
    OR LOWER(TRIM(formato_grabacion)) = 'none'
ORDER BY qc.extension;

Si esta consulta no devuelve filas, las colas del rango tienen grabación configurada.


5. Verificar grabación de Ring Groups o grupos de timbrado

Los grupos de timbrado se revisan en la tabla:

ringgroups

Para auditar los grupos del rango 3001 a 3020:

USE asterisk;

SELECT
    grpnum AS grupo,
    description AS nombre_grupo,
    strategy AS estrategia,
    grptime AS tiempo_timbrado,
    recording AS grabacion,
    postdest AS destino_si_no_contesta
FROM ringgroups
WHERE grpnum BETWEEN '3001' AND '3020'
ORDER BY grpnum;

Resultado esperado:

recording = always

Si el grupo tiene recording = always, entonces el Ring Group está configurado para grabar siempre.


6. Detectar grupos sin grabación

Para encontrar grupos del rango 3001 a 3020 que no estén forzando grabación:

SELECT
    grpnum AS grupo,
    description AS nombre_grupo,
    recording AS grabacion
FROM ringgroups
WHERE grpnum BETWEEN '3001' AND '3020'
  AND (
      recording IS NULL
      OR TRIM(recording) = ''
      OR LOWER(TRIM(recording)) IN ('dontcare', 'never', 'no', 'disabled')
  )
ORDER BY grpnum;

Si esta consulta no devuelve registros, los grupos del rango están configurados para grabar.


7. Verificar rutas entrantes hacia un grupo

Si queremos saber si una llamada entrante cae directamente a un grupo, podemos revisar la tabla incoming.

Ejemplo para buscar entradas hacia los grupos 3001 a 3020:

SELECT
    extension AS did,
    cidnum,
    description AS ruta_entrante,
    destination AS destino
FROM incoming
WHERE destination REGEXP 'ext-group,(300[1-9]|301[0-9]|3020),1'
ORDER BY extension;

Un destino típico hacia Ring Group se ve así:

ext-group,3001,1

Esto significa que la ruta entrante manda la llamada directamente al grupo 3001.


8. Validar grabaciones reales en el sistema

Después de revisar la configuración, lo más importante es validar con llamadas reales.

La ubicación típica de grabaciones en Issabel/Asterisk es:

/var/spool/asterisk/monitor/

Para buscar grabaciones generadas en las últimas 24 horas:

find /var/spool/asterisk/monitor/ -type f -mtime -1

Para verlas ordenadas por fecha:

find /var/spool/asterisk/monitor/ -type f -mtime -1 -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort

También se puede revisar el CDR:

USE asteriskcdrdb;

SELECT
    calldate,
    src,
    dst,
    dcontext,
    lastapp,
    lastdata,
    disposition,
    duration,
    billsec,
    recordingfile
FROM cdr
WHERE calldate >= NOW() - INTERVAL 1 DAY
ORDER BY calldate DESC
LIMIT 50;

Si el campo recordingfile aparece con nombre de archivo y el audio existe en /var/spool/asterisk/monitor/, la grabación fue generada correctamente.


9. Verificación en tiempo real desde Asterisk CLI

Para observar una llamada en vivo:

asterisk -rvvvvv

Durante la llamada, busca líneas relacionadas con:

MixMonitor
Dial
Queue
ext-group
from-trunk

Por ejemplo:

MixMonitor(...)
Goto(...,ext-group,3001,1)
Dial(SIP/1001&SIP/1002...)

MixMonitor es una señal clara de que Asterisk está ejecutando grabación.


Resumen de auditoría

Para confirmar que Issabel está grabando llamadas, hay que validar:

Extensiones:
AstDB AMPUSER/<ext>/recording/* = always

Colas:
queues_details.monitor-format = gsm, wav o wav49
queues_details.monitor-join = yes

Grupos:
ringgroups.recording = always

Rutas entrantes:
incoming.destination apunta al IVR, cola o grupo correcto

Prueba real:
Existen archivos en /var/spool/asterisk/monitor/
CDR muestra recordingfile

Conclusión

Auditar grabaciones en Issabel PBX no siempre se limita a revisar una sola tabla de MySQL. Dependiendo del módulo, la configuración puede estar en diferentes lugares:

Extensiones  → AstDB AMPUSER
Colas        → queues_details
Ring Groups  → ringgroups
Entrantes    → incoming
Audios       → /var/spool/asterisk/monitor/

Por eso, la mejor práctica es revisar configuración y después hacer llamadas reales de prueba para confirmar que los archivos de audio se están generando correctamente. Pues bien! hemos terminado de auditar grabaciones en Issabel PBX.

Este procedimiento ayuda a validar si Issabel está grabando llamadas entrantes, llamadas salientes, llamadas internas, llamadas por cola y llamadas dirigidas a grupos de timbrado.
Saludos!!!

Deja un comentario

No se publicará tu dirección de correo electrónico. Los campos obligatorios están marcados con *.

*
*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Apasionado de las tecnologías VoIP, Linux


aprendizaje asterisk audio brew call center Centos cli codecs comandos contraseñas desarrollo de software enfermedad Firewall free GNU google grandstream gratis internet Issabel ivr lavariega libros linux mac manuales Maquina Virtual marcacion mexico networking OpenSource raspberry rtp seguridad SIP sofphone sox ssh sysadmin telefonia tips ubuntu vim VirtualBox voip