Webhook falla con el plugin WP Discourse

He instalado el plugin WP Discourse y todo parece funcionar correctamente, excepto el webhook “Sync Comment Data”. Sigue devolviendo un error con un Status Code: 400.

Esta es la respuesta:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
  • La payload URL parece ser correcta.
  • La Webhook Secret Key está configurada tanto en Discourse como en el plugin de WP.
  • El Content Type es application/json.
  • La opción Post Event está marcada.
  • La opción Check TLS certificate of payload url está marcada.
  • La opción Active está marcada.

Agradecería mucho cualquier sugerencia.

2 Me gusta

Verifica que la URL de la carga y la clave secreta del webhook estén configuradas correctamente.

Si eso no soluciona el problema, ¿podrías indicarme qué estructura de enlaces permanentes está utilizando tu sitio de WordPress? La estructura de enlaces permanentes se encuentra en la sección Configuración / Enlaces permanentes de tu panel de control de WordPress.

1 me gusta

La URL de la carga útil y la clave secreta del webhook están configuradas correctamente.

La estructura de enlaces permanentes es Nombre de la publicación.

1 me gusta

¿Qué respuesta obtienes de tu sitio de WordPress si haces clic en el botón “Ping” desde la lista de eventos del webhook en Discourse?

2 Me gusta

1 me gusta

Solo me preguntaba si hay alguna otra reflexión sobre esto…

¿Sabes si has desactivado la API REST de WordPress en tu sitio? De ser así, eso provocaría que las solicitudes de webhook enviadas desde Discourse fallen.

Parece estar habilitado, pero lo investigaré más a fondo

REST parece estar bien… pero cuando escribo la URL del Payload en el navegador, obtengo un 404…

Eso es esperado. La ruta a la que el webhook publica en Discourse solo acepta una solicitud POST.

¿Se esperaría entonces que el ping funcione?

Sí, el ping debería funcionar.

¿Qué formato tiene la URL que estás agregando al campo Payload URL del webhook en Discourse? Puedes omitir la parte del dominio de la URL. La URL que se te proporciona en la descripción de la opción Sync Comment Data en WordPress debería ser correcta (se crea según la estructura de enlaces permanentes que usa tu sitio), pero es posible que no sea la adecuada para tu caso.

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

Copie y pegue desde el complemento WP Discourse. Sección Sincronizar datos de comentarios en la pestaña Webhooks.

1 me gusta

La URL del payload parece correcta. ¿Tienes algún plugin relacionado con la seguridad en tu sitio de WordPress que pueda estar bloqueando la solicitud?

Ahora sí, pero no cuando me encontré inicialmente con el problema.

El complemento es Solid Security Pro - SolidWP

Una de las funciones promocionadas del plugin Ithemes Security es que puede utilizarse para bloquear el acceso a la API REST. Sería conveniente confirmar que esto no es la causa del problema.

No es necesario utilizar el webhook Sync Comment Data con el plugin WP Discourse. La principal ventaja de usarlo es que permite que los comentarios aparezcan inmediatamente después de publicarse en Discourse, en lugar de tener que esperar hasta 10 minutos para obtener nuevos comentarios. En sitios muy activos, el webhook puede reducir la cantidad de solicitudes a la API que tu sitio realiza a Discourse. Esto afecta principalmente a sitios que muestran el número de comentarios en una página de índice de publicaciones.

Sí, lo tengo funcionando, pero quería implementar los webhooks para evitar el retraso.
Consulté con nuestro desarrollador y dijo que no hay ninguna API REST bloqueada antes de que instalara el plugin de seguridad ni después. Estoy desconcertado.

¿Existe alguna forma de confirmar la URL del payload además de en la página de webhooks del plugin de Discourse?

La captura de pantalla que publicaste arriba es una buena indicación de que la URL del payload es correcta. El código de respuesta 400 que estás recibiendo indica que el servidor de WordPress está rechazando la solicitud. Si el problema fuera una clave secreta que no coincide, estarías recibiendo un código de respuesta 500.

Si tienes acceso al archivo de registro de acceso de tu sitio de WordPress, probablemente te mostrará exactamente cuál es el problema.

¿Estás familiarizado con el registro de acceso exacto de WP que debería estar revisando? No puedo encontrar nada útil.