Diferencia entre revisiones de «Servicios Web - Llamadas»

De wiki
Saltar a: navegación, buscar
(Eliminar llamadas - /direct/items/phonecalls/delete)
(éxito)
Línea 66: Línea 66:
 
<pre>
 
<pre>
 
{
 
{
   "count" : 0,
+
   "count" : 702,
 
   "error" : false
 
   "error" : false
 
}
 
}
 
</pre>
 
</pre>
 +
 +
;count: cantidad de llamadas eliminadas
  
 
=== error ===
 
=== error ===

Revisión de 13:20 24 nov 2012

Contenido

Incorporar una llamada - /direct/items/phonecalls/create

Para incorporar una nueva llamada hay que realizar una solicitud a https://host/direct/items/phonecalls/create con los siguientes parámetros:

initiated
fecha de la llamada en formato ISO8601
source
número que origina la llamada
destination
número al que se hizo la llamada
duration (opcional)
duración de la llamada en segundos
url (opcional)
link para mostrar junto con la llamada que puede llevar a mayor detalle de la misma fuera de la aplicación de NiMbox

Para incorporar una nueva llamada se puede utilziar:

wget --user=jlopez --password=comic --no-check-certificate -qO- \
  "https://host/direct/items/phonecalls/create?initiated=2012-08-23T12:20:33&source=7222&destination=02122853348&duration=45&url=http..."

éxito

En caso de que todo funcione correctamente se recibirá un json parecido a este:

{
    "error": false,
    "contactId": 12334,
    "phonecallId": 3241
}
contactId
es el código del contacto al que se le conectó la llamada
phonecallId
es el código de la llamada

error

Si algo no funcionó se recibirá un json parecido a este:

{
    "error": true,
    "errors": {
        "destination": "no se consiguió el número de destino en la base de datos"
    }
}

Eliminar llamadas - /direct/items/phonecalls/delete

Para eliminar llamadas hay que realizar una solicitud a http://host/direct/items/phonecalls/delete con los siguientes parámetros:

from
fecha desde que se debe eliminar, en formato ISO8601
to
fecha hasta que se debe debe eliminar, en formato ISO8601

Ambas fechas son exclusivas y no deben incorporar las horas.

Para eliminar llamadas se puede utilizar:

wget --user=jlopez --password=comic --no-check-certificate -qO- \
  "http://host/direct/items/phonecalls/delete?from=2012-08-23&to=2012-08-25"

El resultado de esta invocación resulta en un json con un parámetro error que puede ser true o false.

éxito

{
  "count" : 702,
  "error" : false
}
count
cantidad de llamadas eliminadas

error

{
  "error" : true,
  "errors" : {
  }
}

Forma programática de incorporar llamadas

Es posible modificar este script en perl para extraer las llamadas de la tabla cdr de asterisk e incorporarlas a NiMbox

#!/usr/bin/perl

use strict;
use warnings;

use DBI;
use LWP::UserAgent;
use LWP::ConnCache;
use URI::Escape;
use JSON;

# configuration

my $ASTERISK_HOST = "192.168.128.96";
my $ASTERISK_USER = "testing";
my $ASTERISK_PASSWORD = "testing";

my $NIMBOX_HOST = "192.168.1.98:8080";
my $NIMBOX_USER = "admin";
my $NIMBOX_PASSWORD = "admin";

# do the query

my $start = time;

my $handle = DBI->connect(
    "DBI:mysql:asterisk;host=$ASTERISK_HOST", 
    $ASTERISK_USER, 
    $ASTERISK_PASSWORD);

my $sql = <<EOSQL;
SELECT 
    DATE_FORMAT(calldate, '%Y-%m-%dT%TZ') AS initiated, 
    src AS source, 
    dst AS destination, 
    duration AS duration,
    CONCAT('http://192.168.128.96/recordings/', channel) AS url
FROM 
    cdr 
WHERE 
    calldate >= '2010-01-01' AND LENGTH(dst) > 7
EOSQL

my $statement = $handle->prepare($sql);
$statement->execute();

# send the results

my $agent = LWP::UserAgent->new();
my $cache = LWP::ConnCache->new();
$cache->total_capacity([1]);
$agent->conn_cache($cache);
$agent->credentials("$NIMBOX_HOST", "NiMbox", $NIMBOX_USER, $NIMBOX_PASSWORD);

while (my $r = $statement->fetchrow_hashref()) {

    print "Processing $r->{initiated} from $r->{source} to $r->{destination}... ";

    # prepare the url

    my $url = "http://$NIMBOX_HOST/direct/items/phonecalls/create";
    $url = $url . "?initiated=$r->{initiated}";
    $url = $url . "&source=$r->{source}";
    $url = $url . "&destination=" . uri_escape(convertDestination($r->{'destination'}));
    $url = $url . "&duration=$r->{duration}";
    $url = $url . "&url=" . uri_escape($r->{'url'});

    my $response = $agent->get($url);
    my $json = decode_json($response->content);
    if ($json->{'error'}) {
	print "ERROR\n";
    } else {
	print "OK\n";
    }

}

print "execution time: " . (time - $start) . "\n";

exit(0);


sub convertDestination {

    my ($destination) = @_;

    if ($destination =~ /^9/) {
	$destination = substr($destination, 1);
	if (length($destination) == 7) {
	    $destination = "0212" . $destination;
	}
    }

    return $destination;

}