Jump to content
Калькуляторы

asterisk pbx_lua кто-нибудь использует?

update: вообщем, fastagi - весьма удобная вещь. взял свежий astpy и прикрутил к gevent и теперь счастлив. код без лапши из коллбэков, на каждый новый коннект создаётся новый greenlet.

 

выглядит примерно так в диалплане:

 

exten => _520.,1,AGI(agi://127.0.0.1:4577/fourdigit)

 

со стороны python:

#!/usr/bin/env python26
import gevent
from gevent.server import StreamServer
from gevent.backdoor import BackdoorServer
from gevent import monkey; monkey.patch_all()
from asterisk.agi import AGI


def fourdigit(address,agi):
try:
 print address[0],agi.env['agi_channel'],agi.env['agi_callerid'],'=>',agi.env['agi_extension'], agi.get_full_variable('${DEVICE_STATE(SIP/${EXTEN})}')
except:
 pass

def dispatch_req(socket, address):
    fileobj = socket.makefile()
    agiobj = AGI(stdin=fileobj, stdout=fileobj, stderr=nullerr)
    if 'agi_network_script' in agiobj.env:
     func_name = agiobj.env['agi_network_script']
     if func_name in globals(): 
      globals()[func_name](address,agiobj)
    fileobj.close()

if __name__ == '__main__':
   console = BackdoorServer( ('127.0.0.1', 8823), locals = locals() )
   cpid = gevent.spawn(console.serve_forever)
   nullerr = open('/dev/null','wb')
   tcpport = 4577
   server = StreamServer(('0.0.0.0', tcpport), dispatch_req)
   print ('Starting agi on port %s' % str(tcpport) )
   server.serve_forever()

Edited by ^rage^

Share this post


Link to post
Share on other sites

кто-нибудь пользуется fastagi? или же "только extensions.conf и func_odbc, только харкдор!"?

 

ради эксперимента сделал обновление кода на лету. т.е. можно не перезапуская процесс заменить, допустим,

тело функции fourdigit или же добавить новые.

 

вообще, в asterisk есть такая вещь как async agi. работает она следующим образом:

сначала подключаемся к AMI и подписываемся на Event'ы. В диалплане пишете AGI(agi:async) в интересующих нас местах.

когда обработка диалплана доходит до AGI(agi:async), происходит следующее:

 

That will put the channel to wait AGI commands. The channel will NOT do anything but wait for Hangup or any AGI command you ask it to execute.

 

Action: AGI
Channel: SIP/33-blah
Command: EXEC Playback tt-monkeys
CommandID: MyCommandID

по результатам мы получим Event с MyCommandID. т.е. оно идеально ложится на message passing. берем zeromq, epgm-транспорт и pubsub.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.