2.7 KiB
Melhorias no Delay Humanizado (Wuzapi/Captain)
Objetivo: Integrar o delay humanizado (leitura e digitação simuladas) com a configuração de atraso base controlada pelo front-end (typing_delay da Inbox), evitando atrasos excessivos e resolvendo uma Race Condition de mensagens concorrentes. Ocultar scripts temporários de teste da raiz do repositório.
Contexto:
- O delay fixo adicionado anteriormente bloqueava os testes e fugia do controle do administrador. Se o admin configurasse o delay no painel para "5", o sistema adicionava os passos humanizados de leitura e digitação em cima desses 5 segundos originais na fila do Sidekiq.
- Risco técnico (Race Condition): um
sleep(4)para simulação de leitura permitia a chegada de uma nova mensagem, que ficaria ignorada ou atropelada. - Sujeira no repositório: arquivos
.rbna raiz do projeto poluindo o tracking do git.
Passos:
- Limpeza do Tracking: Movidos os scripts descartáveis
test_wuzapi_parser.rb,test_wuzapi_service.rb,test_wuzapi_service2.rbetest_wuzapi_service3.rbparascripts/dev/. - Transferência do Delay Total: Removemos o atraso cego na fila pelo Sidekiq (antes em
HookExecutionServiceviawait: delay.seconds). O job engatilha agora imediatamente para a mensagem começar o fluxo visivelmente. - Escalonamento do Delay Dinâmico: Atualizado
ResponseBuilderJobpara usar@inbox.typing_delay.to_i. Agora, setyping_delayfor maior que zero, ele é utilizado como peso máximo para a leitura e digitação, combinando a variação humana (jitter) mas respeitando a escala do front-end. - Fechamento de Race Condition: Adicionado novamente um check
return if debounce_requested?(message)no final da pausa de "leitura", certificando que nenhuma mensagem invadiu nos segundos intermediários dosleep.
Principais Códigos Alterados:
enterprise/app/services/enterprise/message_templates/hook_execution_service.rbenterprise/app/jobs/captain/conversation/response_builder_job.rb
Como Validar: No frontend, altere o valor de "Delay before responding" para um número baixo (ex: 2 segundos) e envie mensagens variadas no whatsapp. A resposta de leitura e digitação não vai exceder este tempo máximo. Depois aumente o número livremente. Teste enviar duas mensagens curtas em menos de 2 segundos para validar se a resposta não está atropelando o raciocínio.
Como Reverter:
As alterações em HookExecutionService podem ser revertidas readicionando wait: delay.seconds no .set() de enqueue do job. Em ResponseBuilderJob, as chamadas das lógicas de escala de delays com .clamp(1.0, max...) podem retornar ao padrão duro das branchs anteriores.