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()
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