def test_generar_dialplan_entrante_ivr_breakout(self):
     ivr = IVRFactory()
     destino_ivr = DestinoEntrante.crear_nodo_ruta_entrante(ivr)
     self.queue_entrante.ivr_breakdown = destino_ivr
     creator = QueuesCreator()
     dialplan = creator._generar_dialplan_entrantes(self.campana_entrante)
     self.assertIn('context=sub-oml-module-ivrbreakout', dialplan)
 def test_generar_dialplan_entrante_default(self):
     creator = QueuesCreator()
     dialplan = creator._generar_dialplan_entrantes(self.campana_entrante)
     self.assertIn('announce-holdtime=no', dialplan)
     self.assertIn('queue-callswaiting=queue-callswaiting', dialplan)
     self.assertIn('queue-thereare=queue-thereare', dialplan)
     self.assertIn('queue-youarenext=queue-youarenext', dialplan)
Beispiel #3
0
class ActivacionQueueService(object):
    """ Sincronizador de configuracion de Campaña / Queue """
    def __init__(self):
        self.queues_config_creator = QueuesCreator()
        self.reload_asterisk_config = AsteriskConfigReloader()
        self.asterisk_database = CampanaFamily()

    def _generar_y_recargar_configuracion_asterisk(self):
        proceso_ok = True
        mensaje_error = ""

        try:
            self.queues_config_creator.create_dialplan()
        except Exception:
            logger.exception(
                _("ActivacionQueueService: error al "
                  "intentar queues_config_creator()"))

            proceso_ok = False
            mensaje_error += (_("Hubo un inconveniente al crear el archivo de "
                                "configuracion del queues de Asterisk. "))

        if not proceso_ok:
            raise (RestablecerDialplanError(mensaje_error))
        else:
            self.reload_asterisk_config.reload_asterisk()
            self.asterisk_database.regenerar_families()

    def activar(self):
        self._generar_y_recargar_configuracion_asterisk()
Beispiel #4
0
    def __init__(self):
        # Sincroniza Queues de Campañas
        self.queues_config_creator = QueuesCreator()
        # Sincroniza Sip De Agentes
        self.sip_config_creator = SipConfigCreator()
        # Sincroniza Modelos de Configuracion Telefonica
        self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk(
        )
        # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica
        self.asterisk_database = RegenerarAsteriskFamilysOML()
        self.playlist_config_creator = PlaylistsConfigCreator()

        # Llama al comando que reinicia Asterisk
        self.reload_asterisk_config = AsteriskConfigReloader()

        # parámetros de script que desloguea agentes inactivos
        self.tareas_programadas_ids = [
            'asterisk_logout_script', 'queue_log_clean_job',
            'actualizar_reportes_de_entrantes_job',
            'actualizar_reporte_supervisores',
            'actualizar_reporte_dia_actual_agentes',
            'actualizar_reportes_salientes', 'actualizar_reportes_dialers'
        ]

        self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2
        self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES = 1
        self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES = 5
        self.TIEMPO_ACTUALIZAR_DASHBOARD_AGENTES = 1
        self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_SALIENTES = 1
        self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_DIALERS = 1
    def __init__(self):
        # Sincroniza Queues de Campañas
        self.queues_config_creator = QueuesCreator()
        self.config_queues_file = QueuesConfigFile()
        # Sincroniza Sip De Agentes
        self.sip_config_creator = SipConfigCreator()
        self.config_sip_file = SipConfigFile()
        # Sincroniza Modelos de Configuracion Telefonica
        self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk()
        # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica
        self.asterisk_database = RegenerarAsteriskFamilysOML()

        # Llama al comando que reinicia Asterisk
        self.reload_asterisk_config = AsteriskConfigReloader()

        # parámetros de script que desloguea agentes inactivos
        self.tareas_programadas_ids = ['asterisk_logout_script', 'queue_log_clean_job']
        self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2
