[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