0

我有多年使用星号的丰富经验,但对 python 很陌生。我想从 python 脚本连接并接收一些事件。我已经创建了一个使用AMIUSERNAMEAMIPASSWORD作为凭据的经理用户,并测试工作正常。我还安装了StarPy。然后我使用命令运行python ami.py USERNAME PASSWORD以下脚本:

import sys
from starpy import manager
f = manager.AMIFactory(sys.argv[1], sys.argv[2])
df = f.login('127.0.0.1',5038)

在监视星号控制台时,没有任何反应。有谁知道我错过了什么?

我想发送一个 Ping 动作并等待 Pong 响应。

4

2 回答 2

0

我想这会f.login()返回一个AMIProtocol具有ping()方法的实例。

我对starpy一无所知,所以一些模糊的建议:

  • 将 Python 作为交互式 shell 启动。执行代码并当场检查结果。help函数是你的朋友;help(df)在脚本的最后一行之后尝试。

  • 查看examplesstarpy发行版中的目录。也许你需要的 90% 的代码已经在那里了。

于 2012-04-19T13:16:41.733 回答
0

以下内容来自Asterisk Test Suite中的 ami 模块(以及其他一些地方)。我们在整个测试套件中广泛使用 starpy,因此您可能需要查看一些示例。假设以下代码驻留在具有成员方法 login 的某个类中。

def login(self):

  def on_login_success(self, ami):
      self.ami_factory.ping().addCallback(ping_response)
      return ami

  def on_login_error(self, reason):
      print "Failed to log into AMI"
      return reason

  def ping_response(self, ami)
      print "Got a ping response!"
      return ami

  self.ami_factory = manager.AMIFactory("user", "mysecret")
  self.ami_factory.login("127.0.0.1", 5038).addCallbacks(on_login_success, on_login_error)

确保你的 manager.conf 配置正确。对于 Asterisk 测试套件,我们使用以下内容:

[general]
enabled = yes
webenabled = yes
port = 5038
bindaddr = 127.0.0.1

[user]
secret = mysecret
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan,test
write = system,call,agent,user,config,command,reporting,originate
于 2012-04-20T13:39:31.247 回答