Cursos Asterisk en México

AGI control duración de llamada

Colapsar

Anuncio

Colapsar
No hay anuncio todavía.
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • AGI control duración de llamada

    Otra vez a la carga y es que le estoy pillando a esto el truco. Hace un tiempo estuvimos hablando en el general acerca del control de abusos del sistema.

    Las soluciones pasaban por:
    - Controlar el número de llamadas simultaneas: Macro Superdial, que se puede encontrar facilmente en voip-info.org.
    - Solicitar un pin para el acceso a ciertas extensiones. En el hilo 'Mi primer perl AGI script', tenemos una solución.
    - Establecer la duración de una llamada. Esto se puede hacer estableciendo el AbsoluteTimeout pero resulta que si lo hacemos en el dialplan directamente, este se queda marcado para todo quisqui (y por la prueba rápida que hice, para todas las extensiones). La solución un pequeño Script AGI que ponga el TimeOut para la llamada actual y para dar más flexibilidad que se pueda establecer en la BBDD.

    El script en cuestión es muy sencillito:
    #!/usr/bin/perl
    #

    use Asterisk::AGI;
    use DBI;

    $AGI = new Asterisk::AGI;

    my %input = $AGI->ReadParse();
    my ($user)=@ARGV;

    $timeout = get_timeout($user);

    #Si es 0 no establecemos restricciones alguna.
    if ($timeout > 0) {
    $AGI->exec('AbsoluteTimeout', $timeout);
    }

    sub get_timeout( $user ) {
    %MYSQL = (
    hostname => "localhost",
    username => "root",
    password => "udvucf",
    database => "asterisk"
    );

    my $dbh = DBI->connect("dbi:mysql:$MYSQL{database}:$MYSQL{hostna me}","$MYSQL{username}","$MYSQL{password}")
    || die ("No pudo conectar\n");

    my $query = "SELECT timeout FROM sipfriends WHERE username=$user";
    my $recordset = $dbh->prepare($query);
    $recordset->execute
    || die ("No pude ejecutar la consulta");
    my $pin = $recordset->fetchrow_hashref;
    return $pin->{timeout};
    }

    Nota: Hay que añadir un campo timeout en la tabla sipfriends, para indicar en segundos la duración máxima de la llamada.
    Nota: Otro detalle sería definir la extensión t, para que cuando ocurra un Timeout de algún tipo de locución notificando el motivo.

  • #2
    AGI control duración de llamada

    lastima que se borraron los php que subi hace tiempo, pero esta muy bien tu tecnica, usaba también el AbsoluteTimeout de esa misma forma, ahi solo agregaría que si en dado caso es 0 que setee un absolute timeout o un hangup, recuerda que si tienes mal configurado tu sip.conf puede irse al contexto default y es bueno implementar varios bloqueos.

    Comentario


    • #3
      Lo siento, me perdí un poco. Comentas que cuando el usuario tenga definido un timeout=0 que se ejecute un HungUp?.

      Hmmm la idea original es tener dos tipos de usuarios:
      - Invitados: Se les da un tiempo de prueba por llamada.
      - Usuarios del sistema: Pueden usar el sistema sin limitaciones.

      Por defecto todos los usuarios que se generen van a tener definido un timeout de X (pongamos 4 minutos). Entonces no termino de pillar lo del sip.conf y el contexto default.

      Saludos,

      Comentario


      • #4
        ah en ese caso no hay problema.. yo te sugería por si definias un default a los demás..

        Comentario

        Principales Usuarios Activos

        Colapsar

        No hay usuarios activos superiores.
        Trabajando...
        X