Como exportar el AstDB (Asterisk Database)

11 Ene

En algunas ocasiones nos hemos topado con clientes cuyo sistema empieza a hacer cosas… raras. Resulta que el call forward deja de funcionar correctamente, o que las llamadas se ciclan después de entrar al IVR y apuntar hacia alguna dirección. Esto lo hemos visto en casos con FreePBX/Elastix donde el equipo por alguna error (a veces falla de hardware) se traba y es necesario reiniciarlo físicamente, haciendo que archivos como el astdb se corrompan y queden incompletos. Esto ocasione que nuevos valores no puedan ser guardados en el astdb, o que valores viejos no puedan ser modificados.

Un síntoma típico de estos problemas es cambiar algún valor desde el GUI que ocasione que el AstDB cambie. Ejemplo: un nuevo speeddial del addressbook o activar/desactivar el call-waiting de alguna extensión. Si nos hemos preguntado: ¿por qué Asterisk no está guardando los valores que le doy? Esta es una probabilidad…

La solución más radical es la siguiente:

  1. Detener Asterisk
  2. Eliminar el archivo /var/lib/asterisk/astdb
  3. Reiniciar Asterisk

Con esto, Asterisk creará una nueva astdb desde cero, pero habremos perdido cualquier valor que ya existiera allí. Cualquier campo personalizado se perdió tras este paso.

¿Cómo podemos exportar los valores del astdb, a manera que podamos restaurarla en una nueva recién creada que no tiene estos errores?

Una respuesta a este problema fue crear un script que se conecte por el AMI y haga un dump en código bash que después se pueda usar para aplicarlo en cualquier otro momento. Este dump seria una serie de comandos que harían una conexión a Asterisk indicándole recrear los valores. El código es el siguiente:

[codesyntax lang=»php» title=»/var/lib/asterisk/agi-bin/astdb.php»]

#!/usr/bin/php -q
<?php
include «phpagi-asmanager.php»;

$user = ‘admin’;
$pass = ‘elastix456’;

$agi = new AGI_AsteriskManager();
$agi->connect(‘127.0.0.1’,$user,$pass);

$r = $agi->database_show();
$x = array();
echo «#!/bin/bashn»;
foreach ($r as $k => $v) {
echo «asterisk -rx ‘database put «.substr($k,1,strpos($k,’/’,2)-1) . ‘ ‘ .
substr($k,strpos($k,’/’,2)+1) . ‘ ‘.
«»$v»‘».
«n»;
}

?>

Hay que notar que en el código estoy incluyendo al archivo phpagi-asmanager.php el cual es un componente de la clase PHPAGI que existe en todas las distribuciones de FreePBX (y eso incluye a Elastix/Trixbox). Yo recomiendo colocar este código en un archivo como /var/lib/asterisk/agi-bin/astdb.php, ya que esa carpeta ya contiene la librería arriba mencionada.

Invocarlo es muy sencillo. Lo hacemos ejecutale y lo corremos:»

[codesyntax lang=»bash»]

chmod 755 /var/lib/asterisk/agi-bin/astdb.php
/var/lib/asterisk/agi-bin/astdb.php > /tmp/astdb.sh

[/codesyntax]

Tras ejectutar el comando anterior, tendremos un archivo astdb.sh dentro de la carpeta /tmp. Este archivo tendrá un contenido parecido al que sigue:

[codesyntax lang=»bash» title=»/tmp/astdb.sh»]

#!/bin/bash
asterisk -rx 'database put AMPUSER 100/cidname "Juan Perez"'
asterisk -rx 'database put AMPUSER 100/cidnum "100"'
asterisk -rx 'database put AMPUSER 100/device "100"'
asterisk -rx 'database put AMPUSER 100/followme/changecid "default"'
asterisk -rx 'database put AMPUSER 100/followme/ddial "DIRECT"'
asterisk -rx 'database put AMPUSER 100/followme/fixedcid ""'
asterisk -rx 'database put AMPUSER 100/followme/grpconf "DISABLED"'
asterisk -rx 'database put AMPUSER 100/followme/grplist "815#"'
asterisk -rx 'database put AMPUSER 100/followme/grptime "20"'
asterisk -rx 'database put AMPUSER 100/followme/prering "15"'
asterisk -rx 'database put AMPUSER 100/language "es"'

[/codesyntax]

Estos son una serie de comandos que podemos ejecutar para hacer que el nuevo Asterisk importe el contenido del AstDB anterior para tener acceso a la misma información que el anterior. ¿Por que no simplemente respaldamos el archivo /var/lib/asterisk/astdb? Porque al reemplazar el nuevo archivo sobreescribiríamos todo, y perderiamos cualquier personalización que hubiera en el viejo sistema. Además, si respaldamos un archivo dañado, lo único que conseguiríamos seria copiar el daño de nuevo.

Espero esto les sirva. A nosotros nos resolvió el problema de un cliente que no le permitía guardar nueva información (sus speeddials no podían ser editados ni podiamos agregar nuevos).

¡Suerte!

Nueva imagen para nuestro sitio

5 Ene

Para quien entró al sitio desde temprano habrá notado algo diferente, y es que por fin actualizamos nuestra página principal para que coincidiera con nuestros foros de discusión.

Durante los siguientes días estaremos haciendo algunos ajustes de apariencia, pero el contenido sigue siendo el mismo. Esperamos que a todos nuestros visitantes les agrade el cambio para tener ahora una imagen más personalizada.

¡Suerte!

¡Feliz año a todos! Tenemos nuevos cursos para 2012

3 Ene

El 2011 fue un año muy bueno: vimos la salida oficial de Asterisk 10, productos como Elastix/PiaF siguen madurando y nosotros tuvimos la oportunidad de capacitar a más de 80 personas en el ramo de Asterisk en el año que terminó. Queremos llegar a más profesionales del medio y por lo tanto, hacemos de conocimiento público las nuevas fechas que tenemos para nuestros cursos (en las 3 principales ciudades de México):

  • México, DF. 25, 26, 27 y 28 de enero 2012
  • Monterrey, Nuevo León. 15, 16 17 y 18 de febrero 2012
  • Guadalajara, Jalisco. 22, 23, 24 y 25 de febrero 2012

El temario para las 3 ciudades es exactamente el mismo y cubrimos desde una intruducción a Linux (para el que nunca ha usado este sistema operativo) hasta características avanzadas de Asterisk como lo son el uso de AGIs y el AMI.

Estamos ofreciendo un descuento para todos aquellos que reserven su lugar antes del 6/enero. Si desean más información, pueden visitar la página de nuestros cursos o bien ponerse en contacto con nosotros.

¡Feliz año a todos! Esperamos poder conocerlos a todos en persona.

¡Suerte!