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: Originate Channel: SIP/123 Context: default Exten: 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: Goodbye Message: 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
---------------------------------------- Estação VoIP 2006 5 e 6 Dezembro Curitiba PR http://www.estacaovoip.com.br _______________________________________________ LIsta de discussões AsteriskBrasil.org AsteriskBrasil@listas.asteriskbrasil.org http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil _______________________________________________ Acesse o wiki AsteriskBrasil.org: http://www.asteriskbrasil.org