用Python为Asterisk编程fastAGI?

2024-04-26 04:34:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python编写fastAGI脚本。我查遍了整个网络,发现关于这个的文档非常少。到目前为止,我发现有pystpyst2starpy是非常流行的。但问题是,他们甚至缺乏基本的文档(或者至少我没有找到任何)。我想知道是否有好的资源可以开始使用python中的fastAGI编程,使用任何现有的库,而不是从头重写所有内容。

我还想知道是否还有其他像我提到的那样好的库。

如果什么都没有,我有什么选择?


Tags: 文档网络脚本内容编程资源pystpyst2
2条回答

你可以在这里读普通的医生

http://www.voip-info.org/wiki/view/Asterisk+FastAGI

http://www.voip-info.org/wiki/view/Asterisk+AGI

很简单,我相信您可以理解基于此的lib调用。第二页还有python的lib列表。

从星号开始:星号电话簿的未来http://shop.oreilly.com/product/9780596009625.do

python中有许多星号库,可以用来开发FastAGI。一个是尼尔·塔利姆的《皮斯特里克斯》(http://code.google.com/p/pystrix/)。下面是关于如何开发FastAgi服务器的示例。

在dialplan中,您将呼叫发送到FastAGI服务器:

[some-context]
exten => 567567,1,NoOp()
exten => s,n,AGI(agi://host:port/testcall)
exten => s,n,Hangup()

创建要侦听的FastAgi服务器/testcall url:

import pystrix
class FastAGIServer(threading.Thread):
    _fagi_server = None
    def __init__(self):
        threading.Thread.__init__(self)
        self.daemon = True
        self._fagi_server = pystrix.agi.FastAGIServer()
        self._fagi_server.register_script_handler(re.compile('testcall'), self._testcall_handler)
        self._fagi_server.register_script_handler(None, self._fallback_handler)

    def _testcall_handler(self, agi, args, kwargs, match, path):
        agi.execute(pystrix.agi.core.Answer())
        response = agi.execute(pystrix.agi.core.StreamFile('demo-thanks', escape_digits=('1', '2')))
        agi.execute(pystrix.agi.core.Hangup())

    def _fallback_handler(self, agi, args, kwargs, match, path):
        # Do something here
    def kill(self):
        self._fagi_server.shutdown()
    def run(self):
        self._fagi_server.serve_forever()

if __name__ == '__main__':
    fastagi_core = FastAGIServer()
    fastagi_core.start()
    while fastagi_core.is_alive():
        time.sleep(1)
    fastagi_core.kill()

如果你知道的话,它就像CGI。以上代码是从Pystrix fastagi示例页复制的。请参阅此处阅读内联注释。另外,文档还不是很好,但是代码是干净的、简洁的、易于理解的。跳进去做实验。

如果您使用的是FreePBX/Elastix发行版,则可以为[来自pstn]编写拨号计划,然后在7777上测试呼叫以执行该计划。 对于大型应用程序,您可以从Django的URL映射中获得一些灵感,并在这里实现它。

相关问题 更多 >