[AsteriskBrasil] Asterisk Manager API - AMI - Asterisk-Java

André Fernandes andre.ipn em hotmail.com
Sexta Janeiro 19 12:18:19 BRST 2007


Silvio,Na verdade tem muita utilidade na vida real, desenvolvi aqui na empresa (Call Center) uma aplicação Java/WEB, onde 30 operadoras trabalham. Recebem chamadas automáticas distribuidas pela aplicação onde entrego para elas somente chamadas atendidas, o sistema utiliza a biblioteca AsteriskJava que já foi pior mais está muito estável agora, comando gravações por demanda e muitas outras funcionalidades. Att,AndréFrom: silvionetto em hotmail.comTo: AsteriskBrasil em listas.asteriskbrasil.orgDate: Thu, 18 Jan 2007 10:42:19 -0200Subject: [AsteriskBrasil] Asterisk Manager API - AMI - Asterisk-Java








Bom dia,
 
Estive tentando acessar um servidor Asterisk a 
partir de uma máquina Windows realizar uma ligação e transferir para 
um atendente.
Com isso descubri várias facilidades do Asterisk e 
resolvi enviar para a lista algumas coisas interessantes na minha opinião para 
resolver o problema.
A primeira coisa que me apareceu foi o Asterisk 
Manager API. Uma interface que disponibiliza acesso ao Asterisk via 
protocolo TCP/IP.
Para utilizar o Asterisk Manager basta habilitar o 
serviço editando o arquivo de configuração 
"/etc/asterisk/manager.conf" como no exemplo 
abaixo:
 
;  ; Asterisk Call Management support 
 ;  [general]  enabled = yes  port = 5038  
 bindaddr = 0.0.0.0 
 [mark] 
 secret = mysecret 
 deny=0.0.0.0/0.0.0.0 
 permit=209.16.236.73/255.255.255.0 
 permit=127.0.0.1/255.255.255.0 
 read = system,call,log,verbose,command,agent,user 
 write = system,call,log,verbose,command,agent,user
 
Para verificar 
se tudo funcionou basta acessar o servidor Asterisk através de outra máquina com 
Windows entrando via Telnet. Com um comando como o abaixo:
 
telnet 192.168.0.1 
5038
 
Irá aparecer a 
seguinte mensagem:
 
Asterisk Call 
Manager/1.0
 
 
Agora basta 
digitar:
 
Action: 
login
Username: 
mark
Secret: 
mysecret
 
Obs: Lembrando 
que qualquer caracter digitado errado, mesmo sendo apagado depois e corrigido 
faz com que o comando não funcione. Por isso não se preocupe se digitar uma 
palavra errada e depois apagar e o comando não funcionar. Basta digitar de novo 
sem errar nada. Para que isso não ocorra aconselho que tudo seja digitado em um 
bloco de notas e depois copiado para o prompt do DOS. Evitando erros e gardando 
para futura utilização dos comandos.
 
E dar dois 
[enter].
E irá aparecer 
a mensagem:
 
Response: 
Success
Message: Authentication 
accepted
 
Para realizar 
uma ligação e tranferir para um ramal pode-se usar o comando 
originate. Como no exemplo:
 
Action: OriginateChannel: 
SIP/123Context: defaultExten: 123
Priority: 
1
 
Neste exemplo 
eu liguei para meu próprio softphone e transferi a ligação para mim 
também.
 
Para sair 
basta digitar:
 
action: 
logoff
 
E terá como 
resposta:
 
Response: GoodbyeMessage: 
Thanks for all the fish.
Conexão ao host 
perdida.
 
Blz, mas e ai 
toda vez q eu for ligar vou precisar ir no telnet?
Com isso 
cheguei ao Asterisk-Java. Uma biblioteca de classes em java 
para facilitar o acesso ao Asterisk Manager.
Para utilizar 
o Asterisk-Java basta criar um projeto em java e importar o arquivo .jar do 
Asterisk-Java para o projeto.
Após isso é só 
criar uma classe utilizando essa biblioteca. Como no exemplo 
abaixo:
 
import 
java.io.IOException;
 
import 
org.asteriskjava.manager.AuthenticationFailedException;import 
org.asteriskjava.manager.ManagerConnection;import 
org.asteriskjava.manager.ManagerConnectionFactory;import 
org.asteriskjava.manager.ManagerEventListener;import 
org.asteriskjava.manager.TimeoutException;import 
org.asteriskjava.manager.action.StatusAction;import 
org.asteriskjava.manager.event.ManagerEvent;
 
public class HelloEvents 
implements ManagerEventListener{    private 
ManagerConnection managerConnection;
 
    public 
HelloEvents() throws IOException    
{        ManagerConnectionFactory factory 
= new 
ManagerConnectionFactory(                
"192.168.0.1", "mark", "mysecret");
 
        
this.managerConnection = 
factory.createManagerConnection();    }
 
    public void 
run() throws IOException, 
AuthenticationFailedException,            
TimeoutException, InterruptedException    
{        // register for 
events        
managerConnection.addEventListener(this);        
        // connect to Asterisk and log 
in        
managerConnection.login();
        


  
    OriginateAction originateAction = new OriginateAction();
    originateAction.setChannel("SIP/123");
    originateAction.setContext("default");
    originateAction.setExten("123");
    originateAction.setPriority(1);
    originateAction.setTimeout(new Long(60000));
    
    managerConnection.sendAction(originateAction);                
// wait 10 seconds for events to come 
in        
Thread.sleep(10000);
 
        
// and finally log off and 
disconnect        
managerConnection.logoff();    }
 
    public void 
onManagerEvent(ManagerEvent event)    
{        // just print received 
events        
System.out.println(event);    }
 
    public 
static void main(String[] args) throws Exception    
{        HelloEvents 
helloEvents;
 
        
helloEvents = new HelloEvents();        
helloEvents.run();    }}
 
Essa classe 
faz a mesma coisa que foi feita com o telnet. Realiza uma ligação para o meu 
ramal e transfere o canal para o meu ramal também. Na vida real não tem 
muita utilidade mas para fazer um teste você só vai precisar de um X-Lite 
configurado com o ramal 123.
 
Tomara 
que esse tutorial possa ajudar alguém. Ou pelo menos mostrar mais uma 
funcionalidade do Asterisk.
 
Abraço a 
todos,
 
Silvio 
Netto
Asterisk 
Counter 241
 
 
 
 
 
 
 

_________________________________________________________________
O Windows Live Spaces está aqui! Descubra como é fácil criar seu espaço na Web e sua rede amigos.
http://spaces.live.com/signup.aspx
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20070119/0b8ea68c/attachment.html


Mais detalhes sobre a lista de discussão AsteriskBrasil