Jump to content

Recommended Posts

  • 3 months later...
Posted (edited)

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^
Posted

кто-нибудь пользуется 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.

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.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.