APIからの呼び出しとWebアプリケーションからの呼び出しには違いはありません。 Webアプリケーションは、この呼び出しを正確に行います。
さらに、公開されていない場合、ウェブフックが受け取るのは、フィールドを含まない削除オブジェクトだけです。これは、前の回答に示されているトリックはここでは適用されないことを意味します。
私がこれを解決すると考えることができる唯一の方法は、いくつかのデータストア(Contentfulになる可能性があります)を別の呼び出しにして、エントリIDとおそらくタイムスタンプをそこに入れることです。ウェブフックは、未公開イベントを受け取ったときにこのデータストアにクエリを送信し、処理を続行するか、ウェブアプリから未公開が行われたかどうかを確認できます。このような
基本的には何か:
client.getSpace('<space_id>')
.then((space) => space.getEntry('<entry_id>'))
.then((entry) => {
otherService.SetUnpublishedThroughManualAPICall(entry.sys.id);
entry.unpublish();
})
その後、いくつかの擬似コードを使用してウェブフックに:
function HandleUnpublish(object entry) {
if(OtherService.CheckIfManualUnpublish(entry.sys.id)){
//Do some processing...
}
}
あなたは、このためのお店としてContentfulでフィールドを使用することを選ぶことができます。その場合は、このフィールドを設定解除する直前に設定します。
client.getSpace('<space_id>')
.then((space) => space.getEntry('<entry_id>'))
.then((entry) => {
entry.fields['en-US'].unpublishedTroughApi = true;
entry.update();
})
.then((entry) => entry.unpublish())
次に、管理APIを使用してエントリを再度フェッチし、フィールドを検査する必要があります。 Contentfulへの追加のAPIコールがいくつか追加されることに注意してください。
もう一度@Robbanに感謝します。それは賢明な回避策です – Manube