La versión 2.7.3 es una actualización grande: nueva licencia, una forma segura de actualizar el propio Asterisk sin reinstalar, TLS automático para WebRTC y una ampliación considerable de la API REST.
Licencia: el paso a GNU AGPL-3.0
PearlPBX2 ya no se distribuye bajo la PolyForm Shield License 1.0.0 — ahora es la GNU Affero General Public License v3.0-or-later, una licencia abierta reconocida por la OSI. Se elimina la restricción de uso competitivo; en su lugar rige el copyleft de uso en red: una versión modificada desplegada como servicio en red debe divulgarse a los usuarios de ese servicio. Para el análisis completo, consulta el post dedicado al cambio de licencia.
Actualizar Asterisk sin reinstalar: update-asterisk.sh
Antes de esta versión, cambiar asterisk_version en ansible/group_vars/all.yml no hacía nada
en un host ya instalado — el bloque de compilación del rol asterisk solo se ejecutaba si
/usr/sbin/asterisk no existía. El nuevo update-asterisk.sh (rol asterisk_update) cierra ese
hueco: hace copia de seguridad de /etc/asterisk, los binarios, los módulos y
/var/lib/asterisk en un directorio con marca de tiempo y un registro en state.json; compila
la nueva versión mientras el Asterisk actual sigue atendiendo llamadas; drena las llamadas
activas con cuidado (core stop gracefully, tiempo de espera configurable, --no-wait para una
parada inmediata); ejecuta solo make install, sin tocar la configuración, los sonidos, los
logs, el spool ni las grabaciones; y reinicia Asterisk y los servicios conectados a AMI,
verificando la versión tras el arranque. update-asterisk.sh --rollback restaura los binarios
anteriores desde la copia de seguridad, y -l/--list muestra el historial de actualizaciones.
Certificados TLS automáticos para WebRTC (wss)
El rol nginx ahora emite por sí mismo un certificado HTTPS/wss:// funcional durante la
instalación, sin pasos manuales, en tres niveles: si se indica un dominio (--domain), Let’s
Encrypt vía HTTP-01, certificado de 90 días con renovación estándar; si no hay dominio pero se
detecta una IPv4 pública, el certificado de IP de corta duración de Let’s Encrypt (6 días,
renovado cada 4 horas mediante un temporizador de systemd); si no hay ninguno de los dos
disponibles, un certificado autofirmado con un subjectAltName correcto (antes solo tenía CN,
que los navegadores modernos rechazan). install.sh y quickstart-install.sh incorporan las
opciones --domain/--email.
La API REST ya cubre casi todo el panel
Esta versión añade CRUD para recursos que antes solo se podían editar en el admin de Django:
contextos, extensiones y macros de dialplan (/api/v1/dialplan-*), dispositivos telefónicos con
un endpoint de aprovisionamiento (/api/v1/phone-devices/<id>/provision/), colas y agentes de
cola, tablas de enrutamiento, grupos de troncales, transportes SIP, peers SIP y usuarios SIP,
además de un envoltorio sobre Apply Changes (GET /api/v1/config/preview/, POST /api/v1/config/apply/ con un campo mode: "soft"|"hard" obligatorio, solo para superusuario).
Los campos secret/md5_cred/priv_key_file ahora se ocultan en las respuestas de listado
(GET .../ devuelve null) y solo se muestran al pedir un objeto concreto — esto cierra una
fuga de credenciales en las descargas masivas de listas.
Usuarios WebRTC de demostración desde el primer momento
seed_quickstart ahora crea un transporte transport-wss y diez usuarios
webrtcuser1–webrtcuser10 con contraseñas aleatorias — una instalación recién hecha ya tiene
cuentas funcionales para llamadas desde el navegador.
Cambios más pequeños, pero que se notan
install.sh/quickstart-install.shahora es completamente desatendido: el rol de firewall ya no se detiene a confirmar el puerto SSH detectado (antes eso podía colgar una ejecución sin TTY, por ejemplo conansible-pullo en CI) — el puerto ahora solo se registra en el log.- Los usuarios SIP de WebRTC recibían un contexto basado en su nombre de usuario, que nunca
existió realmente en
extensions.ael, así que las llamadas entrantes desde ellos no llegaban a ningún sitio; ahora usan la tabla de enrutamiento del usuario, igual que las cuentas SIP normales. - La validación HTTP-01 de Let’s Encrypt se rompía por la propia redirección HTTP → HTTPS del
servidor: una petición a
/.well-known/acme-challenge/también caía en elreturn 301, porque este se ejecutaba antes de la comparación de location. La redirección ahora está envuelta en un bloquelocation /. - A las instalaciones en Debian les faltaba el paquete
cron, así que las copias de seguridad y los informes diarios configurados por otros roles no tenían nada que los ejecutara — en Ubuntu funcionaba por casualidad, porque allícronsuele venir preinstalado. - Un nuevo
python manage.py mail_reportenvía a diario un correo con las llamadas más largas del día anterior, con enlaces a las grabaciones, aMAIL_REPORT_RECIPIENTS. - El validador de dialplan AEL ahora comprueba los destinos de
goto/Goto()— antes,goto +0681231231,1;pasaba la validación web, pero Asterisk lo rechazaba al compilar el dialplan.