使用Python为Asterisk编写fastAGI?

San*_*kar 4 python telephony asterisk agi

我想用Python编写fastAGI脚本.我已经在网上查找了很少的文档.到目前为止,我发现有pyst,pyst2,starpy非常受欢迎.但问题是,他们甚至缺乏必要的基本文档(或者至少我没有找到任何文档).我想知道是否有任何好的资源可以使用任何存在的库来开始使用python中的fastAGI编程,而不是从头开始重写所有库.

我也想知道是否有其他好的库,比如我提到的那些.

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

Rav*_*mar 6

python中有许多Asterisk Lib可用于开发FastAGI.一个是由Neil Tallim编写的Pystrix(http://code.google.com/p/pystrix/).以下是如何开发FastAgi Server的示例.

在您的拨号方案中,您将呼叫发送到FastAGI服务器:

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

创建一个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()
Run Code Online (Sandbox Code Playgroud)

如果你知道它就像CGI一样.以上代码是从Pystrix fastagi示例页面复制的.请参考那里阅读内联评论.此外,文档还不是很好,但代码干净,简洁,易于理解.跳进去试验吧.

如果您正在使用FreePBX/Elastix发行版,您可以为[from-pstn]编写拨号方案,然后在7777上测试呼叫以执行它.对于大型应用程序,您可以从Django的URL映射中获取灵感并在此处实现它.