从命令行python脚本将Asterisk交互程序迁移到Web应用程序

时间:2011-02-19 08:45:27

标签: php python web-applications asterisk asteriskami

我正在尝试创建一个小型Web应用程序来与Asterisk电话平台进行交互。那里有很多类似的东西,但我想要自己的学习经验。

这就是我现在所拥有的:一个简单的python脚本,允许某人通过命令行与管理器界面进行交互。基本上脚本的工作原理是: 1)连接到Asterisk Manager界面。 2)从CLI上获取用户的两个电话号码。 3)发起两个电话 4)将始发呼叫带入共同的会议。 5)'while'循环等待来自用户的输入。只允许使用字符a-z。 6)“a-z”对应于通过使用另一个来播放或“注入”会议的.WAV文件 本地扩展。

对我来说它有点整洁,现在我想从网络应用程序做同样的事情,但我不知道从哪里开始。我需要使用哪种语言?我知道基本的HTML并且使用了javascript。将表单输入变量传递给服务器上的python脚本需要哪些技术(Web服务器和星号服务器是同一台机器)? CGI?用PHP怎么样?我可能需要在某些时候学习...如果我使用PHP,我仍然可以“调用”python脚本并将值传递给它吗?我希望最终能够使用javascript来允许用户播放与按钮相对应的声音(就像命令行版本中的字符一样),而不是点击提交但是计划让它现在正常工作。我想这个问题也变成了“我应该学习PHP并放弃python吗?”我觉得我可以真正添加到我当前的电话技能(并且玩得开心......这个Asterisk的东西是爆炸性的)能够构建与Asterisk交互的基于Web的工具(也许也是Freeswitch)。

任何提示或指导都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我建议只将你所拥有的代码包装在wsgi界面中,这是Web服务的python标准(类似于 cgi 但是有函数而不是程序,所以它有更简单的界面,可以在Web服务器中预编译。)

WSGI Web也包含许多python Web应用程序框架的链接,因此请查看它们并选择一个。 DjangoPylonsTurboGears似乎更受欢迎,Bottle非常适合快速整理较小的网络应用程序。你可能最终还想看看Google App Engine,这提供了一些有限的python环境非常快速的托管。

一般来说,python有很棒的Web框架,通常比PHP更快,你可以在网上和网上使用相同的技能,而PHP在网络之外几乎没用。同样使用python,你将不会学习将HTML与代码混合在一起(如在PHP中),如果你与设计师一起工作,你必须忘掉它。

答案 1 :(得分:1)

如果你愿意的话,你可以从PHP做所有事情。但老实说,你已经用Python编写了脚本,为什么不用Python也用于web呢? Django是最受欢迎的Web框架之一。如果您按照教程进行操作非常容易学习。

对于你想做的事情,Django可能有点重,但我仍然强烈推荐使用它。

在运行Asterix的服务器上,使用mod_wsgi配置Apache Web服务器,以便它可以运行Python。让你的Django包含一个form,发布到view。然后,该视图可以从您的Asterix脚本执行代码。

您将遇到的主要问题是Web不具有状态。这意味着虽然您可以非常轻松地调用函数,但维护交互式会话可能会非常困难。您的while循环将难以在HTTP会话中维护。您可以使用类似commet之类的东西来维持开放会话,但我之前没有这样做,我不知道它会有多容易。

我会先尝试一些简单的事情。有一个像这样的python脚本:

# asterix.py
def make_call(target, source):
    conn = connect_to_asterix()
    conn.make_call(target, source)

然后在你的django视图中:

# views.py
def make_call(request):
    if request.method == 'POST':
        form = AsterixForm(request, request.POST)
        if form.is_valid():
            import asterix
            asterix.make_call(form['target'], form['source'])

这将从源到目标进行调用,然后将停止处理。在此之后,您将无法与该调用进行交互(除非您返回一个允许您在asterix中进一步操作该调用的ID),但它仍然是一个可靠的起点。