これを機能させるのに本当に苦労しています。Contentful で Webhook 定義をセットアップしました。Contentful でエントリを公開すると、HTTP POST リクエストが webhooks.example.com に送信されます。
そのサブドメインで、リクエストを受け入れるために NodeJS サーバーを実行しています。Contentful API docsを見てきましたが、リクエストの本文には新しく公開されたエントリを含める必要があると書かれています。
リクエストを受信する 2 つの方法を試しましたが、どちらもリクエスト本文について何も提供していません。まず、contentful-webhook-server NPM モジュールを試しました。
var webhooks = require("contentful-webhook-server")({
path: "/",
username: "xxxxxx",
password: "xxxxxx"
});
webhooks.on("ContentManagement.Entry.publish", function(req){
console.log("An entry was published");
console.log(req.body);
});
webhooks.listen(3025, function(){
console.log("Contentful webhook server running on port " + 3025);
});
ここでリクエストが届き、メッセージAn entry was published
が表示されますが、req.body
未定義です。console.log(req)
代わりに、本文を含まない完全なリクエスト オブジェクトを表示できます。
そこで、すべての POST リクエストを受け入れる基本的な Express サーバーを実行してみました。
var express = require("express"),
bodyParser = require("body-parser"),
methodOverride = require("method-override");
var app = express();
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({extended:true}));
app.use(methodOverride("X-HTTP-Method-Override"));
app.post("/", function(req, res){
console.log("Incoming request");
console.log(req.body);
});
繰り返しますが、Incoming request
メッセージは表示されますがreq.body
空です。Webhook のユーザー名/パスワードを使用していないため、この方法が間違っていることはわかっています。
着信 Webhook リクエストを正しく受信し、本文のコンテンツを取得するにはどうすればよいですか?