示例#1
0
文件: engine.py 项目: Ftoroplast/vt1
def make_call(call):
  manager = asterisk.manager.Manager()
  manager.lock = threading.Condition()
  try:  
    try:
	call.start = datetime.datetime.now()

        # connect to the manager
        manager.connect(settings.AST_HOST)
        manager.login(settings.AST_USER, settings.AST_PASS)

        # register some callbacks
        manager.register_event('Shutdown', handle_shutdown) # shutdown
        manager.register_event('*', lambda event, manager: handle_event(event,manager,call)) # catch all

        # get a status report
        response = manager.originate(call.channel, call.extension, call.context, settings.AST_PRIO, settings.AST_TIMEOUT_ORIGINATE * 1000, call.caller_id)
        call.response = response.get_header('Response')
        with manager.lock:
            manager.lock.wait(settings.AST_TIMEOUT_HANGUP)

    except asterisk.manager.ManagerSocketException, (errno, reason):
       msg = "Error connecting to the manager: %s" % reason
       call.disposition = msg
       raise
    except asterisk.manager.ManagerAuthException, reason:
       msg = "Error logging in to the manager: %s" % reason
       call.disposition = msg
       raise
示例#2
0
def make_call(call):
    manager = asterisk.manager.Manager()
    manager.lock = threading.Condition()
    try:
        try:
            call.start = datetime.datetime.now()

            # connect to the manager
            manager.connect(settings.AST_HOST)
            manager.login(settings.AST_USER, settings.AST_PASS)

            # register some callbacks
            manager.register_event('Shutdown', handle_shutdown)  # shutdown
            manager.register_event('*', lambda event, manager: handle_event(
                event, manager, call))  # catch all

            # get a status report
            response = manager.originate(call.channel, call.extension,
                                         call.context, settings.AST_PRIO,
                                         settings.AST_TIMEOUT_ORIGINATE * 1000,
                                         call.caller_id)
            call.response = response.get_header('Response')
            with manager.lock:
                manager.lock.wait(settings.AST_TIMEOUT_HANGUP)

        except asterisk.manager.ManagerSocketException, (errno, reason):
            msg = "Error connecting to the manager: %s" % reason
            call.disposition = msg
            raise
        except asterisk.manager.ManagerAuthException, reason:
            msg = "Error logging in to the manager: %s" % reason
            call.disposition = msg
            raise
示例#3
0
def before_each_dialer_request(*args, **kwargs):
    status, response, error_msg = 'success', '', ''

    try:
        if not manager.connected():
            manager.connect(config.ASTERISK_ADDRESS, config.ASTERISK_PORT)

            manager.login(config.ASTERISK_LOGIN, config.ASTERISK_PASSWORD)
            response = manager.send_action({
                'Action': 'Events',
                'Events': 'on',
                'EventMask': 'cdr',
            }).response
            manager.register_event('*', event_callback)
    except asterisk.manager.ManagerSocketException, (errno, reason):
        status = 'failure'
        error_msg = 'Error connecting to the manager: %s' % reason
示例#4
0
def sip_peers(plpy, ami_host):
    manager = _get_manager(plpy, ami_host)
    manager.register_event('PeerEntry', _handle_peerentry)
    manager.sippeers()
    manager.logoff()

    return_type_attributes = _get_type_fields(plpy,'peer_entry')

    result = []
    for event in manager.event_registry:
        record = {}
        for sip_header in return_type_attributes:
            record[sip_header] = event.get_header(sip_header, None)

        result.append(record)

    return result
示例#5
0
def sip_peers(plpy, ami_host):
    manager = _get_manager(plpy, ami_host)
    manager.register_event('PeerEntry', _handle_peerentry)
    manager.sippeers()
    manager.logoff()

    return_type_attributes = _get_type_fields(plpy, 'peer_entry')

    result = []
    for event in manager.event_registry:
        record = {}
        for sip_header in return_type_attributes:
            record[sip_header] = event.get_header(sip_header, None)

        result.append(record)

    return result
