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";