我在使用星号方面有多年的丰富经验,但我是python的新手。
我想从python脚本连接并接收一些事件。我创建了一个管理员用户,其AMIUSERNAME
和AMIPASSWORD
作为凭据,并且经过测试可以正常工作。我还安装了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响应。
答案 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