FAQ
-
Qual é a ordem de parada e inicialização dos serviços do TactiumIP?
Ao realizar o reinicio do(s) servidor(res) TactiumIP, ou na necessidade de resetar a aplicação, se faz necessário seguir uma ordem de parada e subida dos serviços atrelados ao mesmo:
Ordem de Parada:
1° TactiumIP Server
2° TactiumIP Replication
3° TactiumIP BoardServer
4° Khomp Mrcp (Quando houver)
5° Khomp API
6° Khomp Media
7° Khomp Query
8° Khomp Log
9° Khomp Integrated
Ordem de Inicialização:
2° Khomp Log
3° Khomp Query
4° Khomp Media
5° Khomp API
6° Khomp Mrcp (Quando houver)
7° TactiumIP BoardServer
8° TactiumIP Replication
9° TactiumIP Server (este, impreterivelmente deve ser o ultimo a subir, pois se subir antes do replication, zera o banco de dados)Observação: Em caso de queda de Energia, os serviços que estiverem marcados para subida automática já estarão em execução. Neste caso, basta seguir a ordem de subida pulando os mesmos
-
Ferramentas deslogando inesperadamente (suspensão browser)
Atualmente nos navegadores, ao passar algum tempo sem utilizar a aba que está logada à ferramenta, ou ao sair para pausa, ao retornar à pagina, é notado que a ferramenta executou logoff.
Este processo ocorre devido um processo de limpeza de memória executado pelo navegador conhecido como Tab Discarding. Para evitar o mesmo existem algumas soluções para desativar este processo:
Google Chrome:
Temos duas formas de realizar essa configuração, sendo elas:
Opção 1:
Acessando a parte de Desempenho das configurações do navegador, na parte Geral devemos adicionar os sites da Tactium, podendo ser o domínio/IP que irá comtemplar todos os sites que utilizam aquele domínio/IP, como manualmente o site apenas da toolbar, conforme print abaixo:

Na parte de economia de memória e energia devemos deixar desativados para que não ocorra do navegador desabilitar a aba da aplicação caso ela esteja consumindo mais recurso. Para mais informações acesse https://developer.chrome.com/blog/tab-discarding/.
Para configurar abra o navegador e acesse o link “chrome://settings/performance”, ao abrir a página em “Economia de memória” e “Energia” deixamos a opção desabilitada, conforme print abaixo:

Opção 2: Adicionar a extensão “Auto Tab Discad” presente no link abaixo, caso no seu navegador não esteja na versão 89 do Chrome.
Link: https://chrome.google.com/webstore/detail/auto-tab-discard/jhnleheckmknfcgijgkadoemagpecfol
Obs.: É necessário clicar na opção Usar no Chrome e adicionar extensão, após isso é necessário fechar e abrir o navegador para aplicar a extensão.

Após intalação da extensão, abra o Google Chorme e clique no icone de extensãos no navegador em seguida clique nos 3 potinhos da “Auto tab Discard” após clique em “Opções” irá abrir uma nova pagina, na sequencia navegue até “Exceções” e adicione o link da aplicação como especificado na imagim abaixo:

Obs.: Caso não consiga acessar a mesma via link, basta pesquisar no google “Auto Tab Discard”.
Edge:
Vá nos três pontinhos que fica abaixo do botão de fechar o navegador “…” busque a opção configurações:

Estando em configurações, vá na opção “System” ou “Sistema e desempenho”. Procure por “Esmanecer guias inativas”, desmarque a opção e adicione a raiz da Toolbar e do OmniPA, conforme modelo abaixo:

