Ejemplo n.º 1
0
 def form_valid(self, form):
     campana = Campana.objects.get(pk=self.kwargs['pk_campana'])
     grupo_id = form.cleaned_data.get('grupo')
     grupo = Grupo.objects.get(pk=grupo_id)
     sip_agentes_logueados = obtener_sip_agentes_sesiones_activas()
     # agentes = grupo.agentes.filter(reported_by=self.request.user)
     agentes = grupo.agentes.filter(is_inactive=False)
     agentes_logueados_grupo = agentes.filter(
         sip_extension__in=sip_agentes_logueados)
     # agrega los agentes a la campana siempre cuando no se encuentren agregados
     try:
         with transaction.atomic():
             for agente in agentes:
                 queue_member, created = QueueMember.objects.get_or_create(
                     member=agente,
                     queue_name=campana.queue_campana,
                     defaults=QueueMember.get_defaults(agente, campana))
                 if created and (agente in agentes_logueados_grupo):
                     adicionar_agente_cola(agente, queue_member, campana)
             activar_cola()
     except Exception as e:
         message = _("<strong>Operación Errónea!</strong> "
                     "No se pudo confirmar la creación del dialplan debido "
                     "al siguiente error: {0}".format(e))
         messages.add_message(
             self.request,
             messages.ERROR,
             message,
         )
     return super(GrupoAgenteCreateView, self).form_valid(form)
 def _asignar_agente_a_campana(self, agente, campana, penalty=0):
     try:
         client = AmiManagerClient()
         client.connect()
         with transaction.atomic():
             queue_member = QueueMember(penalty=penalty)
             queue_member_defaults = QueueMember.get_defaults(
                 agente, campana)
             queue_member.member = agente
             queue_member.queue_name = campana.queue_campana
             queue_member.id_campana = queue_member_defaults['id_campana']
             queue_member.membername = queue_member_defaults['membername']
             queue_member.interface = queue_member_defaults['interface']
             # por ahora no definimos 'paused'
             queue_member.paused = queue_member_defaults['paused']
             queue_member.save()
             # adicionamos el agente a la cola actual que esta corriendo
             sip_agentes_logueados = obtener_sip_agentes_sesiones_activas()
             adicionar_agente_activo_cola(queue_member, campana,
                                          sip_agentes_logueados, client)
             activar_cola()
         client.disconnect()
     except Exception as e:
         print("Can't assign agent to campaign due to {0}".error(e))
         raise e
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 remover_agente_cola_asterisk(campana, agente, client):
    queue = campana.get_queue_id_name()
    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.queue_remove(queue, interface)
        except AMIManagerConnectorError:
            logger.exception(
                _("QueueRemove failed - agente: {0} de la campana: {1} ".
                  format(agente, campana)))
    def form_valid(self, form):
        campana = Campana.objects.get(pk=self.kwargs['pk_campana'])
        self.object = form.save(commit=False)
        # valido que este agente no se encuentre agregado en esta campana
        existe_member = QueueMember.objects.\
            existe_member_queue(self.object.member, campana.queue_campana)

        if existe_member:
            message = _('Operación Errónea! \
            Este miembro ya se encuentra en esta cola')
            messages.add_message(
                self.request,
                messages.ERROR,
                message,
            )
            return self.form_invalid(form)
        else:
            try:
                client = AmiManagerClient()
                client.connect()
                with transaction.atomic():
                    agente = self.object.member
                    queue_member_defaults = QueueMember.get_defaults(
                        agente, campana)
                    self.object.queue_name = campana.queue_campana
                    self.object.id_campana = queue_member_defaults[
                        'id_campana']
                    self.object.membername = queue_member_defaults[
                        'membername']
                    self.object.interface = queue_member_defaults['interface']
                    # por ahora no definimos 'paused'
                    self.object.paused = queue_member_defaults['paused']
                    self.object.save()
                    # adicionamos el agente a la cola actual que esta corriendo
                    sip_agentes_logueados = obtener_sip_agentes_sesiones_activas(
                    )
                    adicionar_agente_activo_cola(self.object, campana,
                                                 sip_agentes_logueados, client)
                    activar_cola()
                client.disconnect()
            except Exception as e:
                message = _(
                    "<strong>Operación Errónea!</strong> "
                    "No se pudo confirmar la creación del dialplan debido "
                    "al siguiente error: {0}".format(e))
                messages.add_message(
                    self.request,
                    messages.ERROR,
                    message,
                )

        return super(QueueMemberCreateView, self).form_valid(form)
Ejemplo n.º 6
0
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 save_agentes(self, form_list, index_form_agentes):
        campana_form = list(form_list)[int(self.INICIAL)]
        campana = campana_form.instance
        queue_member_formset = list(form_list)[index_form_agentes]
        queue_member_formset.instance = campana.queue_campana
        if queue_member_formset.is_valid():
            # obtenemos los agentes que estan logueados
            sip_agentes_logueados = obtener_sip_agentes_sesiones_activas()

            # se asignan valores por defecto en cada una de las instancias
            # de QueueMember a salvar y se adicionan a sus respectivas colas en asterisk
            try:
                client = AmiManagerClient()
                client.connect()
            except AMIManagerConnectorError:
                logger.exception(_("QueueAdd failed "))

            for queue_form in queue_member_formset.forms:
                if queue_form.cleaned_data != {}:
                    # no se tienen en cuenta formularios vacíos
                    agente = queue_form.instance.member
                    queue_member_defaults = QueueMember.get_defaults(
                        agente, campana)
                    queue_form.instance.id_campana = queue_member_defaults[
                        'id_campana']
                    queue_form.instance.membername = queue_member_defaults[
                        'membername']
                    queue_form.instance.interface = queue_member_defaults[
                        'interface']
                    # por ahora no definimos 'paused'
                    queue_form.instance.paused = queue_member_defaults[
                        'paused']
                    queue_form_created = True
                    if queue_form.instance.pk is not None:
                        queue_form_created = False
                    queue_form.save(commit=False)
                    if (agente.sip_extension
                            in sip_agentes_logueados) and queue_form_created:
                        adicionar_agente_cola(agente, queue_form.instance,
                                              campana, client)
            client.disconnect()
            queue_member_formset.save()