WP Discourse プラグインで Webhook が失敗する問題

WP Discourse プラグインをインストールしましたが、「Sync Comment Data」ウェブフックを除き、すべて正常に動作しているようです。このウェブフックは常に「Failed」で、Status Code: 400 が返ってきます。

レスポンスは以下の通りです:

<!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>
  • payload URL は正しいようです。
  • Webhook Secret Key は Discourse と WP プラグインの両方で設定されています。
  • Content Typeapplication/json です。
  • Post Event がチェックされています。
  • Check TLS certificate of payload url がチェックされています。
  • Active がチェックされています。

ご助言をいただければ幸いです。

「いいね!」 2

ペイロード URL と Webhook シークレットキーが正しく設定されているか、もう一度確認してください。

それでも問題が解決しない場合は、WordPress サイトで使用しているパーマリンク構造について教えてください。パーマリンク構造は、WordPress ダッシュボードの「設定」>「パーマリンク」セクションで確認できます。

「いいね!」 1

ペイロードのURLとウェブフックのシークレットキーが正しく設定されています。

パーマリンク構造は「投稿名」です。

「いいね!」 1

Discourse の webhook イベントリストから「Ping」ボタンをクリックした際、WordPress サイトからどのような応答が返されますか?

「いいね!」 2

「いいね!」 1

これについてさらにご意見があればお聞かせいただけますでしょうか…

WordPress の REST API を無効にしているか確認されましたか?もし無効になっている場合、Discourse から送信される Webhook リクエストが失敗する原因となります。

有効になっているようですが、さらに詳しく調べてみます。

REST は問題なさそうですが、ペイロード URL をブラウザに入力すると 404 エラーが表示されます…

これは想定通りです。Discourse 側でウェブフックがポストするルートは POST リクエストのみを受け付けるようになっています。

では、ping は動作するはずですか?

はい、ping は動作するはずです。

Discourse のウェブフックの「ペイロード URL」フィールドに追加している URL の形式は何ですか?URL のドメイン部分は省略しても構いません。WordPress の「Sync Comment Data」オプションの説明に表示される URL が正しいはずです(これはお使いのサイトのパーマリンク構造に基づいて生成されます)が、場合によってはご自身のケースには適していない可能性があります。

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

WP Discourse プラグインからコピーして貼り付けます。Webhooks タブの「Sync Comment Data」セクションです。

「いいね!」 1

ペイロード URL は正しいようです。WordPress サイトにリクエストをブロックする可能性があるセキュリティ関連のプラグインはありますか?

現在はそうですが、最初に問題に遭遇した当時はそうではありませんでした。

プラグインは Solid Security Pro - SolidWP です。

iThemes Security プラグインの広告機能の一つに、Rest API へのアクセスをブロックできるという点があります。これが問題の原因ではないかを確認することをお勧めします。

WP Discourse プラグインでは、Sync Comment Data ウェブフックを使用する必要はありません。これを使う主な利点は、Discourse で投稿されたコメントが、新しいコメントを取得するために最大 10 分待つ必要がなく、即座に表示されるようになることです。非常にアクセスの多いサイトでは、ウェブフックを使用することで、サイトから Discourse へ送信される API リクエストの数を減らすことができます。これは主に、投稿一覧ページにコメント数を表示しているサイトに影響します。

はい、動作確認はできていますが、遅延を避けるためにウェブフックを実装したかったのです。開発者に確認したところ、セキュリティプラグインのインストール前後に関わらず、REST API をブロックする設定はないとのことでした。何が起きているのか、私にはわかりません。

Discourse プラグインの webhook ページ以外で、ペイロード URL を確認する方法はありますか?

上記のスクリーンショットは、ペイロード URL が正しいことをよく示しています。取得している 400 のレスポンスコードは、WordPress サーバーがリクエストを拒否していることを示しています。もし問題がシークレットキーの不整合であれば、500 のレスポンスコードが表示されたはずです。

WordPress サイトのアクセスログファイルにアクセスできる場合、そのログに問題の正確な原因が示されている可能性があります。

正確な WordPress のアクセスログをどこで確認すればよいかご存じですか?役立つ情報が見つかりません。