def _existe_family_key(self, family, key): """Consulta en la base de datos si existe la family y clave""" try: client = AsteriskHttpClient() client.login() db_get = client.asterisk_db("DBGet", family, key=key) except AsteriskHttpAsteriskDBError: return False if db_get.response_value == 'success': return True
def logout_view(request): """Vista para desloguear el agente de django y de asterisk""" if request.user.is_agente and request.user.get_agente_profile(): agente = request.user.get_agente_profile() variables = { 'AGENTE': str(agente.sip_extension), 'AGENTNAME': "{0}_{1}".format(agente.id, request.user.get_full_name()) } # Deslogueo el agente de asterisk via AMI try: client = AsteriskHttpClient() client.login() client.originate("Local/066LOGOUT@oml-agent-actions/n", "oml-agent-actions", True, variables, True, aplication='Hangup') except AsteriskHttpOriginateError: logger.exception( _("Originate failed - agente: {0} ".format(agente))) except Exception as e: logger.exception( _("Originate failed {0} - agente: {1}".format(e, agente))) logout(request) return redirect('login')
def call_originate(self, agente, campana_id, tipo_campana, contacto_id, telefono, click2call_type): variables = { 'IdCamp': str(campana_id), 'codCli': str(contacto_id), 'origin': click2call_type, 'Tipocamp': tipo_campana, 'FTSAGENTE': "{0}_{1}".format(agente.id, agente.user.get_full_name()) } channel = "Local/{0}@click2call/n".format(agente.sip_extension) # Genero la llamada via originate por AMI try: client = AsteriskHttpClient() client.login() client.originate(channel, "from-oml", False, variables, True, exten=telefono, priority=1, timeout=45000) except AsteriskHttpOriginateError: error = _("Originate failed - contacto: {0} ".format(telefono)) logger.exception(error) return error except Exception as e: error = _("Originate failed by {0} - contacto: {1}".format( e, telefono)) logger.exception(error) return error
def queue_member_delete_view(request, pk_queuemember, pk_campana): """Elimina agente asignado en la campana""" queue_member = QueueMember.objects.get(pk=pk_queuemember) agente = queue_member.member queue_member.delete() campana = Campana.objects.get(pk=pk_campana) # ahora vamos a remover el agente de la cola de asterisk queue = "{0}_{1}".format(campana.id, campana.nombre) interface = "SIP/{0}".format(agente.sip_extension) sip_agentes_logueados = obtener_sip_agentes_sesiones_activas() if agente.sip_extension in sip_agentes_logueados: try: client = AsteriskHttpClient() client.login() client.queue_remove(queue, interface) except AsteriskHttpQueueRemoveError: logger.exception( _("QueueRemove failed - agente: {0} de la campana: {1} ". format(agente, campana))) activar_cola() return HttpResponseRedirect( reverse('queue_member_campana', kwargs={"pk_campana": pk_campana}))
def _regenero_trunks_ruta(self, ruta): """ Regenero las entradas para los trunks en la ruta /OML/OUTR/XX/TRUNK/N donde xx es la id de la ruta y N el numero de troncal """ # regenero lo datos de los troncales troncales = self._obtener_troncales_ordenados(ruta) for orden, troncal in troncales: logger.info( _("Creando familys para troncales {0}".format( troncal.troncal.id))) try: client = AsteriskHttpClient() client.login() family = self._get_nombre_family(ruta) key = "TRUNK/{0}".format(orden) val = troncal.troncal.id client.asterisk_db("DBPut", family, key=key, val=val) except AsteriskHttpAsteriskDBError: logger.exception( _("Error al intentar DBPut al insertar" " en la family {0} la siguiente key={1}" " y val={2}".format(family, key, val)))
def _call_without_campaign(self, agente, tipo_destino, numero): variables = { 'origin': 'withoutCamp', 'FTSAGENTE': "{0}_{1}".format(agente.id, agente.user.get_full_name()) } if tipo_destino == self.AGENT: context = 'oml-dial-internal' exten = self.AGENT variables['agent2Call'] = numero else: # tipo_destino == self.EXTERNAL context = 'oml-dial-out' exten = numero channel = "Local/{0}@click2call/n".format(agente.sip_extension) # Genero la llamada via originate por AMI try: client = AsteriskHttpClient() client.login() client.originate(channel, context, False, variables, True, exten=exten, priority=1, timeout=45000) except AsteriskHttpOriginateError: error = _("Originate failed - tipo_destino: {0} - numero {1}".format( tipo_destino, numero)) logger.exception(error) return error except Exception as e: error = _("Originate failed by {0} - tipo_destino: {1} - numero {2}".format( e, tipo_destino, numero)) logger.exception(error) return error
def _delete_tree_family(self, family, ignorar_error_no_encontrado=False): """Elimina el tree de la family pasada por parametro""" try: client = AsteriskHttpClient() client.login() client.asterisk_db_deltree(family) except AsteriskHttpAsteriskDBError as e: if (e.args[0] == 'Database entry not found' and ignorar_error_no_encontrado): return logger.exception(_("Error al intentar DBDelTree de {0}".format(family)))
def remover_agente_cola_asterisk(campana, agente): queue = "{0}_{1}".format(campana.id, campana.nombre) interface = "PJSIP/{0}".format(agente.sip_extension) sip_agentes_logueados = obtener_sip_agentes_sesiones_activas() if agente.sip_extension in sip_agentes_logueados: try: client = AsteriskHttpClient() client.login() client.queue_remove(queue, interface) except AsteriskHttpQueueRemoveError: logger.exception( _("QueueRemove failed - agente: {0} de la campana: {1} ". format(agente, campana)))
def _create_family(self, family_member): """Crea family en database de asterisk """ client = AsteriskHttpClient() client.login() family = self._get_nombre_family(family_member) logger.info(_("Creando familys para la family {0}".format(family))) variables = self._create_dict(family_member) for key, val in variables.items(): try: client.asterisk_db("DBPut", family, key, val=val) except AsteriskHttpAsteriskDBError: logger.exception(_("Error al intentar DBPut al insertar" " en la family {0} la siguiente key={1}" " y val={2}".format(family, key, val)))
def adicionar_agente_cola(agente, queue_member, campana): """Adiciona agente a la cola de su respectiva campaña""" queue = "{0}_{1}".format(campana.id, campana.nombre) interface = "PJSIP/{0}".format(agente.sip_extension) penalty = queue_member.penalty paused = queue_member.paused member_name = "{0}_{1}_{2}".format(agente.id, agente.user.first_name, agente.user.last_name) try: client = AsteriskHttpClient() client.login() client.queue_add(queue, interface, penalty, paused, member_name) except AsteriskHttpQueueAddError: logger.exception( _("QueueAdd failed - agente: {0} de la campana: {1} ".format( agente, campana)))