Exemple #1
0
class Digivoice():
    def __init__(self, grupo_portas_gsm='g1', intervalo=10):
        self.grupo_portas_gsm = grupo_portas_gsm
        self.manager = Manager()
        self.manager_connect = False
        self.intervalo = intervalo

    def debug(self, info):
        if DEBUG:
            logging.debug(info)

    def enviar_sms(self, lista, mysql_conn):
        ids = []

        if len(lista) != 0:
            try:
                self.manager.connect(ami_login['host'])
                self.manager.login(ami_login['user'], ami_login['secret'])
                print('Manager conectado:', self.manager.connected())

                if self.manager.connected():
                    for linha in lista:
                        telefone = linha['destino']
                        mensagem = linha['mensagem']
                        comando = 'dgv send sms {} {} "{}"'.format(
                            self.grupo_portas_gsm, telefone, mensagem)
                        self.debug('Comando: {}'.format(comando))
                        resultado = self.manager.command(comando)
                        ids.append(linha['id'])
                        self.debug(resultado.data)
                        query = "UPDATE mensagens SET enviado = 1, data_envio = '{}' WHERE id = {}".format(
                            datetime.today().strftime('%Y-%m-%d %H:%M:%S'),
                            linha['id'])
                        resultado = mysql_conn.query(query)
                        mysql_conn.commit()
                        sleep(self.intervalo)

                self.manager.logoff()

            except:
                self.debug('Falha no processo')

        else:
            self.debug('Não existem arquivos para envio SMS')

        return ids
def voice_call_generator(router, phone_number):
    print "*********************************************"
    print "voice call generator is executed"
    print "*********************************************"
    
    asterisk_mgr = Manager()
    asterisk_mgr_username = "******"
    asterisk_mgr_password = "******"
    asterisk_mgr.connect(host = '127.0.0.1', port= 5038)
    asterisk_mgr.login(asterisk_mgr_username, asterisk_mgr_password)

    channel = "SIP/alem/%s" % phone_number
    extension = "906"
    context = "outgoing"
    priority = "1"
    other_parameters = {"max_retries":"3"}

    if asterisk_mgr.connected():
        response = asterisk_mgr.originate(channel, extension, context, priority, variables = other_parameters)
        print "********** Response is  %s " % response
    else:
        print "Connection status = %s " % asterisk_mgr.connected()
Exemple #3
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