【问题标题】:Migrating an Asterisk interaction program to a web app from a command line python script从命令行 python 脚本将 Asterisk 交互程序迁移到 Web 应用程序
【发布时间】:2011-06-30 07:19:12
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php python web-applications asterisk asteriskami


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      如果你愿意,可以用 PHP 做任何事情。但老实说,你已经用 Python 编写了脚本,为什么不把 Python 也用于 Web 的东西呢? Django 是目前最流行的 Web 框架之一。如果您按照教程进行操作,将非常容易学习。

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

      在您运行 Asterix 的服务器上,使用 mod_wsgi 配置 Apache Web 服务器,以便它可以运行 Python。让你的 Django 包含一个form,该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'])
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 1970-01-01
        相关资源
        最近更新 更多