Fabriciojf.com Wiki
  • FAQ
    • APIs
      • FAQs Favoritos

        Qual é a sua dúvida?

        •  Página inicial do FAQ
        • Asterisk
        • Crando AGI no Asterisk com PHP_AGI

        Crando AGI no Asterisk com PHP_AGI

        Neste tutorial vamos criar um AGI simples para bloquear ramais no Asterisk, não permitindo que realizem discagens.

        Será um exemplo utilizando o framework php-agi que pode ser baixado em phpagi.sourceforge.net ou através do sourceforge.

        Criando o script AGI 

        • Baixe o PHPAgi e descompacte-o dentro da pasta /var/lib/asterisk/agi-bin
        • Crie o arquivo bloqueio.php dentro da pasta /var/lib/asterisk/agi-bin 
        $ touch /var/lib/asterisk/agi-bin/bloqueio.php
        • Agora insira o seguinte conteúdo:
        #!/usr/bin/php
        <?php

        require_once('phpagi/phpagi.php');

        $agi=new AGI();
        $ramal=$argv[1];

        /**
        * Aqui vamos colocar o array contendo os ramais que DEVEM SER
        * BLOQUEADOS
        */
        $invalidos = array(
        '2121',
        '6000',
        '3030',
        );

        /**
        * "PERMITIR" pode ser acessada no extensions.conf através da variável
        * ${PERMITIR} e ela conterá o valor yes ou no
        */
        $permitir = in_array($ramal, $invalidos) ? 'no' : 'yes';
        $agi->set_variable("PERMITIR", $permitir);

        exit();

        ?>

        No exemplo acima estamos definindo um array de ramais inválidos, insira na lista os ramais que deverão ser bloqueados no momento da discagem, não se esqueça das aspas simples e da vírgula como no modelo 'RAMAL', .

        Logo após a alimentação do array estamos realizando uma validação para saber se o ramal está ou não presente nele, a resposta da validação é inserida na variável ${PERMITIR} que pode ser acessada dentro do extensions.conf.

        Acessando o AGI no extensions.conf e tratando o retorno

        Abra o arquivo /etc/asterisk/extensions.conf e insira a chamada de bloqueio no contexto e regra que deseja tratar. No exemplo abaixo os ramais contidos no array do bloqueio.php não podem realizar nenhum tipo de discagem dentro do contexto [from-internal].

        [from-internal]

        exten => _X.,1,Answer()
        exten => _X.,n,AGI(bloqueio.php,${CALLERID(num)})
        exten => _X.,n,Gosubif($["${PERMITIR}"="yes"]?permite:bloqueia)
        exten => _X.,n(bloqueia),NoOp(Ramal bloqueado)
        exten => _X.,n,Hangup()
        exten => _X.,n(permite),NoOp(Ramal liberado)
        exten => _X.,n,Dial(khomp/b0/${EXTEN})
        exten => _X.,n,Hangup()

        Ajuste o AGI para o seu ambiente e crie novos modelos para as suas particularidades.

         Página inicial do FAQ
        • FAQ
          • APIs
            • FAQs Favoritos

              © Copyright 2025 Fabriciojf.com  Criado por FábioCostaMKT   Pastes   Administração