Webhook falha com o plugin WP Discourse

Instalei o plugin WP Discourse e tudo parece estar funcionando bem, exceto o webhook “Sync Comment Data”. Ele continua retornando como “Falha” com um Status Code: 400.

Esta é a resposta:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Sua nave enviou uma requisição que este servidor não pôde entender.<br />
</p>
</body></html>
  • A URL do payload parece estar correta.
  • A Chave Secreta do Webhook está configurada tanto no Discourse quanto no plugin do WP.
  • O Tipo de Conteúdo é application/json.
  • A opção Post Event está marcada.
  • A opção Verificar certificado TLS da URL do payload está marcada.
  • A opção Ativo está marcada.

Qualquer sugestão seria muito apreciada.

Verifique novamente se a URL do payload e a Chave Secreta do Webhook estão configuradas corretamente.

Se isso não resolver o problema, você pode me informar qual estrutura de permalink seu site WordPress está usando? A estrutura de permalink é encontrada na seção Configurações / Permalinks do painel do WordPress.

A URL do payload e a chave secreta do webhook estão configuradas corretamente.

A estrutura de permalink é Post Name.

Qual resposta você recebe do seu site WordPress ao clicar no botão “Ping” na lista de eventos do webhook no Discourse?

Só estou me perguntando se há mais alguma reflexão sobre isso…

Você sabe se desativou a REST API do WordPress no seu site? Se sim, isso causaria falhas nas solicitações de webhook enviadas pelo Discourse.

Parece estar ativado, mas vou investigar mais a fundo.

REST parece estar ok .. mas quando digito a URL do Payload no navegador, recebo um 404 …

Isso é esperado. A rota que o webhook publica no Discourse aceita apenas uma solicitação POST.

Então, seria esperado que o ping funcionasse?

Sim, o ping deve funcionar.

Qual é o formato da URL que você está adicionando ao campo URL de Carga Útil do webhook no Discourse? Você pode omitir a parte do domínio da URL. A URL fornecida na descrição da opção Sincronizar Dados de Comentário no WordPress deve estar correta (ela é criada com base na estrutura de permalinks que seu site utiliza), mas pode ser que não seja adequada para o seu caso.

https://my.url.net/wp-json/wp-discourse/v1/update-topic-content

Copie e cole do plugin WP Discourse. Seção “Sincronizar Dados de Comentários” na aba webhooks.

A URL do Payload parece correta. Você tem algum plugin relacionado à segurança no seu site WordPress que possa estar bloqueando a solicitação?

Agora sim, mas não tínhamos quando encontrei o problema inicialmente.

O plugin é Solid Security Pro - SolidWP

Uma das funcionalidades anunciadas do plugin Ithemes Security é que ele pode ser usado para bloquear o acesso à Rest API. Vale a pena confirmar se essa não é a causa do problema.

Você não precisa usar o webhook Sync Comment Data com o plugin WP Discourse. O principal benefício de utilizá-lo é permitir que os comentários apareçam imediatamente após serem publicados no Discourse, em vez de ter que esperar até 10 minutos para buscar novos comentários. Em sites muito ativos, o webhook pode reduzir o número de solicitações de API que seu site faz ao Discourse. Isso afeta principalmente sites que exibem a contagem de comentários em uma página de índice de posts.

Sim, está funcionando, mas eu queria implementar os webhooks para evitar o atraso.
Verifiquei com nosso desenvolvedor e ele disse que não há nenhuma REST API bloqueada antes ou depois da instalação do plugin de segurança. Estou perplexo.

Existe alguma maneira de confirmar a URL do payload além da página de webhook do plugin do Discourse?

A captura de tela que você postou acima é um bom indicativo de que a URL do payload está correta. O código de resposta 400 que você está recebendo indica que o servidor WordPress está rejeitando a solicitação. Se o problema fosse uma incompatibilidade na chave secreta, você receberia um código de resposta 500.

Se você tiver acesso ao arquivo de Log de Acesso do seu site WordPress, ele provavelmente mostrará exatamente qual é o problema.

Você está familiarizado com o log de acesso exato do WP que devo procurar? Não consigo encontrar nada útil.