[AsteriskBrasil] Script em php para efetuar chamadas ( http e Shell script )

Sebastiao Rocha lixo em interlinksistemas.com.br
Segunda Abril 13 16:44:30 BRT 2009


Obs, fiz a alteração com o intuito de auxiliar, no entanto para uso como shell script, não realizei os testes após modificar.

Para utilizar, efetue as seguinte alterações em seu asterisk.

Conteudo do arquivo /etc/asterisk/manager.conf
------------------------------------------------------------------------------------------
; AMI - The Asterisk Manager Interface

[general]
displaysystemname = yes
enabled = yes
webenabled = yes
port = 5038
bindaddr = 0.0.0.0

[admin]
secret = coloque aqui a senha para acesso ao manager AMI
read=system,call,log,verbose,command,agent,user,config
write=system,call,log,verbose,command,agent,user,config
permit=127.0.0.1; ou permita o uso via outro computador/rede ex: 192.168.0.0/24

; Authorization for various classes 
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config
------------------------------------------------------------------------------------------

 

Conteudo do arquivo chamada.php "soemnte para envio via http"
------------------------------------------------------------------------------------------
<?php

// Defina aqui as configurações....
$usuario = 'usuario definido no manager.conf';
$password = 'senha definida no manager.conf';
$context = 'coloque aqui o contexto para efetuar a chamada'
$callerid = 'coloque aqui o numero que vai aparecer no ramal';

