Exemple #1
0
 def _obtener_agentes_activos_ami(self):
     manager = Manager()
     ami_manager_user = settings.ASTERISK['AMI_USERNAME']
     ami_manager_pass = settings.ASTERISK['AMI_PASSWORD']
     ami_manager_host = str(
         settings.OML_ASTERISK_HOSTNAME.replace('root@', ''))
     agentes_activos = []
     try:
         manager.connect(ami_manager_host)
         manager.login(ami_manager_user, ami_manager_pass)
         agentes_activos_raw = self._parsear_datos_agentes_pasada_1(
             self._ami_obtener_agentes(manager))
         agentes_activos = self._parsear_datos_agentes_pasada_2(
             agentes_activos_raw)
     except ManagerSocketException as e:
         logger.exception("Error connecting to the manager: {0}".format(
             e.message))
     except ManagerAuthException as e:
         logger.exception("Error logging in to the manager: {0}".format(
             e.message))
     except ManagerException as e:
         logger.exception("Error {0}".format(e.message))
     finally:
         manager.close()
         return agentes_activos
    def _obtener_llamadas_en_espera_raw(self):
        manager = Manager()
        ami_manager_user = settings.ASTERISK['AMI_USERNAME']
        ami_manager_pass = settings.ASTERISK['AMI_PASSWORD']
        ami_manager_host = str(settings.OML_ASTERISK_HOSTNAME.replace('root@', ''))
        queue_status_raw = {}
        try:
            manager.connect(ami_manager_host)
            manager.login(ami_manager_user, ami_manager_pass)
            queue_status_raw = manager.send_action({"Action": "QueueStatus"}).data

        except ManagerSocketException as e:
            logger.exception("Error connecting to the manager: {0}".format(e.message))
        except ManagerAuthException as e:
            logger.exception("Error logging in to the manager: {0}".format(e.message))
        except ManagerException as e:
            logger.exception("Error {0}".format(e.message))
        finally:
            manager.close()
            return queue_status_raw
Exemple #3
0
 def _ami_manager(self, action, content):
     error = False
     data_returned = ''
     manager = Manager()
     ami_manager_user = settings.ASTERISK['AMI_USERNAME']
     ami_manager_pass = settings.ASTERISK['AMI_PASSWORD']
     ami_manager_host = str(settings.ASTERISK_HOSTNAME)
     try:
         manager.connect(ami_manager_host)
         manager.login(ami_manager_user, ami_manager_pass)
         data_returned = self._ami_action(manager, action, content)
         manager.close()
     except ManagerSocketException as e:
         logger.exception("Error connecting to the manager: {0}".format(e))
         error = True
     except ManagerAuthException as e:
         logger.exception("Error logging in to the manager: {0}".format(e))
         error = True
     except ManagerException as e:
         logger.exception("Error {0}".format(e))
         error = True
     return data_returned, error
Exemple #4
0
class AMIManagerConnector(object):
    """Establece la conexión AMI utilizando la librería pyst2, para manipular asterisk
    """
    def __init__(self):
        self.manager = Manager()
        self.disconnected = False

    def connect(self):
        error = False
        ami_manager_user = settings.ASTERISK['AMI_USERNAME']
        ami_manager_pass = settings.ASTERISK['AMI_PASSWORD']
        ami_manager_host = str(settings.ASTERISK_HOSTNAME)
        try:
            self.manager.connect(ami_manager_host)
            self.manager.login(ami_manager_user, ami_manager_pass)
        except ManagerSocketException as e:
            logger.exception("Error connecting to the manager: {0}".format(e))
            error = True
        except ManagerAuthException as e:
            logger.exception("Error logging in to the manager: {0}".format(e))
            error = True
        except ManagerException as e:
            logger.exception("Error {0}".format(e))
            error = True
        return error

    def disconnect(self):
        # Atención: El Manager solo permite una sola conexión
        self.manager.close()
        self.disconnected = True

    # TODO: Refactorizar esta clase. Nombres mas descriptivos.
    #       Permitir ejecutar varios comandos con la misma sesion.
    def _ami_manager(self, action, content):
        if self.disconnected:
            raise OmlError(
                message='La conexión del Asterisk Manager ya ha sido cerrada')
        if not self.manager.connected():
            raise OmlError(message='El Asterisk Manager no ha sido conectado')

        error = False
        data_returned = ''
        try:
            data_returned = self._ami_action(action, content)
        except ManagerSocketException as e:
            logger.exception("Error connecting to the manager: {0}".format(e))
            error = True
        except ManagerAuthException as e:
            logger.exception("Error logging in to the manager: {0}".format(e))
            error = True
        except ManagerException as e:
            logger.exception("Error {0}".format(e))
            error = True
        return data_returned, error

    def _ami_action(self, action, content):
        if action == 'command':
            data_returned = self.manager.command(content).data
        elif action == 'QueueAdd':
            event_queuelog = 'ADDMEMBER'
            for i in range(len(content[2])):
                dict = {
                    'Action': action,
                    'Queue': content[2][i],
                    'Interface': content[4],
                    'Penalty': content[3][i],
                    'Paused': 0,
                    'MemberName': content[1]
                }
                data_returned = self.manager.send_action(dict)
        elif action == 'QueueRemove':
            event_queuelog = 'REMOVEMEMBER'
            for i in range(len(content[2])):
                dict = {
                    'Action': action,
                    'Queue': content[2][i],
                    'Interface': content[4],
                }
                data_returned = self.manager.send_action(dict)
        elif action == 'QueuePause':
            if content[6] == 'true':
                event_queuelog = 'PAUSEALL'
            elif content[6] == 'false':
                event_queuelog = 'UNPAUSEALL'
            dict = {
                'Action': action,
                'Interface': content[4],
                'Paused': content[6],
            }
            data_returned = self.manager.send_action(dict)
        elif action == 'dbput':
            family = content[0]
            key = content[1]
            value = content[2]
            data_returned = self.manager.dbput(family, key, value)
        elif action == 'originate':
            channel = content[0]
            exten = content[1]
            data_returned = self.manager.originate(channel,
                                                   exten,
                                                   context=content[2],
                                                   priority=1,
                                                   timeout='25000',
                                                   variables=content[3])
        if action == 'QueueAdd' or action == 'QueueRemove' or action == 'QueuePause':
            dict = {
                'Action': 'QueueLog',
                'Queue': 'ALL',
                'Event': event_queuelog,
                'Uniqueid': 'MANAGER',
                'Interface': content[0]
            }
            if action == 'QueuePause':
                dict['Message'] = content[5]
            data_returned = self.manager.send_action(dict)
        return data_returned