reinicio masivo de polycoms

10 de marzo de 2009

Existen varias maneras de reiniciar los teléfonos Polycom desde Asterisk, pero todas se basan en el comando de consola "sip notify polycom-check-cfg [num_extension]". Este comando se puede lanzar desde un dialplan, desde la propia consola o desde un script. También hay algún loco que se atreve a construir el paquete UDP de SIP y lanzarlo a la red.

Para que los Polycom acepten este tipo de eventos externos tenemos que cambiar en sip.cfg de los teléfonos el parámetro voIpProt.SIP.specialEvent.checkSync.alwaysReboot y cambiar el 0 por un 1. Una vez reiniciado el teléfono este ya es capaz de aceptar paquetes especiales, como por ejemplo los de reinicio.


El siguiente script en Perl hace una consulta a la base de datos MySql de Asterisk, lee todas las extensiones SIP existentes y va una por una reiniciando los teléfonos.

#!/usr/bin/perl

use Mysql;

$dbhost = "localhost";
$dbname = "asterisk";
$dbuser = "asteriskuser";
$dbpsw  = "pswastx";

$connect = Mysql->connect($dbhost, $dbname, $dbuser, $dbpsw);
$connect->selectdb($dbname);

$myquery = "
   SELECT extension 
   FROM users
   ORDER BY extension";

$execute = $connect->query($myquery);

print "Reboot All Polycom v0.1b, por amperis <amperis\@gmail.com>\n";
while ( @results = $execute->fetchrow() ) {
   print " -> Reiniciando extension $results[0]...\n";
   sleep 1;
   system("/usr/sbin/asterisk -rx \"sip notify polycom-check-cfg $results[0]\"");
}

print "Fin. Todos los telefonos estan reiniciados.\n\n";