示例#6
0
def queue_params(plpy, ami_host, queue):
    manager = _get_manager(plpy, ami_host)
    manager.register_event('QueueParams', _handle_queue_parameter)
    manager.send_action({ACTION: 'QueueStatus', QUEUE: queue})
    manager.logoff()

    return_type_attributes = _get_type_fields(plpy, 'asterisk_queue_params')

    result = []
    for event in manager.event_registry:
        record = {}
        for sip_header in return_type_attributes:
            record[sip_header] = event.get_header(sip_header, None)

        result.append(record)

    return result
示例#7
0
def queue_params(plpy, ami_host, queue):
    manager = _get_manager(plpy, ami_host)
    manager.register_event('QueueParams', _handle_queue_parameter)
    manager.send_action({ACTION : 'QueueStatus', QUEUE : queue})
    manager.logoff()

    return_type_attributes = _get_type_fields(plpy,'asterisk_queue_params')

    result = []
    for event in manager.event_registry:
        record = {}
        for sip_header in return_type_attributes:
            record[sip_header] = event.get_header(sip_header, None)

        result.append(record)

    return result
示例#8
0
def queue_members(plpy, ami_host, queue):
    manager = _get_manager(plpy, ami_host)
    manager.register_event('QueueMember', _handle_queue_member)
    manager.send_action({ACTION: 'QueueStatus', QUEUE: queue})
    manager.logoff()

    return_type_attributes = _get_type_fields(plpy, 'asterisk_queue_member')

    #plpy.error("error")
    #plpy.fatal("fatal")
    #plpy.debug("debug")
    #plpy.notice("notice")

    result = []
    for event in manager.event_registry:
        record = {}
        for sip_header in return_type_attributes:
            record[sip_header] = event.get_header(sip_header, None)
        result.append(record)

    return result
示例#9
0
def queue_members(plpy, ami_host, queue):
    manager = _get_manager(plpy, ami_host)
    manager.register_event('QueueMember', _handle_queue_member)
    manager.send_action({ACTION : 'QueueStatus', QUEUE : queue})
    manager.logoff()

    return_type_attributes = _get_type_fields(plpy,'asterisk_queue_member')

    #plpy.error("error")
    #plpy.fatal("fatal")
    #plpy.debug("debug")
    #plpy.notice("notice")

    result = []
    for event in manager.event_registry:
        record = {}
        for sip_header in return_type_attributes:
            record[sip_header] = event.get_header(sip_header, None)
        result.append(record)

    return result
示例#10
0
    conn.commit()

def handle_test(event, manager):
    print event, event.headers

config = ConfigParser.ConfigParser()
config.read('/etc/ucall/config.ini')

ami_host = config.get('AMI', 'host')
ami_username = config.get('AMI', 'username')
ami_password = config.get('AMI', 'password')

print 'AMI host:', ami_host
print 'AMI username:'******'AMI password:'******'='*80

manager = asterisk.manager.Manager()

manager.connect(ami_host) 
manager.login(ami_username, ami_password)

#manager.register_event('Shutdown', handle_shutdown) # shutdown
#manager.register_event('Link', handle_link)
#manager.register_event('Unlink', handle_unlink)
manager.register_event('*', handle_test)
           
manager.message_loop()

manager.logoff()
示例#11
0
    print event.get_header('Event'), event.headers

    AsteriskEvent(event=event.get_header('Event'),
                  raw=str(event.headers),
                  uniqueid=uniqueid)


manager = asterisk.manager.Manager()

