从Python脚本w / Starpy到Asterisk的AMI连接的基本示例

时间:2012-04-19 13:07:17

标签: python asterisk

我在使用星号方面有多年的丰富经验,但我是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响应。

2 个答案:

答案 0 :(得分:0)

我认为f.login()会向您返回一个ping()方法的实例。

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

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

  • 查看starpy发行版中的examples目录。也许90%的代码已经存在。

答案 1 :(得分:0)

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

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 Test Suite,我们使用以下内容:

[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