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
Exemple #2
0
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')
Exemple #3
0
    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)))