if ( isset( $_POST['telefone']) && isset($_POST['ramal'])  ) {
 
 function AMI_sip_status($socket, $sip)
 {
  fputs($socket, "ACTION: ExtensionState\r\n");
  fputs($socket, "Context: ". $context . "\r\n");
  fputs($socket, "Exten: " . $ramal . "\r\n");
  fputs($socket, "ActionID: 1\r\n\r\n");
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
 
  return fgets($socket);
 }
 
 function AMI_originate($socket, $phonenumber)
 {
  fputs($socket, "Action: originate\r\n");
  fputs($socket, "Timeout: 30000\r\n");
  fputs($socket, "CallerId: " . $callerid <$phonenumber>\r\n");
  fputs($socket, "RetryTime: 45\r\n");
  fputs($socket, "WaitTime: 30\r\n");
  fputs($socket, "Channel: SIP/" . $ramal . "\r\n");
  fputs($socket, "Exten: $phonenumber\r\n");
  fputs($socket, "Context: ". $context . "\r\n");
  fputs($socket, "Priority: 1\r\n");
  fputs($socket, "ActionID: 1\r\n\r\n");
 
  fgets($socket);
  fgets($socket);
  fgets($socket);  
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  
  $result = fgets($socket);
  echo $result;    
 }
 
 function AMI_login($socket, $username, $password)
 {
  fputs($socket, "Action: login\r\n");
  fputs($socket, "Username: $username\r\n");
  fputs($socket, "Secret: $password\r\n\r\n");
  fputs($socket, "Events: off\r\n\r\n");
 
  return fgets($socket);
 }
 
 if ( isset($_POST['telefone']) && inset($_POST['ramal']) )  {
  $number = strtolower($_POST['telefone']); // Número a chamar
  $ramal = $_POST['ramal']; // Ramal que será chamado ao ser atendida a chamada efetuada.
  $errno = 0;
  $errstr = 0;
 
  $oSocket = fsockopen("localhost", 5038, &$errno, &$errstr, 20);
  if (!$oSocket)
  {
   echo "Não foi poss&iacute;vel completar a chamada...";
  }
  else
  {
   fgets($oSocket);
 
   AMI_login($oSocket, '$usuario, $password) . "<br>";
   AMI_originate($oSocket, $number) . "<br>";
 
   fputs($oSocket, "Action: Logoff\r\n\r\n");
   fclose($oSocket);
  }
 }
}
<?php


Conteudo do arquivo chamada.php "somente para envio via shell script"
------------------------------------------------------------------------------------------
#!/usr/bin/php -q

<?php
//Como utilizar: 
// ./chamada.php telefone ramal
// ./chamada.php 03432564400 2000

// Defina aqui as configurações....
$usuario = 'usuario definido no manager.conf';
$password = 'senha definida no manager.conf';
$context = 'coloque aqui o contexto para efetuar a chamada'
$callerid = 'coloque aqui o numero que vai aparecer no ramal';

if ( isset( $argv[1] ) && isset($argv[2])  ) {
 
 function AMI_sip_status($socket, $sip)
 {
  fputs($socket, "ACTION: ExtensionState\r\n");
  fputs($socket, "Context: ". $context . "\r\n");
  fputs($socket, "Exten: " . $ramal . "\r\n");
  fputs($socket, "ActionID: 1\r\n\r\n");
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
 
  return fgets($socket);
 }
 
 function AMI_originate($socket, $phonenumber)
 {
  fputs($socket, "Action: originate\r\n");
  fputs($socket, "Timeout: 30000\r\n");
  fputs($socket, "CallerId: " . $callerid <$phonenumber>\r\n");
  fputs($socket, "RetryTime: 45\r\n");
  fputs($socket, "WaitTime: 30\r\n");
  fputs($socket, "Channel: SIP/" . $ramal . "\r\n");
  fputs($socket, "Exten: $phonenumber\r\n");
  fputs($socket, "Context: ". $context . "\r\n");
  fputs($socket, "Priority: 1\r\n");
  fputs($socket, "ActionID: 1\r\n\r\n");
 
  fgets($socket);
  fgets($socket);
  fgets($socket);  
  fgets($socket);
  fgets($socket);
  fgets($socket);
  fgets($socket);
  
  $result = fgets($socket);
  echo $result;    
 }
 
 function AMI_login($socket, $username, $password)
 {
  fputs($socket, "Action: login\r\n");
  fputs($socket, "Username: $username\r\n");
  fputs($socket, "Secret: $password\r\n\r\n");
  fputs($socket, "Events: off\r\n\r\n");
 
  return fgets($socket);
 }
 
 if ( isset($_POST['telefone']) && inset($_POST['ramal']) )  {
  $number = strtolower($argv[1]); // Número a chamar
  $ramal = $argv[2]; // Ramal que será chamado ao ser atendida a chamada efetuada.
  $errno = 0;
  $errstr = 0;
 
  $oSocket = fsockopen("localhost", 5038, &$errno, &$errstr, 20);
  if (!$oSocket)
  {
   echo "Não foi poss&iacute;vel completar a chamada...";
  }
  else
  {
   fgets($oSocket);
 
   AMI_login($oSocket, '$usuario, $password) . "<br>";
   AMI_originate($oSocket, $number) . "<br>";
 
   fputs($oSocket, "Action: Logoff\r\n\r\n");
   fclose($oSocket);
  }
 }
}

?>
  ----- Original Message ----- 
  From: Ricardo Guedes de Carvalho 
  To: asteriskbrasil em listas.asteriskbrasil.org 
  Sent: Monday, April 13, 2009 4:26 PM
  Subject: Re: [AsteriskBrasil]script para realizar ligação no asterisk (AGI)


  ok, vou testar aki...só uma pergunta, esse arquivo chamada.php deve estar localizado em /var/www/  certo?


  2009/4/13 Sebastiao Rocha <lixo em interlinksistemas.com.br>

    Para utilizar, efetue as seguinte alterações em seu asterisk.

    Conteudo do arquivo /etc/asterisk/manager.conf
    ------------------------------------------------------------------------------------------
    ; AMI - The Asterisk Manager Interface

    [general]
    displaysystemname = yes
    enabled = yes
    webenabled = yes
    port = 5038
    bindaddr = 0.0.0.0

    [admin]
    secret = coloque aqui a senha para acesso ao manager AMI
    read=system,call,log,verbose,command,agent,user,config
    write=system,call,log,verbose,command,agent,user,config
    permit=127.0.0.1; ou permita o uso via outro computador/rede ex: 192.168.0.0/24

    ; Authorization for various classes 
    read = system,call,log,verbose,command,agent,user,config
    write = system,call,log,verbose,command,agent,user,config
    ------------------------------------------------------------------------------------------



    AMI_login($oSocket, 'usuario', 'senha') . "<br>";


    Conteudo do arquivo chamada.php
    ------------------------------------------------------------------------------------------
    <?php 
    $usuario = 'usuario definido no manager.conf';
    $password = 'senha definida no manager.conf';

    if ( isset( $_POST['telefone']) && isset($_POST['ramal'])  ) {

     function AMI_sip_status($socket, $sip)
     {
      fputs($socket, "ACTION: ExtensionState\r\n");
      fputs($socket, "Context: interlink\r\n");
      fputs($socket, "Exten: " . $ramal . "\r\n");
      fputs($socket, "ActionID: 1\r\n\r\n");
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);

      return fgets($socket);
     }

     function AMI_originate($socket, $phonenumber)
     {
      fputs($socket, "Action: originate\r\n");
      fputs($socket, "Timeout: 30000\r\n");
      fputs($socket, "CallerId: Site Interlink <$phonenumber>\r\n");
      fputs($socket, "RetryTime: 45\r\n");
      fputs($socket, "WaitTime: 30\r\n");
      fputs($socket, "Channel: SIP/" . $ramal . "\r\n");
      fputs($socket, "Exten: 0$phonenumber\r\n");
      fputs($socket, "Context: interlink\r\n");
      fputs($socket, "Priority: 1\r\n");
      fputs($socket, "ActionID: 1\r\n\r\n");

      fgets($socket);
      fgets($socket);
      fgets($socket);  
      fgets($socket);
      fgets($socket);
      fgets($socket);
      fgets($socket);
      
      $result = fgets($socket);
      echo $result;    
     }

     function AMI_login($socket, $username, $password)
     {
      fputs($socket, "Action: login\r\n");
      fputs($socket, "Username: $username\r\n");
      fputs($socket, "Secret: $password\r\n\r\n");
      fputs($socket, "Events: off\r\n\r\n");

      return fgets($socket);
     }

     if ( isset($_POST['telefone']) && inset($_POST['ramal']) )  {
      $number = strtolower($_POST['telefone']); // Número a chamar
      $ramal = $_POST['telefone']; // Ramal que será chamado ao ser atendida a chamada efetuada.
      $errno = 0;
      $errstr = 0;

      $oSocket = fsockopen("localhost", 5038, &$errno, &$errstr, 20);
      if (!$oSocket)
      {
       echo "Não foi poss&iacute;vel completar a chamada...";
      }
      else
      {
       fgets($oSocket);

       AMI_login($oSocket, '$usuario, $password) . "<br>";
       AMI_originate($oSocket, $number) . "<br>";

       fputs($oSocket, "Action: Logoff\r\n\r\n");
       fclose($oSocket);
      }
     }
    }
    <?php
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20090413/5fbd8dfa/attachment-0001.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil