Jacopo's Lair


Il problema

Configurando un centralino 3CX per l'uso con VoIP fornito da TIM mi sono imbattuto in un problema: le chiamate esterne arrivavano per qualche ora, poi cadevano nel vuoto.

Dopo estenuanti ricerche e un numero imprecisato ma molto alto di imprecazioni, ho scoperto che forzando la ri-registrazione (refresh) del trunk SIP, le chiamate tornavano ad arrivare.

Purtroppo però 3CX di default non ha un meccanismo di auto-refresh del trunk se questo appare già registrato, e numerose richieste da parte dell'utenza che chiedevano questa funzionalità sono cadute nel vuoto.

Ho quindi preparato un semplice script Bash da installare sul centralino che fa proprio questo.

La soluzione

#!/bin/bash # Configuration begin PBXUSER="UTENTE_DEL_CENTRALINO" PBXPASS="PASSWORD" IP="IP_DEL_PBX" TRUNK="10000" # Configuration end LOGIN=$(curl --silent -c /tmp/token.txt -d '{"Username":"'$PBXUSER'","Password":"'$PBXPASS'"}' -H "Content-Type: application/json" -X POST http://$IP/api/login) if [ "$LOGIN" == "AuthSuccess" ]; then echo "Login successful, attempting registration" REFRESH=$(curl --silent -d '["'$TRUNK'"]' -H "Content-Type: application/json" -X POST http://$IP/api/TrunkList/refreshRegistration --cookie /tmp/token.txt) echo "Done refreshing"; else echo "Login failed, check credentials and IP" fi rm /tmp/token.txt

Istruzioni per l'installazione

Per prima cosa, creiamo un utente che utilizzeremo solo per fare il refresh della pagina.

Andiamo quindi in Utenti → Nuovo → Diritti e spuntiamo queste opzioni:

Poi facciamo il login tramite SSH a 3CX: ssh root@IP_DI_3CX.

Creiamo un file chiamato refresh.sh (ad esempio: nano refresh.sh) e incolliamo il contenuto dello script visto più sopra.

Modifichiamo debitamente le variabili a seconda delle nostre necessità. Ecco una breve spiegazione:

Installiamo curl con apt install curl -y

Creiamo una riga in crontab con crontab -e che esegua ripetutamente il file. La riga dovrà contenere:

0 0 * * * /root/refresh.sh

Questo aggiornerà la registrazione del trunk ogni giorno (naturalmente, si possono anche usare altri valori).

ATTENZIONE: al refresh le chiamate verranno disconnesse!

Salviamo e usciamo.

Aspettiamo 5 minuti e notiamo se il trunk si riregistra.

Fatto!