Veamos un ejemplo:
Tal como se muestra en la imagen anterior, en el momento que Teléfono llama al Interno, dicho llamado pasará por ambas PBX y a su vez generará un registro en el CDR de cada una de ellas. Si queremos asociar ambos registros, nos daríamos cuenta que sería una tarea muy complicada, dado a que ambos contarán con un UniqueID distinto.
Ahora, si nosotros pudiéramos, de alguna forma, enviar de la PBX A a la PBX B el uniqueID, eso simplificaría muchísimo las cosas.
En el momento que el llamado pasa de la "PBX A" a la "PBX B" la única variable que es enviada es CALLERID(name), por lo tanto lo que podríamos hacer es concatenarle los datos que quisiéramos enviar y luego, cuando los valores se reciben en la "PBX B", parsearlos y volver todo como estaba.
Para ello haremos lo siguiente:
PBX A:
Supongamos que en esta PBX tenemos un DID donde los llamados que se reciben a través de este, son enviados a un contexto, llamémoslo from-my-did, que es donde se hace el dial a la PBX B. Entonces para poder concatenar, en este caso el uniqueID, para pasarlo a la otra PBX, tendríamos que poner, antes del dial, la siguiente línea:
exten => s,1,set(CALLERID(name)=${CALLERID(name)}#CDR(uniqueid)=${CDR(uniqueid)}#)
dando como resultado, lo siguiente:
[from-my-did]
exten => s,1,set(CALLERID(name)=${CALLERID(name)}#CDR(uniqueid)=${CDR(uniqueid)}#)
exten => s,n,dial(IAX2/pbxb/frommydid)
Como se podrá notar, cuando concatenamos la variable uniqueID vemos que la misma está entre dos numerales (#), esto se debe a que lo vamos a utilizar como separador para poder parsear los datos que enviamos.
PBX B:
Ahora bien, supongamos que en la configuración del troncal IAX2 dijimos que los llamados de la PBX A, van a ser recibidos en el contexto "from-pbx-a". Entonces tendríamos que agregar la siguiente línea, que se encargará de parsear los datos y crear las variables necesarias:
exten => frommydid,1,AGI(parser.php)
Dando como resultado, lo siguiente:
[from-pbx-a]
exten => frommydid,1,AGI(parser.php)
exten => frommydid,n,Dial(SIP/222)
Por lo tanto, cada vez que la PBX B reciba un llamado desde la PBX A, se parsearan y crearan las variables que concatenamos al CALLERID(name) y luego el llamado será enviado al interno 222.
Aquí les paso el código del parser.php
#!/usr/bin/php
/* Parser.php
* ----------------------------------------------------------------------
* AGI utilizado para parsear las variables enviadas a através del
* CALLERID(name), separadas por #, y luego declararlas en Asterisk.
* ----------------------------------------------------------------------
* by Gustavo Borgoni - gborgoni@gmail.com
*/
<?php
require_once "phpagi.php";
$agi = new AGI();
function get_var($value) {
global $agi;
$r = $agi->get_variable( $value );
if ($r['result'] == 1) {
$result = $r['data'];
return $result;
} else {
return '';
}
}
$info = get_var("CALLERID(name)");
$result = split("#", $info);
$agi->set_variable("CALLERID(name)", $result[0]);
foreach ($result as $k => $v) {
$variable = split("=",$v);
if (trim($variable[0]) != "" && trim($variable[1]) != "") {
$agi->set_variable(trim($variable[0]), trim($variable[1]));
}
}
?>
Hasta la próxima!
No hay comentarios:
Publicar un comentario