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

1 投票
2 回答
854 浏览
提问于 2025-04-16 12:07

我正在尝试创建一个小型网页应用程序,用来与Asterisk电话平台进行互动。网上有很多类似的东西,但我想自己动手做,体验一下学习的乐趣。

现在我有的东西是:一个简单的Python脚本,可以让用户通过命令行与管理界面进行交互。这个脚本的工作流程大致是这样的: 1) 连接到Asterisk管理接口。 2) 从命令行获取两个电话号码。 3) 发起这两个电话。 4) 将这两个电话放入一个共同的会议中。 5) 一个“while”循环等待用户输入。只允许输入字母a-z。 6) 输入的“a-z”对应一些.WAV文件,这些文件会通过发起另一个本地分机的方式播放或“注入”到会议中。

对我来说,这个过程挺有意思的,现在我想在网页应用中实现同样的功能,但我不知道从哪里开始。我需要使用什么语言呢?我知道一些基本的HTML,也玩过JavaScript。要把表单输入的变量传递给服务器上的Python脚本,需要用什么技术呢?CGI?那PHP呢?我可能在某个时候需要学习PHP……如果我用PHP,能否“调用”Python脚本并传递值给它?我希望最终能用JavaScript,让用户点击按钮时播放对应的声音(就像命令行版本中的字符一样),但现在先想让它能正常工作。我想这问题也变成了“我应该只学PHP而放弃Python吗?”我觉得如果能构建与Asterisk互动的网页工具(也许还有Freeswitch),我可以大大提升自己的电话技能(而且会很有趣……这Asterisk的东西真好玩)。

任何提示或指导都将非常感谢。

2 个回答

1

我建议你把现有的代码放到一个叫做 wsgi 的接口里。这个接口是Python用来做网页服务的标准,类似于 cgi,但它用的是函数而不是程序,所以界面更简单,而且可以在网页服务器上预编译。

WSGI网站上有很多Python网页应用框架的链接,你可以看看,选择一个适合你的。比如 DjangoPylons 或者 TurboGears 都是比较受欢迎的选择,而 Bottle 非常适合快速搭建小型网页应用。你可能还想看看 Google App Engine,它提供了一个限制较多但速度很快的Python环境。

总的来说,Python有很棒的网页框架,通常比PHP快,而且你在网页上和网页外都能用同样的技能,而PHP在网页外基本没什么用。此外,使用Python的话,你不会像用PHP那样把HTML和代码混在一起,这样如果以后和设计师合作,你就不用再去适应这种混合的方式了。

1

其实,你完全可以用PHP来做所有事情。但说实话,你已经用Python写好了脚本,为什么不直接用Python来处理网页的部分呢?Django是目前最流行的网页框架之一。如果你跟着教程学的话,学起来非常简单。

Django可能对你想做的事情来说有点重,但我还是强烈推荐你使用它。

在你运行Asterix的服务器上,配置Apache网页服务器和mod_wsgi,这样它就可以运行Python了。让你的Django包含一个表单,这个表单会提交到一个视图。然后这个视图可以执行你Asterix脚本中的代码。

你会遇到的主要问题是,网页是无状态的。这意味着虽然你可以很容易地调用一个函数,但保持一个互动的会话会比较困难。你的while循环在HTTP会话中会很难维持。你可以使用类似comet的东西来保持一个开放的会话,但我之前没有做过这个,不知道实现起来会有多简单。

我建议你先尝试一些简单的东西。可以写一个这样的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'])

这样会从源头调用目标,然后停止处理。之后你就无法再与这个调用互动了(除非你返回一个ID,这样你可以在Asterix中进一步操作这个调用),但这仍然是一个很好的起点。

撰写回答