-
Como configurar docagem com domínios diferentes (Cross domain)?
O’que é o cross domain ?
É um mecanismo que permite que recursos restritos em uma página da web sejam recuperados por outro domínio fora do domínio ao qual pertence o recurso que será recuperado.
Um exemplo prático do nosso cotidiano, Ao realizar monitorias em tempo real no nMonitor, este chama o CallMonitor para realizar algumas ações.
Digamos que neste ambiente podemos acessar a ferramenta via link interno (IP) e link externo. Devido a configuração de monitoria ser limitada a somente 1 link, se configurarmos o link Interno, quem utilizar o Externo não conseguirá realizar monitorias e vice versa.
Isto ocorre devido o navegar identificar que você está realizando uma requisição para um domínio diferente do seu de acesso e por segurança trava esta requisição.Alterações no config
As alterações a seguir, devem ser realizadas sempre no config da aplicação que é chamada, no exemplo que estamos utilizando neste tutorial, o nMonitor chama o CallMonitor. Neste caso o config a ser alterado é o do CallMonitor.
IMPORTANTE: Abaixo deixaremos a mostra como o config deverá ficar configurado, não copie o código direto do docs pois o mesmo altera alguns caracteres especiais, segue o link contendo as linhas do config que devem ser adicionadas.
Link: https://drive.google.com/file/d/1HjlI7Jq1lMkwKTdDFfh0BeOTia3uBkh0/view?usp=sharingDentro do Atributo <system.web> adicionar as seguintes chaves/valores:
<customErrors mode=”Off” />
<httpCookies httpOnlyCookies=”true” requireSSL=”true” sameSite=”None”/>
<sessionState cookieless=”false” regenerateExpiredSessionId=”false”/>Dentro do atributo <system.webServer> adicionar as seguintes chaves/valores:
<httpProtocol>
<customHeaders>
<remove name=”X-Powered-By” />
<remove name=”Server” />
<add name=”X-XSS-Protection” value=”1; mode=block” />
<add name=”Strict-Transport-Security” value=”max-age=31536000; includeSubDomains” />
<add name=”Content-Security-Policy” value=”default-src ‘self’; script-src * data: https://ssl.gstatic.com ‘unsafe-inline’ ‘unsafe-eval’; connect-src ‘self’=; img-src ‘self’ ‘unsafe-inline’ data:; style-src ‘unsafe-inline’ ‘self’;base-uri ‘self’;form-action ‘self’; ” />
<add name=”Expect-CT” value=”enforce, max-age=43200″ />
<add name=”Permissions-Policy” value=”fullscreen=()”/>
<add name=”Referrer-Policy” value=”no-referrer” />
<add name=”X-Content-Type-Options” value=”nosniff” />
<add name=”Access-Control-Allow-Origin” value=”*” />
<add name=”Access-Control-Allow-Methods” value=”GET, PUT, POST, DELETE, HEAD, OPTIONS” />
<add name=”Access-Control-Allow-Credentials” value=”true”/>
<add name=”Access-Control-Allow-Headers” value=”X-Requested-With, origin, content-type, accept” /></customHeaders>
</httpProtocol>Por fim os atributos devem ficar conforme a imagem abaixo:

Se usar “iframe” no site
Na configuração no site ressaltamos que a TAG referrerpolicy=”strict-origin-when-cross-origin” é obrigatório para o funcionamento, dentro do “iframe” que deverá ser desenvolvido pelo responsável do site.

