Discador

  • Como configurar o máximo de ligações e o tempo mínimo de duração de uma chamada por dia para atender as regras da ANATEL?

    Essa configuração passou a ser utilizada após as novas definições da ANATEL. Para mais informações sobre as mesmas acesse a URL Como a TACTIUM ajuda você a se adequar e evitar os impactos das medidas da ANATEL.

    Essa configuração é feita em: Cadastro >> Configurações na aba “Cliente CTI” em dois parâmetros, sendo:

    • Máximo de ligações por dia: Um determinado número de telefone configurado como número de origem não excederá esse máximo de chamadas improdutivas no mesmo dia. As chamadas improdutivas serão todas que ocupem a operadora e não sejam atendidas ou que sejam atendidas por um período inferior ao campo Limite de Duração. Caso o tempo marcado esteja “zero”, não haverá limitação de chamadas.
    • Limite de duração: Deve-se declarar o tempo mínimo vigente da ANATEL para que possamos garantir que não ultrapasse a quantidade de ligações (parâmetro anterior “Máximo de ligações por dia”) dentro desse tempo mínimo das ligações improdutivas. Esse parâmetro é definido em milissegundos, portanto deve colocar 3000 quando for usar 3 segundos, por exemplo.


  • Criando Jobs do Gerenciador de Mailing

    Na implantação do Gerenciador de Mailing do nMonitor, torna-se necessário criar 3 procedures e seus respectivos Jobs no SQL Server Agent, conforme detalhamento abaixo.

    ⚠️ Atenção: Os scripts abaixo devem ser executados somente por administradores do banco de dados.
    Antes de executar, ajuste as variáveis iniciais conforme o ambiente de implantação.

    🔧 Variáveis de ambiente (ajustar antes da execução)

    DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE'   -- Ex: RGSMGF, TACTIUM, etc.
          , @Banco VARCHAR (20) = 'DATABASE'         -- Nome do banco de dados do discador (base histórica)
          , @Usuario VARCHAR (20) = 'USUARIO_DATABASE' -- Owner do job
          , @PathLayout VARCHAR(800) = '\\caminho\para\layout\'  -- Apenas para Job 2

    📌 Job 1 – Monitora Agendamento de Mailing

    Item Descrição
    Job TACTIUM – Monitora Agendamento de Mailing
    Procedure SP_GeraMailingAgendado
    Objetivo Gerar segmentos de mailings para discagem que estejam agendados ou em fila
    Local de execução Banco do TactiumIP (base histórica)
    Comando Exec SP_GeraMailingAgendado
    Periodicidade A cada 10 segundos

    🧾 Script de criação do Job 1

    USE [msdb]
    GO
    
    BEGIN TRANSACTION
    DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE' 
          , @Banco VARCHAR (20) = 'DATABASE'
          , @Usuario VARCHAR (20) = 'USUARIO_DATABASE'
    
    DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Monitora Agendamento de Mailing')
          , @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Gera Mailing Agendado')
          , @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')
    
    DECLARE @schedule_uid UNIQUEIDENTIFIER; 
    DECLARE @ReturnCode INT = 0
    
    IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
    BEGIN
        EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
        IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    END
    
    DECLARE @jobId BINARY(16)
    EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob, 
        @enabled=1, 
        @notify_level_eventlog=2, 
        @notify_level_email=2, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'Nenhuma descrição disponível.', 
        @category_name=N'[Uncategorized (Local)]', 
        @owner_login_name=@usuario, 
        @notify_email_operator_name=N'Sac Tactium', 
        @job_id = @jobId OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa, 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, 
        @subsystem=N'TSQL', 
        @command=N'Exec SP_GeraMailingAgendado', 
        @database_name=@Banco, 
        @flags=0
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 10 segundos', 
        @enabled=1, 
        @freq_type=4, 
        @freq_interval=1, 
        @freq_subday_type=4, 
        @freq_subday_interval=1,
        @freq_relative_interval=0, 
        @freq_recurrence_factor=0, 
        @active_start_date=@StartDate, 
        @active_end_date=99991231, 
        @active_start_time=0, 
        @active_end_time=235959, 
        @schedule_uid=@schedule_uid OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    COMMIT TRANSACTION
    GOTO EndSave
    QuitWithRollback:
        IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
    EndSave:
    GO

    📌 Job 2 – Transfere Mailing para o Discador

    Item Descrição
    Job TACTIUM – Transfere Mailing para o Discador
    Procedure SP_TransfereParaDiscador
    Objetivo Transferir a lista de discagem do gerenciador de mailings para o discador
    Local de execução Banco do TactiumIP (base histórica)
    Comando Exec SP_TransfereParaDiscador @PathLayout, @Banco, 0
    Periodicidade A cada 10 segundos

    🧾 Script de criação do Job 2

    USE [msdb]
    GO
    
    BEGIN TRANSACTION
    DECLARE @Sigla VARCHAR (20) = 'SIGLA_AMBIENTE' 
          , @Banco VARCHAR (20) = 'DATABASE'
          , @Usuario VARCHAR (20) = 'USUARIO_DATABASE'
          , @PathLayout VARCHAR(800) = '\\caminho\para\layout\'
    
    DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Transfere Mailing para o Discador')
          , @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Transfere Mailing para o Discador')
          , @Comando VARCHAR(800) = Concat('Exec SP_TransfereParaDiscador ''', @PathLayout, ''', ''', @Banco, ''', 0')
          , @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')
    
    DECLARE @schedule_uid UNIQUEIDENTIFIER; 
    DECLARE @ReturnCode INT = 0
    
    IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
    BEGIN
        EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
        IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    END
    
    DECLARE @jobId BINARY(16)
    EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob, 
        @enabled=1, 
        @notify_level_eventlog=2, 
        @notify_level_email=2, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'Nenhuma descrição disponível.', 
        @category_name=N'[Uncategorized (Local)]', 
        @owner_login_name=@Usuario, 
        @notify_email_operator_name=N'Sac Tactium', 
        @job_id = @jobId OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa, 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, 
        @subsystem=N'TSQL', 
        @command=@Comando, 
        @database_name=@Banco, 
        @flags=0
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 10 segundos', 
        @enabled=1, 
        @freq_type=4, 
        @freq_interval=1, 
        @freq_subday_type=4, 
        @freq_subday_interval=1,
        @freq_relative_interval=0, 
        @freq_recurrence_factor=0, 
        @active_start_date=@StartDate, 
        @active_end_date=99991231, 
        @active_start_time=0, 
        @active_end_time=235959, 
        @schedule_uid=@schedule_uid OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    COMMIT TRANSACTION
    GOTO EndSave
    QuitWithRollback:
        IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
    EndSave:
    GO

    📌 Job 3 – Recebe resultado do Discador

    Item Descrição
    Job TACTIUM – Recebe resultado do Discador
    Procedure SP_RecebeDoDiscador
    Objetivo Transferir tentativas realizadas pelo discador para a base do gerenciador de mailings
    Local de execução Banco do TactiumIP (base histórica)
    Comando Exec SP_RecebeDoDiscador @Banco
    Periodicidade A cada 1 minuto

    🧾 Script de criação do Job 3

    USE [msdb]
    GO
    
    BEGIN TRANSACTION
    DECLARE @sigla VARCHAR (20) = 'SIGLA_AMBIENTE' 
          , @banco VARCHAR (20) = 'DATABASE'
          , @usuario VARCHAR (20) = 'USUARIO_DATABASE'
    
    DECLARE @NomeJob VARCHAR(255) = Concat(@sigla, ' - Recebe resultado do Discador')
          , @NomeEtapa VARCHAR(255) = Concat(@sigla, ' - Recebe resultado do Discador')
          , @Comando VARCHAR(800) = Concat('Exec SP_RecebeDoDiscador ''', @Banco, '''')
          , @StartDate INT = FORMAT(GETDATE(), 'yyyyMMdd')
    
    DECLARE @schedule_uid UNIQUEIDENTIFIER; 
    DECLARE @ReturnCode INT = 0
    
    IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
    BEGIN
        EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
        IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    END
    
    DECLARE @jobId BINARY(16)
    EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=@NomeJob, 
        @enabled=1, 
        @notify_level_eventlog=2, 
        @notify_level_email=2, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'Nenhuma descrição disponível.', 
        @category_name=N'[Uncategorized (Local)]', 
        @owner_login_name=@usuario, 
        @notify_email_operator_name=N'Sac Tactium', 
        @job_id = @jobId OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@NomeEtapa, 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, 
        @subsystem=N'TSQL', 
        @command=@Comando, 
        @database_name=@banco, 
        @flags=0
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Execucao a cada 1 minuto', 
        @enabled=1, 
        @freq_type=4, 
        @freq_interval=1, 
        @freq_subday_type=4, 
        @freq_subday_interval=1,
        @freq_relative_interval=0, 
        @freq_recurrence_factor=0, 
        @active_start_date=@StartDate, 
        @active_end_date=99991231, 
        @active_start_time=0, 
        @active_end_time=235959, 
        @schedule_uid=@schedule_uid OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    
    COMMIT TRANSACTION
    GOTO EndSave
    QuitWithRollback:
        IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
    EndSave:
    GO

    ✅ Observações finais

    • As procedures (SP_GeraMailingAgendado, SP_TransfereParaDiscador, SP_RecebeDoDiscador) já devem existir no banco de dados do Tactium antes da criação dos Jobs.
    • Ajuste o parâmetro @freq_subday_interval para 10 segundos manualmente via interface do SQL Server Agent, se necessário, pois o T-SQL padrão não permite menos que 1 minuto diretamente.
    • O @PathLayout deve apontar para um diretório acessível pelo SQL Server.
    • O operador de e-mail Sac Tactium deve existir no SQL Server Agent ou pode ser removido/alterado conforme necessidade.
    ⚠️ Importante: Após criar os jobs, verifique se eles estão habilitados e com as permissões corretas para execução.

     


  • Quais sistemas de mercado o discador da Tactium possui integrações?

    Listamos alguns CRM de mercado que possuem integrações usando as nossas camadas nativas disponíveis na nossa solução Tactium IP.

    Sistemas de CRM de Cobrança

    1. SRC (Usa a camada socket padrão e carga mailing SQL)
    2. ACTYON (Usa a camada socket padrão e carga de mailing SQL. Porém, foi iniciado a integração com a WEB API a partir do novo software web da JCA, dona do sistema Actyon)
    3. DATACOB (Usa a camada de integração WEB API)
    4. VIRTUA (Usa a camada socket específico, carga mailing SQL e desenvolvido também o processo de integração com a nossa WEB API. Eles já estavam integrador com a nossa PA VIRTUAL carregando variáveis de negociação)
    5. NÉCTAR (Usa a camada socket padrão e carga mailing SQL)

    Sistemas de CRM de Crédito Consignado

    1. FINAZ (Usa a camada de integração WEB API)
    2. PANORAMA (Usa a camada de integração URL via Toolbar e carga de mailing manual TTCampanha)

  • Qual a diferença de Renitência e Tentativa nas campanhas do Tactium IP?

    No processo de discagem automática o Discador baseia-se nas tentativas da campanha e renitências (tentativas por status da ligação) para trabalhar as discagens nas campanhas.

    Ambas são por número e não pelo item, isto é, pode-se ter mais de um número que por sua vez estará associado a um item (que geralmente é o cliente propriamente dito) e o número poderá ser finalizado por “Atingiu Limite Tentativa” ou “Atingiu Limite Renitência” a depender de quem atingir primeiro as tentativas previamente cadastradas. Quando todos os números foram finalizado, o item será definido como “Atingiu Limite” na campanha.

    As configurações das tentativas da campanha são definidas no cadastro da campanha e existem dois tipos de tentativas que são as “Tentativas” dos números importados inicialmente e as “Tentativas p/ Fone Auxiliar” representam o número de retorno que foi adicionado no ato do contato com o cliente caso ele solicite o retorno em outro número.

    Por exemplo:

    1. Se um item possuir 3 números e, um primeiro número discado caiu na caixa postal, o segundo deu um tom de ocupado e o terceiro caiu na caixa postal também, esse item passará de “Não trabalhado” na campanha para “Tentando Ligar”, tendo 1 tentativa atingida. Ele continuará a discar se possuir mais de 1 tentativa no cadastro da campanha. Caso contrário será finalizado como “Atingiu Limite Tentativa”.

    As renitências são configuradas também no cadastro da campanha e existe um cadastro padrão que pode ser editado pelo cliente. No seu cadastro é definido o status da ligação, tentativas do status da ligação e o tempo em que o número ficará bloqueado sem discar obedecendo as regras de renitência.

    Por exemplo:

    1. Se um cliente (item) contém 1 número apenas e ele apresentar “Falha” ou qualquer outro status o número ficará bloqueado “Em renitência” para discagem de acordo com o tempo configurado no cadastro da renitência. Se as próximas consecutivas apresentarem o mesmo status o número será finalizado como “Atingiu Limite Renitência” de acordo com a quantidade de tentativas da renitência.