如何在AsteriskNow中使用Asterisk AMI和Java进行出站调用
我想在LAN网络中发起从分机号码到另一分机号码的呼叫。我已经通过FreePBX GUI完成了这项任务。现在,我正试图通过在Java代码中使用星号AMI来执行此任务。下面的Java代码显示了调试过程中的一些异常如何在AsteriskNow中使用Asterisk AMI和Java进行出站调用,java,asterisk,asteriskami,Java,Asterisk,Asteriskami,我想在LAN网络中发起从分机号码到另一分机号码的呼叫。我已经通过FreePBX GUI完成了这项任务。现在,我正试图通过在Java代码中使用星号AMI来执行此任务。下面的Java代码显示了调试过程中的一些异常 import java.io.IOException; import org.asteriskjava.manager.AuthenticationFailedException; import org.asteriskjava.manager.ManagerConnection;
import java.io.IOException;
import org.asteriskjava.manager.AuthenticationFailedException;
import org.asteriskjava.manager.ManagerConnection;
import org.asteriskjava.manager.ManagerConnectionFactory;
import org.asteriskjava.manager.TimeoutException;
import org.asteriskjava.manager.action.OriginateAction;
import org.asteriskjava.manager.response.ManagerResponse;
public class HelloManager
{
private ManagerConnection managerConnection;
public HelloManager() throws IOException
{
ManagerConnectionFactory factory = new ManagerConnectionFactory(
"192.168.68.173", "admin", "admin");
this.managerConnection = factory.createManagerConnection();
}
public void run() throws IOException, AuthenticationFailedException,
TimeoutException
{
OriginateAction originateAction;
ManagerResponse originateResponse;
originateAction = new OriginateAction();
originateAction.setChannel("SIP/1010");
originateAction.setContext("default");
originateAction.setExten("2020");
originateAction.setPriority(new Integer(1));
originateAction.setTimeout(new Integer(30000));
// connect to Asterisk and log in
managerConnection.login();
// send the originate action and wait for a maximum of 30 seconds for Asterisk
// to send a reply
originateResponse = managerConnection.sendAction(originateAction, 30000);
// print out whether the originate succeeded or not
System.out.println("Enter Response="+originateResponse.getResponse());
// and finally log off and disconnect
managerConnection.logoff();
}
public static void main(String[] args) throws Exception
{
HelloManager helloManager;
helloManager = new HelloManager();
helloManager.run();
}
}
例外情况:
run:
Feb 06, 2014 4:04:16 PM org.asteriskjava.manager.internal.ManagerConnectionImpl connect
INFO: Connecting to 192.168.68.173:5038
Feb 06, 2014 4:04:17 PM org.asteriskjava.manager.internal.ManagerConnectionImpl setProtocolIdentifier
INFO: Connected via Asterisk Call Manager/1.3
Feb 06, 2014 4:04:17 PM org.asteriskjava.manager.internal.ManagerConnectionImpl setProtocolIdentifier
WARNING: Unsupported protocol version 'Asterisk Call Manager/1.3'. Use at your own risk.
Feb 06, 2014 4:04:18 PM org.asteriskjava.manager.internal.ManagerConnectionImpl disconnect
INFO: Closing socket.
Feb 06, 2014 4:04:18 PM org.asteriskjava.manager.internal.ManagerReaderImpl run
INFO: Terminating reader thread: No more lines available: null
Exception in thread "main" org.asteriskjava.manager.AuthenticationFailedException: Authentication failed
at org.asteriskjava.manager.internal.ManagerConnectionImpl.doLogin(ManagerConnectionImpl.java:578)
at org.asteriskjava.manager.internal.ManagerConnectionImpl.login(ManagerConnectionImpl.java:438)
at org.asteriskjava.manager.internal.ManagerConnectionImpl.login(ManagerConnectionImpl.java:423)
at org.asteriskjava.manager.DefaultManagerConnection.login(DefaultManagerConnection.java:294)
at asteriskjtapi.HelloManager.run(HelloManager.java:49)
at asteriskjtapi.HelloManager.main(HelloManager.java:67)
注:
这里我使用的是FreePBX中的凭据。这是访问连接管理器的正确路径吗 请在执行java程序时粘贴星号日志 用于获取星号日志
tail -f /var/log/asterisk/full
要从命令行检查相同的内容,请尝试以下操作
telnet 192.168.68.173 5038
Action: Login
Username: admin
Secret: admin
如果登录成功
Action: Originate
Channel: SIP/1010
Exten: 2020
Context: default
Priority: 1
Callerid: 1010
Async: yes
试试这个,让我知道你的输出
manager.conf
中的permit
设置中。然后保存更改
permit:[您的静态ip]
我尝试过tenet,但它显示了错误:身份验证失败在managers.conf(/etc/asterisk/manager.conf)`[admin]secret=admin deny=0.0.0.0/0.0.0 permit=xx.xx.xx/255.255.0(您的连接ip)的许可列表中添加您的ip`