-
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 MailingProcedure SP_GeraMailingAgendadoObjetivo 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_GeraMailingAgendadoPeriodicidade 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 DiscadorProcedure SP_TransfereParaDiscadorObjetivo 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, 0Periodicidade 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 DiscadorProcedure SP_RecebeDoDiscadorObjetivo 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 @BancoPeriodicidade 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_intervalpara 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
@PathLayoutdeve apontar para um diretório acessível pelo SQL Server. - O operador de e-mail
Sac Tactiumdeve 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. - As procedures (
-
Como habilita a função bulkadmin no SQL Server?
Para habilitar essa função torna-se necessário acessar as propriedades do usuário do SQL Server (no exemplo abaixo as configurações estão sendo feitas no usuário chamado “callback”). No menu lateral entrar em “Funções de Servidor” e marcar a opção de “bulkadmin”.

-
Não visualiza os operadores logados na transferência da Toolbar usando integração com o Tactium CRM?
Recomendo verificar no “web.config” da Toolbar o parâmetro abaixo:
<configuration>
<appSettings>
<add key=”transferBPM” value=”false” />Esse parâmetro é para estar desabilitado por se tratar de um recurso descontinuado.Segue imagem ilustrando o problema:

-
Como ativar um 0800 no Gupshup?
Para realizar a ativação do 0800 será necessário seguir os seguintes procedimentos para a ativação:
1) No GupShup, no momento de cadastrar o número do telefone (no aplicativo), deve-se cadastrar sem o “0”, conforme exemplo apresentado:
– Correto: 5580012345678
– Errado: 550800123456782) Será necessário validar o telefone, para isto, o número deverá estar apto a receber chamadas internacionais.
3) No momento do recebimento da chamada internacional, o número não deve estar atrás de uma URA, algum atendente humano deverá ouvir o código e informar na plataforma.
-
O que pode causar lentidão nos atendimentos dos bots via WhatsApp?
Sabemos que um dos principais fatores que influência na experiência de atendimento do seu cliente é a prontidão do atendimento. Por isso que há Tactium conta com os serviços de atendimento automatizado, chamados Bots.
Certo, mas o que pode causar lentidão nesses serviços? A seguir apresentamos alguns possíveis agentes que podem afetar o desempenho dos serviços de Bot via WhatsApp.
Agente Causa Solução Antivírus Apesar de ser indispensável para a segurança do servidor/computador, o antivírus pode acabar influenciando no processamento das requisições e métodos, da GupShup, pelo Webhook. Para contornarmos essa situação recomendamos que adicione nas exceções do antivírus as pastas contendo os serviços da Tactium e o ChatMailServer. Instabilidade na plataforma do WhatsApp Mesmo sendo de raro acontecimento, as instabilidades na plataforma do WhatsApp interfere consideravelmente nos serviços de atendimento automatizado, mas não só o serviço como também os usuários. Neste caso infelizmente não tem muito a ser feito, além de aguardar o retorno da estabilidade da plataforma. Conexão com a Internet Outro principal fator é a conexão com a internet, pois caso a conexão não esteja estável ou com funcionamento adequado pode interferir na troca de mensagens do WhatsApp. Em relação a conexão com a internet, verificar com o provedor alguma possível instabilidade que esteja ocorrendo e seguir as instruções passadas pelo mesmo. Caso já tenha verificado esses agentes e continue apresentando uma certa lentidão entre em contato conosco.
-
Problema de acesso negado na pasta de anexos no CRM?
Torna-se necessário habilitar no aplicativo do NewManager em Authentication defina o atributo impersonate do elemento de configuração de identidade como enable, conforme ilustrado na imagem abaixo. No exemplo estamos usando dois tipos de atributos habilitados:
- O “Anonymous Authentication” e;
- “APS.NET Impresoation”.

-
Qual a diferença de mensagens de Sessão e HSM (Template)?
As mensagens de Sessão é utilizada para responder a consultas ou mensagens do cliente. Classificadas em sessão de entrada e sessão de saída. As mensagens de sessão podem ser de texto livre, mensagens de mídia, e não precisam ter um modelo definido a ser seguido pela empresa, diferente da mensagem HSM.
Exemplo de mensagens de sessão
- Entrada: Se um cliente enviar uma mensagem para o número registrado do WhatsApp, ela será chamada de mensagem de sessão de entrada.
- Saída: O WhatsApp permite que a empresa responda a esse usuário em até 24 horas após a última mensagem do usuário (usuários ativos) por meio do mesmo número do WhatsApp.
As mensagens HSM (templates) são usadas para enviar notificações transacionais para clientes que escolheram por participar. Por exemplo se um cliente optou por receber o número registrado do WhatsApp de uma empresa por qualquer um dos mecanismos de aceitação fornecidos pelo Gupshup, eles são considerados usuários que aceitaram.
Exemplo de mensagens de HSM
- São utilizados para enviar Notificações para usuários inativos
- Taxa de HSM do WhatsApp
- Requer Opt-in
- Conteúdo precisa ser pré-aprovado.
As empresas pagam um custo de mensagem por sessão (custo menor) para todas as mensagens de entrada e todas as mensagens de saída, bem como pelas mensagens enviadas com Templates HSM (custo maior). Para saber mais acesse o link: Como funciona as cobranças das mensagens do gupshup.