try:
    try:
        manager.connect(config.get('AMI', 'host'))
        manager.login(config.get('AMI', 'username'),
                      config.get('AMI', 'password'))

        manager.register_event('Shutdown', handle_shutdown)
        manager.register_event('Newstate', handle_newstate)
        manager.register_event('Hangup', handle_hangup)
        manager.register_event('Link', handle_link)
        manager.register_event('Unlink', handle_unlink)
        manager.register_event('Dial', handle_dial)
        #manager.register_event('Newstate', handle_newstate)
        #manager.register_event('*', handle_event)

        manager.message_loop()

        manager.logoff()

    except asterisk.manager.ManagerSocketException, (errno, reason):
        print "Error connecting to the manager: %s" % reason
	#
	liquidsoapfile = config.socketPath + 'liquidsoap.liq'
	try:
		with open(liquidsoapfile, "w") as text_file:
			text_file.write(get_liquidsoap_script(phone, socketPath, currentMusicNumber))
	except Exception as e:
		logger.error("Cannot rewrite liquidsoap.liq script file, error: %s" % str(e))
	cmd = "/usr/bin/liquidsoap %s" % (liquidsoapfile)
	liquidsoap_process = subprocess.Popen(cmd.split(), stderr=FNULL)
	#atexit.register(cleanup) TODO doesn work yet
	logger.debug('New call to queue, phone: %s, callid: %s, channel: %s' % (phone, callId, channel))
	time.sleep(1) # let liquidsoap open socket
	socket_connect()
	manager.connect('127.0.0.1') 
	manager.login('admin', 'admin')
	manager.register_event('DTMF', on_dtmf)
	manager.register_event('QueueEntry', on_queueentry)
	get_queue_status_periodic()
	
except asterisk.manager.ManagerSocketException as err:
	errno, reason = err
	logger.error("Error connecting to the manager: %s" % reason)
	sys.exit(1)
except asterisk.manager.ManagerAuthException as reason:
	logger.error("Error login in to the manager: %s" % reason)
	sys.exit(1)
except asterisk.manager.ManagerException as reason:
	logger.error("Error: %s" % reason)
	sys.exit(1)

示例#13
0
文件: ami2stomp.py 项目: gryzz/uCall
#try:
manager.connect(ami_host)
manager.login(ami_username, ami_password)
manager.destination = stomp

asteriskProtocolVersion = None
if manager.version == '1.0':
    asteriskProtocolVersion = Protocol.ASTERISK_1_0
elif manager.version == '1.1':
    asteriskProtocolVersion = Protocol.ASTERISK_1_1
else:
    sys.exit()

command_handler = CommandHandlerFactory(asteriskProtocolVersion).create_command_handler()

manager.register_event('Shutdown', command_handler.handle_Shutdown)
manager.register_event('Hangup', command_handler.handle_Hangup)
manager.register_event('Link', command_handler.handle_Link)
manager.register_event('Bridge', command_handler.handle_Bridge)
manager.register_event('Dial', command_handler.handle_Dial)
manager.register_event('Newstate', command_handler.handle_Newstate)
manager.register_event('QueueMemberAdded', command_handler.handle_QueueMemberAdded)
manager.register_event('QueueMemberRemoved', command_handler.handle_QueueMemberRemoved)
manager.register_event('QueueMemberPaused', command_handler.handle_QueueMemberPaused)
manager.register_event('QueueMember', command_handler.handle_QueueMember)

manager.message_loop()

manager.logoff()

#except asterisk.manager.ManagerSocketException, (errno, reason):
示例#14
0
manager.connect(ami_host)
manager.login(ami_username, ami_password)
manager.destination = stomp

asteriskProtocolVersion = None
if manager.version == '1.0':
    asteriskProtocolVersion = Protocol.ASTERISK_1_0
elif manager.version == '1.1':
    asteriskProtocolVersion = Protocol.ASTERISK_1_1
else:
    sys.exit()

command_handler = CommandHandlerFactory(
    asteriskProtocolVersion).create_command_handler()

manager.register_event('Shutdown', command_handler.handle_Shutdown)
manager.register_event('Hangup', command_handler.handle_Hangup)
manager.register_event('Link', command_handler.handle_Link)
manager.register_event('Bridge', command_handler.handle_Bridge)
manager.register_event('Dial', command_handler.handle_Dial)
manager.register_event('Newstate', command_handler.handle_Newstate)
manager.register_event('QueueMemberAdded',
                       command_handler.handle_QueueMemberAdded)
manager.register_event('QueueMemberRemoved',
                       command_handler.handle_QueueMemberRemoved)
manager.register_event('QueueMemberPaused',
                       command_handler.handle_QueueMemberPaused)
manager.register_event('QueueMember', command_handler.handle_QueueMember)

manager.message_loop()
示例#15
0
    manager.close()


    # we could analize the event and reconnect here
