Php 从命令行python脚本将星号交互程序迁移到web应用程序

Php 从命令行python脚本将星号交互程序迁移到web应用程序,php,python,web-applications,asterisk,asteriskami,Php,Python,Web Applications,Asterisk,Asteriskami,我正在尝试创建一个小的web应用程序来与Asterisk电话平台交互。有很多类似的东西在那里,但我想学习的经验,使我自己 这里是我现在拥有的:一个简单的python脚本,允许用户通过命令行与manager界面交互。脚本的基本工作原理是: 1) 连接到星号管理器界面。 2) 从CLI上的用户获取两个电话号码。 3) 发起这两个呼叫 4) 将发起的呼叫引入公共会议。 5) “while”循环等待用户输入。只允许使用a-z字符。 6) “a-z”对应于使用另一个源文件播放或“注入”会议的.WAV文件

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

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

对我来说,它有点整洁,现在我想从一个网络应用程序做同样的事情,但我不知道从哪里开始。我需要使用什么语言?我知道基本的html,并且玩过javascript。将表单输入变量传递到服务器上的python脚本需要什么技术(web服务器和asterisk服务器是同一台机器)?CGI?使用PHP怎么样?在某个时候,我可能需要了解这一点。。。如果我使用PHP,我还能“调用”python脚本并将值传递给它吗?我希望最终使用javascript,允许用户在不点击submit的情况下播放与按钮对应的声音(就像命令行版本中的角色),但现在计划让它工作。我猜这个问题也变成了“我应该学习PHP而放弃python吗?”我觉得我可以通过构建与Asterisk交互的基于web的工具(也可能是Freeswitch)来增加我目前的电话技能(并且玩得很开心……这个星号的东西真的很棒)


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

我建议将您的代码包装在一个接口中,这是用于web服务的python标准(类似于cgi,但带有函数而不是程序,因此它具有更简单的接口,可以在web服务器中预编译)

WSGI web也包含许多python web应用程序框架的链接,因此请查看它们并选择一个,或者似乎是更流行的,并且对于快速组合较小的web应用程序非常有用。您可能最终还想看看,它提供了一些受限的python环境,可以非常快速地托管

一般来说,python有很好的web框架,通常比PHP快,您可以在web上和web下使用相同的技能,而PHP在web之外基本上是无用的。同样使用python,您也不会学会将HTML与代码混合(如在PHP中),如果您与设计师一起工作,您必须忘记这一点。

如果您愿意,您可以从PHP中做任何事情。但是,老实说,您已经用Python编写了脚本,为什么不将Python也用于web呢?是世界上最流行的web框架之一。如果您按照教程进行操作,则非常容易学习

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

在运行Asterix的服务器上,使用mod_wsgi配置ApacheWeb服务器,使其能够运行Python。让您的Django包含发布到的。然后,该视图可以执行Asterix脚本中的代码

您将面临的主要问题是Web不是有状态的。这意味着,虽然可以很容易地调用函数,但维护交互式会话可能非常困难。您的
while
循环将难以在HTTP会话中维护。您可以使用类似于维护开放会话的方法,但我以前没有这样做过,我不知道这样做有多容易

我会先尝试一些简单的东西。有这样一个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,该ID允许您在asterix中进一步操作该调用),但它仍然是一个可靠的起点