Como resolver o atraso no disparo de webhooks do WooCommerce
Se você usa alguma integração como Bling ou outro ERP no WooCommerce, eles geralmente usam webhooks para manter os produtos, pedidos e estoque sincronizados.
Um webhook é um “aviso” enviado a um serviço externo com os detalhes de um evento como redução de estoque o mudança de status do pedido.
O tempo de disparo de um webhook depende da distância entre seu servidor e o servidor destino, além de precisar considerar a forma como o serviço externo trata essa mensagem antes de dar a resposta. Então pode demorar entre alguns milissegundos até cerca de 2 ou 3 segundos.
Para mitigar esse problema, o WooCommerce envia os eventos de forma assíncrona. Isso quer dizer que quando um webhook deve ser disparado ele é colocado em uma fila e depois processado em segundo plano.
Dessa forma, o tempo de resposta não impacta na vida do usuário, já que se você for atualizar um pedido e, durante essa mudança o webhook for disparado, você terá que aguardar esse tempo “em tempo real”.
No entanto, em alguns casos isso pode demorar mais do que o desejado, fazendo com que leve vários minutos ou até horas para o webhook ser disparado, deixando os dois sistemas sem sincronia.
O problema é causado por conta de uma má configuração do CRON do site, que confia no modo padrão do WordPress que depende de visitas e também pode deixar a experiência lenta.
O ideal é mudar o cron para um cron de servidor, mas caso você não queria fazer isso e queira resolver imediatamente os webhooks do WooCommerce, basta adicionar o código abaixo ao seu site. Isso vai fazer com que os webhooks sejam disparados imediatamente, e não mais agendados.
add_filter('woocommerce_webhook_deliver_async', '__return_false');PHP