def handle_event(event, manager):
    print("Recieved event: %s" % event.name)


manager = asterisk.manager.Manager()
try:
    # connect to the manager
    try:
        manager.connect('190.117.113.7')
        manager.login('richar', '@admjds.progressive')
        # register some callbacks
        manager.register_event('Shutdown', handle_shutdown)  # shutdown
        manager.register_event('*', handle_event)  # catch all
        # get a status report
        response = manager.status()
        manager.logoff()
    except asterisk.manager.ManagerSocketException as e:
        print("Error connecting to the manager: %s" % e.strerror)
        sys.exit(1)
    except asterisk.manager.ManagerAuthException as e:
        print("Error logging in to the manager: %s" % e.strerror)
        sys.exit(1)
    except asterisk.manager.ManagerException as e:
        print("Error: %s" % e.strerror)
        sys.exit(1)
finally:
    manager.close()
示例#16
0
            mc.delete("to_speaker")


try:
    # Первоначальная инициализация
    to_speaker = ""
    manager = asterisk.manager.Manager()
    manager.connect('127.0.0.1', port=5038)
    manager.login('asterisk', '*******')

    # Если скрипт запущен в тестовом режиме из консоли с передачей параметра test
    if len(sys.argv) > 1 and str(sys.argv[1]) == "test":
        # Слушаем все события
        # manager.register_event('*', handle_event)
        # Слушаем события в Asterisk, передаём в обработку 'Newstate', 'Hangup', 'Bridge' при входящих звонках
        manager.register_event('Newstate', handle_event)
        manager.register_event('Hangup', handle_event)
        manager.register_event('BridgeEnter', handle_event)

    # Если запуск боевой (не тестовый)
    else:
        # Слушаем события в Asterisk, передаём в обработку 'Newstate', 'Hangup', 'Bridge' при входящих звонках
        manager.register_event('Newstate', handle_event)
        manager.register_event('Hangup', handle_event)
        manager.register_event('BridgeEnter', handle_event)

    # Переменная счётчик звонков телефона (сколько раз прозвенел аппарате телефона при текущем входящем вызове)
    count_rings = 0

    while True:
        # Если есть, что произнести в колонки
示例#17
0
    def ami_connection_loop(self):
        while True:
            if self.stopped.is_set():
                return
            self.ami_manager = None
            try:
                # Create PBX connection
                manager = manager = asterisk.manager.Manager()
                logging.debug('Connecting to {}:{} with {}:{}'.format(
                    self.settings.get('AsteriskHost'),
                    self.settings.get('AmiPort'),
                    self.settings.get('AsteriskLogin'),
                    self.settings.get('AsteriskPassword'),
                ))
                manager.connect(
                    str(self.settings.get('AsteriskHost')),
                    port = int(self.settings.get('AmiPort'))
                )
                manager.login(
                    self.settings.get('AsteriskLogin'),
                    self.settings.get('AsteriskPassword')
                )
                logging.info('Managed connected.')
                manager.register_event('PeerStatus', self.handle_asterisk_event)
                manager.register_event('UserEvent', self.handle_asterisk_event)
                manager.register_event('VarSet', self.handle_asterisk_event)
                manager.register_event('Newchannel', self.handle_asterisk_event)
                manager.register_event('NewConnectedLine', self.handle_asterisk_event)
                manager.register_event('Newstate', self.handle_asterisk_event)
                manager.register_event('Hangup', self.handle_asterisk_event)
                self.ami_manager = manager
                self.ami_disconnected.clear()
                self.ami_connected.set()
                self.ami_disconnected.wait()

            except asterisk.manager.ManagerSocketException as e:
                logging.error("Error connecting to the manager: %s" % e)
            except asterisk.manager.ManagerAuthException as e:
                logging.error("Error logging in to the manager: %s" % e)
            except asterisk.manager.ManagerException as e:
                logging.error("Error: %s" % e)

            logging.info('Reconnecting AMI.')
            gevent.sleep(self.settings.get('AmiReconnectTimeout'))
