📌 Resumen
Durante pruebas en entorno productivo de Issabel PBX se identificaron múltiples problemas en el dialplan de Asterisk, incluyendo:
warnings por contextos duplicados
includes a contextos inexistentes
uso de patrones no recomendados
errores en scripts AGI
Estos problemas afectan la limpieza del sistema, generan ruido en logs y pueden causar comportamientos inesperados.
🧪 Entorno
Issabel PBX: (indicar versión)
Asterisk: 18.x
Sistema operativo: (ej. Rocky Linux)
Tipo de instalación: estándar
🐛 1. Contextos duplicados en dialplan
🔍 Problema
Se presentan warnings como:
context already included
already in use
Ejemplos:
app-cf-off
app-cf-on
app-cf-toggle
macro-hangupcall
macro-outisbusy
💥 Causa
Los mismos contextos están definidos en múltiples archivos:
/etc/asterisk/extensions_additional.conf (autogenerado)
/etc/asterisk/extensions_override_*.conf (manual)
✅ Solución aplicada
Se eliminaron definiciones duplicadas en archivos override:
/etc/asterisk/extensions_override_fop2.conf
/etc/asterisk/extensions_override_issabel.conf
🎯 Resultado
eliminación de conflictos en dialplan
carga limpia de contextos
mejora en estabilidad
🐛 2. Includes a contextos inexistentes
🔍 Problema
tries to include nonexistent context
Ejemplos detectados:
ext-injections
grps
ext-did-post-custom
ext-bosssecretary
ext-did-0001
💥 Causa
Issabel incluye contextos opcionales que no existen por defecto.
✅ Solución aplicada
Se crearon contextos vacíos en:
/etc/asterisk/extensions_custom.conf
Ejemplo:
[ext-injections]
[grps]
[ext-did-post-custom]
[ext-bosssecretary]
[ext-did-0001]
🎯 Resultado
eliminación de warnings
dialplan limpio
mayor estabilidad al recargar
🐛 3. Uso del patrón _ . en extensiones
🔍 Problema
The use of '_.' is strongly discouraged
💥 Causa
Uso del patrón:
exten => _.
✅ Solución aplicada
Se modificó en:
/etc/asterisk/extensions.conf
Cambio:
- exten => _X.
🎯 Resultado
eliminación de warnings
mejores prácticas en dialplan
mayor control de patrones
🐛 4. Error en script AGI (trunkbalance.php)
🔍 Problema
Unknown database type: mysqli
Unable to connect to database
💥 Causa
Script AGI no soporta mysqli.
📍 Archivos afectados
/var/lib/asterisk/agi-bin/sqltrunkbal.php
/var/lib/asterisk/agi-bin/sql.php
✅ Solución aplicada
if ($db_type == 'mysql' || $db_type == 'mysqli')
🎯 Resultado
ejecución correcta del AGI
eliminación de errores de conexión
funcionamiento normal de lógica de trunk
🐛 5. Validación del flujo de llamadas
🔍 Verificación
Se confirmó correcto funcionamiento del flujo:
macro-dialout-trunk
ejecución de AGI
salida por trunk
🎯 Resultado
llamadas salientes funcionando correctamente
sin errores en ejecución de macros
🐛 6. Limpieza general del dialplan
🔍 Estado inicial
múltiples warnings
conflictos de contextos
includes inválidos
✅ Estado final
pbx_config successfully loaded XXX contexts
🎯 Resultado
sin errores críticos
warnings reducidos al mínimo
dialplan estable
💡 Recomendación
evitar mostrar credenciales en logs
mejorar sanitización de salida
🚀 Recomendaciones generales
validar duplicados automáticamente en overrides
evitar includes a contextos inexistentes
actualizar scripts AGI a estándares actuales (mysqli / PDO)
eliminar uso de funciones obsoletas
mejorar validación del dialplan antes de cargar
🏁 Conclusión
Las correcciones aplicadas permiten:
✔ eliminación de errores en consola Asterisk
✔ reducción significativa de warnings
✔ mayor estabilidad del dialplan
✔ compatibilidad con entornos modernos
📌 Resumen
Durante pruebas en entorno productivo de Issabel PBX se identificaron múltiples problemas en el dialplan de Asterisk, incluyendo:
warnings por contextos duplicados
includes a contextos inexistentes
uso de patrones no recomendados
errores en scripts AGI
Estos problemas afectan la limpieza del sistema, generan ruido en logs y pueden causar comportamientos inesperados.
🧪 Entorno
Issabel PBX: (indicar versión)
Asterisk: 18.x
Sistema operativo: (ej. Rocky Linux)
Tipo de instalación: estándar
🐛 1. Contextos duplicados en dialplan
🔍 Problema
Se presentan warnings como:
context already included
already in use
Ejemplos:
app-cf-off
app-cf-on
app-cf-toggle
macro-hangupcall
macro-outisbusy
💥 Causa
Los mismos contextos están definidos en múltiples archivos:
/etc/asterisk/extensions_additional.conf (autogenerado)
/etc/asterisk/extensions_override_*.conf (manual)
✅ Solución aplicada
Se eliminaron definiciones duplicadas en archivos override:
/etc/asterisk/extensions_override_fop2.conf
/etc/asterisk/extensions_override_issabel.conf
🎯 Resultado
eliminación de conflictos en dialplan
carga limpia de contextos
mejora en estabilidad
🐛 2. Includes a contextos inexistentes
🔍 Problema
tries to include nonexistent context
Ejemplos detectados:
ext-injections
grps
ext-did-post-custom
ext-bosssecretary
ext-did-0001
💥 Causa
Issabel incluye contextos opcionales que no existen por defecto.
✅ Solución aplicada
Se crearon contextos vacíos en:
/etc/asterisk/extensions_custom.conf
Ejemplo:
[ext-injections]
[grps]
[ext-did-post-custom]
[ext-bosssecretary]
[ext-did-0001]
🎯 Resultado
eliminación de warnings
dialplan limpio
mayor estabilidad al recargar
🐛 3. Uso del patrón _ . en extensiones
🔍 Problema
The use of '_.' is strongly discouraged
💥 Causa
Uso del patrón:
exten => _.
✅ Solución aplicada
Se modificó en:
/etc/asterisk/extensions.conf
Cambio:
🎯 Resultado
eliminación de warnings
mejores prácticas en dialplan
mayor control de patrones
🐛 4. Error en script AGI (trunkbalance.php)
🔍 Problema
Unknown database type: mysqli
Unable to connect to database
💥 Causa
Script AGI no soporta mysqli.
📍 Archivos afectados
/var/lib/asterisk/agi-bin/sqltrunkbal.php
/var/lib/asterisk/agi-bin/sql.php
✅ Solución aplicada
if ($db_type == 'mysql' || $db_type == 'mysqli')
🎯 Resultado
ejecución correcta del AGI
eliminación de errores de conexión
funcionamiento normal de lógica de trunk
🐛 5. Validación del flujo de llamadas
🔍 Verificación
Se confirmó correcto funcionamiento del flujo:
macro-dialout-trunk
ejecución de AGI
salida por trunk
🎯 Resultado
llamadas salientes funcionando correctamente
sin errores en ejecución de macros
🐛 6. Limpieza general del dialplan
🔍 Estado inicial
múltiples warnings
conflictos de contextos
includes inválidos
✅ Estado final
pbx_config successfully loaded XXX contexts
🎯 Resultado
sin errores críticos
warnings reducidos al mínimo
dialplan estable
💡 Recomendación
evitar mostrar credenciales en logs
mejorar sanitización de salida
🚀 Recomendaciones generales
validar duplicados automáticamente en overrides
evitar includes a contextos inexistentes
actualizar scripts AGI a estándares actuales (mysqli / PDO)
eliminar uso de funciones obsoletas
mejorar validación del dialplan antes de cargar
🏁 Conclusión
Las correcciones aplicadas permiten:
✔ eliminación de errores en consola Asterisk
✔ reducción significativa de warnings
✔ mayor estabilidad del dialplan
✔ compatibilidad con entornos modernos