2013-02-11 54 views
4

我想用Python编写fastAGI脚本。我在网上查了很多关于这方面的最小文档。到目前为止,我发现有相当受欢迎的pyst,pyst2starpy。但问题是,他们甚至缺乏必要的基本文档(或者至少我没有找到任何文档)。我想知道是否有任何良好的资源可以开始使用任何存在的库来代替我从头开始重写所有库的python中的快速AGI编程。使用Python为asterisk编写fastAGI?

我也想知道是否还有其他的好的库就像我刚才提到的库。

如果没有可用的东西,我的选择是什么?

回答

5

有许多星号库在Python中,您可以使用开发FastAGI。一种是Neil Tallim编写的Pystrix(http://code.google.com/p/pystrix/)。下面是如何开发FastAgi服务器的例子。

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

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

创建FastAgi服务器侦听/ TESTCALL网址:

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],然后测试呼叫得到它执行。 对于大型应用程序,您可以从Django的URL映射中获取灵感并在此处实施。

+1

这是我一直没有找到像样的东西后,我一直在使用。是的你是对的,代码看起来很干净,有很好的文档。我正在考虑扩展这个库以及... :) – 2013-02-20 02:50:46

1

你可以在这里阅读

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

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

它非常简单普通的文档,我相信你能理解基于该LIB调用。另外第二页有python的libs列表。

对于开始用星号:星号电话本书的未来http://shop.oreilly.com/product/9780596009625.do

+0

我读过那些。但是,它们无论如何都不会在Python中编写AGI脚本。 – 2013-02-12 13:01:34

+0

如果你知道任何其他资源或链接,你可以请发布... – 2013-02-12 13:11:10

+0

thoose链接已经够了。只是阅读库代码/文档,它已经足够了。确定你已阅读核心agi文档之前尝试做任何事情+阅读核心书(见上文) – arheops 2013-02-12 17:22:00