示例#18
0
	srcuniqueid=event.get_header('Uniqueid')
    except:
	srcuniqueid=None

    print event.get_header('Event'), event.headers
    
    AsteriskEvent(event=event.get_header('Event'), raw=str(event.headers), uniqueid=uniqueid)

manager = asterisk.manager.Manager()

try:
    try:
	manager.connect(config.get('AMI', 'host')) 
        manager.login(config.get('AMI', 'username'), config.get('AMI', 'password'))

        manager.register_event('Shutdown', handle_shutdown)
        manager.register_event('Newstate', handle_newstate)
        manager.register_event('Hangup', handle_hangup)
        manager.register_event('Link', handle_link)
        manager.register_event('Unlink', handle_unlink)
        manager.register_event('Dial', handle_dial)
        #manager.register_event('Newstate', handle_newstate)
        #manager.register_event('*', handle_event)

	manager.message_loop()

        manager.logoff()

    except asterisk.manager.ManagerSocketException, (errno, reason):
	print "Error connecting to the manager: %s" % reason
示例#19
0
文件: ami2stomp.py 项目: frutik/uCall
asteriskProtocolVersion = None
if manager.version == '1.0':
    asteriskProtocolVersion = Protocol.ASTERISK_1_0
elif manager.version == '1.1':
    asteriskProtocolVersion = Protocol.ASTERISK_1_1
else:
    sys.exit()

#command_handler = CommandHandlerFactory.create_command_handler_by_protocol(asteriskProtocolVersion)
command_handler = CommandHandlerFactory.create_command_handler_by_key(Protocol.QUEUE_1_6)

print type(command_handler)

for command in command_handler.get_commands():
    print 'Binding', command
    manager.register_event(command, getattr(command_handler, 'handle_' + command))

manager.message_loop()

manager.logoff()

#except asterisk.manager.ManagerSocketException, (errno, reason):
#    print "Error connecting to the manager: %s" % reason

#except asterisk.manager.ManagerAuthException, reason:
#    print "Error logging in to the manager: %s" % reason

#except asterisk.manager.ManagerException, reason:
#    print "Error: %s" % reason

#except:
示例#20
0
    def ami_connection_loop(self):
        while True:
            if self.stopped.is_set():
                return
            try:
                # Create PBX connection
                manager = asterisk.manager.Manager()
                logger.info(u'Connecting to {}:{} with {}:{}.'.format(
                    self.asterisk_host, self.ami_port,
                    self.ami_user,
                    self.ami_password[0] + '******' + self.ami_password[-1:]))
                #
                manager.connect(str(self.asterisk_host),
                                port=int(self.ami_port))
                manager.login(self.ami_user, self.ami_password)
                logger.info(u'Connected to AMI.')
                # Register for events
                manager.register_event('VarSet', self.on_asterisk_event)
                manager.register_event('Hangup', self.on_asterisk_event)
                manager.register_event('Cdr', self.on_asterisk_event)
                manager.register_event('Newchannel', self.on_asterisk_event)
                manager.register_event('Newstate', self.on_asterisk_event)
                manager.register_event('NewConnectedLine', self.on_asterisk_event)
                manager.register_event('OriginateResponse', self.on_asterisk_event)
                if os.getenv('DISABLE_EVENT_AGENT_CALLED') != '1':
                    manager.register_event('AgentCalled',
                                           self.on_asterisk_event)
                manager.register_event('UserEvent', self.on_asterisk_event)
                self.ami_manager = manager
                self.ami_disconnected.clear()
                self.ami_connected.set()
                self.ami_disconnected.wait()
                logger.info('AMI disconnected.')

            except asterisk.manager.ManagerSocketException as e:
                logger.error("Error connecting AMI %s:%s: %s",
                             self.asterisk_host, self.ami_port, e)
            except asterisk.manager.ManagerAuthException as e:
                logger.error("Error logging in to the manager: %s" % e)
            except asterisk.manager.ManagerException as e:
                logger.error("Error: %s" % e)
            except Exception as e:
                logger.exception('AMI error:')

            logger.info(u'Reconnecting AMI.')
            gevent.sleep(float(os.environ.get('AMI_RECONNECT_TIMEOUT', '1')))