Il problema
Chiunque abbia lavorato su FreePBX conosce la frustrazione di personalizzare l'interfaccia o aggiungere funzionalità, per poi vederle scomparire al primo fwconsole ma upgradeall. La soluzione è creare un modulo vero e proprio, non modificare i file core.
Struttura di un modulo FreePBX
Un modulo FreePBX ha questa struttura minima:
custompbx/
├── module.xml
├── install.php
├── uninstall.php
├── page.custompbx.php
└── views/
└── main.php
module.xml
Il file più importante — definisce il modulo agli occhi del framework:
<?xml version="1.0" encoding="UTF-8"?>
<module>
<rawname>custompbx</rawname>
<name>Custom PBX</name>
<version>1.0.0</version>
<publisher>Your Company</publisher>
<license>MIT</license>
<category>Admin</category>
<description>Modulo branded per FreePBX</description>
</module>
install.php
Eseguito all'installazione/aggiornamento del modulo:
<?php
function custompbx_install() {
// Crea tabelle DB se necessario
// Registra menu item
return true;
}
function custompbx_uninstall() {
return true;
}
page.custompbx.php
La pagina principale del modulo, inclusa automaticamente da FreePBX quando si accede al menu:
<?php
// Verifica permessi
if (!isset($amp_conf)) {
die('No direct access');
}
$view = new \FreePBX\Html();
// Logica della pagina
Registrare una voce di menu
Per aggiungere il modulo al menu di navigazione, aggiungi in module.xml:
<menuitems>
<custompbx>
<name>Custom PBX</name>
<category>Admin</category>
<menuindex>0</menuindex>
</custompbx>
</menuitems>
Deploy e attivazione
# Copia il modulo nella directory corretta
cp -r custompbx/ /var/www/html/admin/modules/
Installa tramite fwconsole
fwconsole ma install custompbx
Ricarica FreePBX
fwconsole reload
Configurazione trunk Messagenet
Un esempio pratico: la configurazione del trunk SIP Messagenet all'interno del modulo per auto-configurare i parametri corretti.
I parametri critici per Messagenet:
- Host:
sip.messagenet.it - Porta:
5060 - Username: il numero SIP assegnato
- Match: indirizzo IP del gateway Messagenet (non usare username matching)
[messagenet-trunk]
type=peer
host=sip.messagenet.it
port=5060
username=XXXXXXXX
secret=PASSWORD
insecure=port,invite
nat=yes
context=from-trunk
qualify=yes
Conclusioni
La chiave è sempre lavorare dentro il framework, mai modificare i file core. Un modulo correttamente strutturato sopravvive a qualsiasi aggiornamento e può essere distribuito su più installazioni FreePBX identiche.