class RegeneracionAsteriskService(object):

    def __init__(self):
        # Sincroniza Queues de Campañas
        self.queues_config_creator = QueuesCreator()
        self.config_queues_file = QueuesConfigFile()
        # Sincroniza Sip De Agentes
        self.sip_config_creator = SipConfigCreator()
        self.config_sip_file = SipConfigFile()
        # Sincroniza Modelos de Configuracion Telefonica
        self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk()
        # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica
        self.asterisk_database = RegenerarAsteriskFamilysOML()

        # Llama al comando que reinicia Asterisk
        self.reload_asterisk_config = AsteriskConfigReloader()

        # parámetros de script que desloguea agentes inactivos
        self.tareas_programadas_ids = ['asterisk_logout_script', 'queue_log_clean_job']
        self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2

    def _generar_y_recargar_configuracion_asterisk(self):
        proceso_ok = True
        mensaje_error = ""

        try:
            self.queues_config_creator.create_dialplan()
        except Exception:
            logger.exception(_("ActivacionQueueService: error al "
                               "intentar queues_config_creator()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion del queues de Asterisk. ")

        try:
            self.sip_config_creator.create_config_sip()
        except Exception:
            logger.exception(_("ActivacionAgenteService: error al "
                               "intentar create_config_sip()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion del config sip de Asterisk. ")

        if not proceso_ok:
            raise(RestablecerDialplanError(mensaje_error))
        else:
            self.config_queues_file.copy_asterisk()
            self.config_sip_file.copy_asterisk()
            self.sincronizador_config_telefonica.sincronizar_en_asterisk()
            self.asterisk_database.regenerar_asterisk()
            self.reload_asterisk_config.reload_asterisk()

    def _generar_tarea_script_logout_agentes_inactivos(self):
        """Adiciona una tarea programada que llama al script de que desloguea
        agentes inactivos
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python')
        ruta_script_logout = os.path.join(settings.INSTALL_PREFIX, 'bin/omni-asterisk-logout.py')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[0])
        if list(job) == []:
            install_prefix = 'INSTALL_PREFIX={0}'.format(settings.INSTALL_PREFIX)
            ami_user = '******'.format(settings.AMI_USER)
            ami_password = '******'.format(settings.AMI_PASSWORD)
            asterisk_hostname = 'ASTERISK_HOSTNAME={0}'.format(settings.ASTERISK_HOSTNAME)
            job = crontab.new(
                command='{0} {1} {2} {3} {4} {5}'.format(
                    install_prefix, ami_user, ami_password, asterisk_hostname,
                    ruta_python_virtualenv, ruta_script_logout),
                comment=self.tareas_programadas_ids[0])
            # adicionar tiempo de print()eriodicidad al cron job
            job.minute.every(self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_limpieza_diaria_queuelog(self):
        """Adiciona una tarea programada para limpiar la tabla queue_log
        diariamente
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_psql = os.popen('which psql').read()[:-1]
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[1])
        if list(job) == []:
            postgres_user = settings.POSTGRES_USER
            postgres_host = settings.POSTGRES_HOST
            postgres_database = settings.POSTGRES_DATABASE
            postgres_password = '******'.format(os.getenv('PGPASSWORD'))
            job = crontab.new(
                command='{0} {1} -U {2} -h {3} -d {4} -c \'DELETE FROM queue_log\''.format(
                    postgres_password, ruta_psql, postgres_user, postgres_host,
                    postgres_database),
                comment=self.tareas_programadas_ids[1])
            # adicionar tiempo de print()eriodicidad al cron job
            job.hour.on(2)
            crontab.write_to_user(user=getpass.getuser())

    def regenerar(self):
        self._generar_y_recargar_configuracion_asterisk()
        self._generar_tarea_script_logout_agentes_inactivos()
        self._generar_tarea_limpieza_diaria_queuelog()
 def test_generar_dialplan_entrante_posicion_de_anuncios(self):
     self.queue_entrante.announce_position = True
     creator = QueuesCreator()
     dialplan = creator._generar_dialplan_entrantes(self.campana_entrante)
     self.assertIn('announce-position=yes', dialplan)
 def test_generar_dialplan_entrante_posicion_de_anuncios_default(self):
     creator = QueuesCreator()
     dialplan = creator._generar_dialplan_entrantes(self.campana_entrante)
     self.assertIn('announce-position=no', dialplan)
 def test_generar_dialplan_announce_holdtime_activated_once(self):
     self.queue_entrante.announce_holdtime = 'once'
     creator = QueuesCreator()
     dialplan = creator._generar_dialplan_entrantes(self.campana_entrante)
     self.assertIn('announce-holdtime=once', dialplan)
Beispiel #10
0
 def __init__(self):
     self.queues_config_creator = QueuesCreator()
     self.reload_asterisk_config = AsteriskConfigReloader()
     self.asterisk_database = CampanaFamily()
Beispiel #11
0
class RegeneracionAsteriskService(object):
    def __init__(self):
        # Sincroniza Queues de Campañas
        self.queues_config_creator = QueuesCreator()
        # Sincroniza Sip De Agentes
        self.sip_config_creator = SipConfigCreator()
        # Sincroniza Modelos de Configuracion Telefonica
        self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk(
        )
        # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica
        self.asterisk_database = RegenerarAsteriskFamilysOML()
        self.playlist_config_creator = PlaylistsConfigCreator()

        # Llama al comando que reinicia Asterisk
        self.reload_asterisk_config = AsteriskConfigReloader()

        # parámetros de script que desloguea agentes inactivos
        self.tareas_programadas_ids = [
            'asterisk_logout_script', 'queue_log_clean_job',
            'actualizar_reportes_de_entrantes_job',
            'actualizar_reporte_supervisores',
            'actualizar_reporte_dia_actual_agentes',
            'actualizar_reportes_salientes', 'actualizar_reportes_dialers'
        ]

        self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2
        self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES = 1
        self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES = 5
        self.TIEMPO_ACTUALIZAR_DASHBOARD_AGENTES = 1
        self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_SALIENTES = 1
        self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_DIALERS = 1

    def _generar_y_recargar_configuracion_asterisk(self):
        proceso_ok = True
        mensaje_error = ""

        try:
            self.queues_config_creator.create_dialplan()
        except Exception:
            logger.exception(
                _("ActivacionQueueService: error al "
                  "intentar queues_config_creator()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion del queues de Asterisk. ")

        try:
            self.sip_config_creator.create_config_sip()
        except Exception:
            logger.exception(
                _("ActivacionAgenteService: error al "
                  "intentar create_config_sip()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion del config sip de Asterisk. ")

        try:
            self.playlist_config_creator.create_config_asterisk()
        except Exception:
            logger.exception(
                _("PlaylistsConfigCreator: error al "
                  "intentar create_config_sip()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion Playlists (MOH) en Asterisk. ")

        if not proceso_ok:
            raise (RestablecerDialplanError(mensaje_error))
        else:
            self.sincronizador_config_telefonica.sincronizar_en_asterisk()
            self.asterisk_database.regenerar_asterisk()
            self.reload_asterisk_config.reload_asterisk()

    def _generar_tarea_script_logout_agentes_inactivos(self):
        """Adiciona una tarea programada que llama al script de que desloguea
        agentes inactivos
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script_logout = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py logout_unavailable_agents')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[0])
        crontab.remove_all(comment=self.tareas_programadas_ids[0])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv,
                ruta_script_logout),
                              comment=self.tareas_programadas_ids[0])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_limpieza_diaria_queuelog(self):
        """Adiciona una tarea programada para limpiar la tabla queue_log
        diariamente
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_psql = os.popen('which psql').read()[:-1]
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[1])
        crontab.remove_all(comment=self.tareas_programadas_ids[1])
        if list(job) == []:
            postgres_user = settings.POSTGRES_USER
            postgres_host = settings.POSTGRES_HOST
            postgres_database = settings.POSTGRES_DATABASE
            postgres_password = '******'.format(
                os.getenv('PGPASSWORD'))
            job = crontab.new(
                command=
                '{0} {1} -U {2} -h {3} -d {4} -c \'DELETE FROM queue_log\''.
                format(postgres_password, ruta_psql, postgres_user,
                       postgres_host, postgres_database),
                comment=self.tareas_programadas_ids[1])
            # adicionar tiempo de periodicidad al cron job
            job.hour.on(2)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_script_actualizar_reportes_llamadas_entrantes(self):
        """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas
        entrantes
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script_logout = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py actualizar_reportes_llamadas_entrantes')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[2])
        crontab.remove_all(comment=self.tareas_programadas_ids[2])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv,
                ruta_script_logout),
                              comment=self.tareas_programadas_ids[2])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(
                self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_script_actualizar_reporte_datos_supervisores(self):
        """Adiciona una tarea programada que llama al script de que calcula el reportes
        los agentes y campanas asociados a cada supervisor
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py actualizar_reporte_supervisores')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[3])
        crontab.remove_all(comment=self.tareas_programadas_ids[3])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv, ruta_script),
                              comment=self.tareas_programadas_ids[3])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_script_actualizar_reporte_agentes_dia_actual(self):
        """Adiciona una tarea programada que llama al script de que calcula el reportes
        los agentes y campanas asociados a cada supervisor
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py actualizar_reporte_dia_actual_agentes')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[4])
        crontab.remove_all(comment=self.tareas_programadas_ids[4])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv, ruta_script),
                              comment=self.tareas_programadas_ids[4])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(self.TIEMPO_ACTUALIZAR_DASHBOARD_AGENTES)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_script_actualizar_reportes_llamadas_salientes(self):
        """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas
        salientes
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script_logout = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py actualizar_reportes_llamadas_salientes')

        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[5])
        crontab.remove_all(comment=self.tareas_programadas_ids[5])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv,
                ruta_script_logout),
                              comment=self.tareas_programadas_ids[5])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(
                self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_SALIENTES)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_script_actualizar_reportes_llamadas_dialers(self):
        """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas
        dialers
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script_logout = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py actualizar_reportes_llamadas_dialers')

        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[6])
        crontab.remove_all(comment=self.tareas_programadas_ids[6])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv,
                ruta_script_logout),
                              comment=self.tareas_programadas_ids[6])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_DIALERS)
            crontab.write_to_user(user=getpass.getuser())

    def _reenviar_archivos_playlist_asterisk(self):
        playlists = Playlist.objects.all()
        for playlist in playlists:
            musica_espera_list = MusicaDeEspera.objects.filter(
                playlist=playlist.pk)
            print(list(musica_espera_list))
            for musica in musica_espera_list:
                audio_file_asterisk = AudioConfigFile(musica)
                audio_file_asterisk.copy_asterisk()

    def _reenviar_paquetes_idioma(self):
        ASTERISK_SOUNDS_URL = 'https://downloads.asterisk.org/pub/telephony/sounds/'
        audios_asterisk_conf_list = AudiosAsteriskConf.objects.filter(
            esta_instalado=True)
        print("Descargando paquete de idiomas instalados....")
        for audio_conf in audios_asterisk_conf_list:
            language = audio_conf.paquete_idioma
            filename = 'asterisk-core-sounds-{0}-wav-current.tar.gz'.format(
                language)
            url = ASTERISK_SOUNDS_URL + filename
            response = requests.get(url, stream=True)
            filename_full_path = os.path.join(tempfile.gettempdir(), filename)
            handle = open(filename_full_path, "wb")
            for chunk in response.iter_content(chunk_size=512):
                if chunk:
                    handle.write(chunk)
            handle.close()

            print(f'   {language}...')
            __, nombre_archivo = os.path.split(filename_full_path)
            sound_tar_data = Path(filename_full_path).read_bytes()
            res = base64.b64encode(sound_tar_data)
            res = res.decode('utf-8')
            redis_stream = RedisStreams()
            content = {
                'archivo': nombre_archivo,
                'type': 'ASTERISK_SOUNDS',
                'action': 'COPY',
                'language': language,
                'content': res
            }
            redis_stream.write_stream('asterisk_conf_updater',
                                      json.dumps(content))
        print('Completada descarga de paquetes de idioma')

    def regenerar(self):
        self._generar_y_recargar_configuracion_asterisk()
        self._reenviar_archivos_playlist_asterisk()
        self._reenviar_paquetes_idioma()
        self._generar_tarea_script_logout_agentes_inactivos()
        self._generar_tarea_limpieza_diaria_queuelog()
        self._generar_tarea_script_actualizar_reportes_llamadas_entrantes()
        self._generar_tarea_script_actualizar_reportes_llamadas_salientes()
        self._generar_tarea_script_actualizar_reportes_llamadas_dialers()
        self._generar_tarea_script_actualizar_reporte_datos_supervisores()
        self._generar_tarea_script_actualizar_reporte_agentes_dia_actual()
class RegeneracionAsteriskService(object):
    def __init__(self):
        # Sincroniza Queues de Campañas
        self.queues_config_creator = QueuesCreator()
        # Sincroniza Sip De Agentes
        self.sip_config_creator = SipConfigCreator()
        # Sincroniza Modelos de Configuracion Telefonica
        self.sincronizador_config_telefonica = SincronizadorDeConfiguracionTelefonicaEnAsterisk(
        )
        # Sincroniza en AstDB las que faltan en el Sincronizador de Configuracion Telefonica
        self.asterisk_database = RegenerarAsteriskFamilysOML()
        self.playlist_config_creator = PlaylistsConfigCreator()

        # Llama al comando que reinicia Asterisk
        self.reload_asterisk_config = AsteriskConfigReloader()

        # parámetros de script que desloguea agentes inactivos
        self.tareas_programadas_ids = [
            'asterisk_logout_script', 'queue_log_clean_job',
            'actualizar_reportes_de_entrantes_job',
            'actualizar_reporte_supervisores'
        ]
        self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS = 2
        self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES = 1
        self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES = 5

    def _generar_y_recargar_configuracion_asterisk(self):
        proceso_ok = True
        mensaje_error = ""

        try:
            self.queues_config_creator.create_dialplan()
        except Exception:
            logger.exception(
                _("ActivacionQueueService: error al "
                  "intentar queues_config_creator()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion del queues de Asterisk. ")

        try:
            self.sip_config_creator.create_config_sip()
        except Exception:
            logger.exception(
                _("ActivacionAgenteService: error al "
                  "intentar create_config_sip()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion del config sip de Asterisk. ")

        try:
            self.playlist_config_creator.create_config_asterisk()
        except Exception:
            logger.exception(
                _("PlaylistsConfigCreator: error al "
                  "intentar create_config_sip()"))

            proceso_ok = False
            mensaje_error += _("Hubo un inconveniente al crear el archivo de "
                               "configuracion Playlists (MOH) en Asterisk. ")

        if not proceso_ok:
            raise (RestablecerDialplanError(mensaje_error))
        else:
            self.sincronizador_config_telefonica.sincronizar_en_asterisk()
            self.asterisk_database.regenerar_asterisk()
            self.reload_asterisk_config.reload_asterisk()

    def _generar_tarea_script_logout_agentes_inactivos(self):
        """Adiciona una tarea programada que llama al script de que desloguea
        agentes inactivos
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script_logout = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py logout_unavailable_agents')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[0])
        crontab.remove_all(comment=self.tareas_programadas_ids[0])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv,
                ruta_script_logout),
                              comment=self.tareas_programadas_ids[0])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(self.TIEMPO_CHEQUEO_CONTACTOS_INACTIVOS)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_limpieza_diaria_queuelog(self):
        """Adiciona una tarea programada para limpiar la tabla queue_log
        diariamente
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_psql = os.popen('which psql').read()[:-1]
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[1])
        crontab.remove_all(comment=self.tareas_programadas_ids[1])
        if list(job) == []:
            postgres_user = settings.POSTGRES_USER
            postgres_host = settings.POSTGRES_HOST
            postgres_database = settings.POSTGRES_DATABASE
            postgres_password = '******'.format(
                os.getenv('PGPASSWORD'))
            job = crontab.new(
                command=
                '{0} {1} -U {2} -h {3} -d {4} -c \'DELETE FROM queue_log\''.
                format(postgres_password, ruta_psql, postgres_user,
                       postgres_host, postgres_database),
                comment=self.tareas_programadas_ids[1])
            # adicionar tiempo de periodicidad al cron job
            job.hour.on(2)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_script_actualizar_reportes_llamadas_entrantes(self):
        """Adiciona una tarea programada que llama al script de que calcula reportes de llamadas
        entrantes
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script_logout = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py actualizar_reportes_llamadas_entrantes')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[2])
        crontab.remove_all(comment=self.tareas_programadas_ids[2])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv,
                ruta_script_logout),
                              comment=self.tareas_programadas_ids[2])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(
                self.TIEMPO_ACTUALIZAR_REPORTES_LLAMADAS_ENTRANTES)
            crontab.write_to_user(user=getpass.getuser())

    def _generar_tarea_script_actualizar_reporte_datos_supervisores(self):
        """Adiciona una tarea programada que llama al script de que calcula el reportes
        los agentes y campanas asociados a cada supervisor
        """
        # conectar con cron
        crontab = CronTab(user=getpass.getuser())
        ruta_source_envars = 'source /etc/profile.d/omnileads_envars.sh;'
        ruta_python_virtualenv = os.path.join(sys.prefix, 'bin/python3')
        ruta_script = os.path.join(
            settings.INSTALL_PREFIX,
            'ominicontacto/manage.py actualizar_reporte_supervisores')
        # adicionar nuevo cron job para esta tarea si no existe anteriormente
        job = crontab.find_comment(self.tareas_programadas_ids[3])
        crontab.remove_all(comment=self.tareas_programadas_ids[3])
        if list(job) == []:
            job = crontab.new(command='{0} {1} {2}'.format(
                ruta_source_envars, ruta_python_virtualenv, ruta_script),
                              comment=self.tareas_programadas_ids[2])
            # adicionar tiempo de periodicidad al cron job
            job.minute.every(self.TIEMPO_ACTUALIZAR_REPORTE_SUPERVISORES)
            crontab.write_to_user(user=getpass.getuser())

    def regenerar(self):
        self._generar_y_recargar_configuracion_asterisk()
        self._generar_tarea_script_logout_agentes_inactivos()
        self._generar_tarea_limpieza_diaria_queuelog()
        self._generar_tarea_script_actualizar_reportes_llamadas_entrantes()
        self._generar_tarea_script_actualizar_reporte_datos_supervisores()