[AsteriskBrasil] Agi com PHP
Mike Tesliuk
mike em tesliuk.com
Segunda Agosto 20 11:20:39 BRT 2012
Olá Senhores,
Não sei se os moderadores colocaram algum limite de resposta no topico
ou algo assim mas a mensagem não quer chegar, então estou alterando o
assunto para que vocês possam conferir.
Deixem me dar uns pitacos.
Não costumo trabalhar com agi em php mas sim com perl, mas vamos la.
Olhando o phpagi.php , ao procurar sobre get_variable ele traz
/**
* Fetch the value of a variable.
*
* Does not work with global variables. Does not work with some
variables that are generated by modules.
*
* @link http://www.voip-info.org/wiki-get+variable
* @link http://www.voip-info.org/wiki-Asterisk+variables
* @param string $variable name
* @return array, see evaluate for return information. ['result'] is
0 if variable hasn't been set, 1 if it has. ['data'] holds the value.
*/
function get_variable($variable)
{
return $this->evaluate("GET VARIABLE $variable");
isso significa, que se utilizar $meunumero =
$AGI->get_variable("NUMERO"); ele deverá trazer a variavel.
Ao iniciar a classe AGI, ele ja inicia os seguintes valores
* agi_request - name of agi script
* agi_channel - current channel
* agi_language - current language
* agi_type - channel type (SIP, ZAP, IAX, ...)
* agi_uniqueid - unique id based on unix time
* agi_callerid - callerID string
* agi_dnid - dialed number id
* agi_rdnis - referring DNIS number
* agi_context - current context
* agi_extension - extension dialed
* agi_priority - current priority
* agi_enhanced - value is 1.0 if started as an EAGI script
* agi_accountcode - set by SetAccount in the dialplan
* agi_network - value is yes if this is a fastagi
* agi_network_script - name of the script to execute
, ou seja, ali voce ja tem qual o extension que você ta rodando, qual o
callerid e etc...
, ou seja, pra testar realizei a criação de um pequeno script.
No meu extension:
exten => 441,1,Answer()
exten => 441,n,Set(TESTEVAR="123456")
exten => 441,n,AGI(teste.php)
exten => 441,n,NoOp(${TESTEVAR2})
exten => 441,n,Hangup()
No meu script
#!/usr/bin/php
<?php
include_once("phpagi.php");
// Instanciando o AGI
$agi = new AGI();
$testevar = $agi->get_variable("TESTEVAR");
$agi->exec("NOOP", "VALOR\ DE\ TESTEVAR:\ $testevar[data]");
//Se quiser fazer debug da variavel utilize o parametro abaixo
// e defina o debug=true no arquivo /etc/asterisk/phpagi.conf
//foreach($testevar as $i => $value){
//$agi->conlog("VALOR[$i] $testevar[$i]");
//}
$agi->set_variable("TESTEVAR2", "MIKE TESTOU");
?>
Minha execução
-- Executing [441 em interno:1] Answer("SIP/114-00000680", "") in new
stack
-- Executing [441 em interno:2] Set("SIP/114-00000680",
"TESTEVAR="123456"") in new stack
-- Executing [441 em interno:3] AGI("SIP/114-00000680", "teste.php")
in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/teste.php
-- AGI Script Executing Application: (NOOP) Options: (VALOR DE
TESTEVAR: 123456)
-- <SIP/114-00000680>AGI Script teste.php completed, returning 0
-- Executing [441 em interno:4] NoOp("SIP/114-00000680", "MIKE
TESTOU") in new stack
-- Executing [441 em interno:5] Hangup("SIP/114-00000680", "") in new
stack
Como podem ver, defini uma variavel no dialplan, recuperei no agi,
defini uma no agi, e recuperei no dialplan
Mais detalhes sobre a lista de discussão AsteriskBrasil