結論
ContentfulのWebhookで送信するPayloadにはエスケープが必要な特殊文字を含まないようにする。
理由はContentful側でエスケープする方法がないため。
背景
Contentfulで記事を投稿した際、Twitterへ投稿するためのWebAPIにWebhookからリクエストを行うように設定していた。
その際、記事のslug
とtitle
を下記のようにリクエストボディ(Payload)に設定していた。
{
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"slug": "{ /payload/fields/slug/ja }",
"title": "{ /payload/fields/title/ja }",
"revision": "{ /payload/sys/revision }"
}
基本的にはこれでも問題ないが、title
は日本語の記事タイトルが入るため、記号等も任意で設定できるようになっている。
そのためクォーテーションなどを入れた際にエスケープされていない不正なJSONになってしまい、WebAPI側でエラーになっていた。
対処
現状Contentfulからリクエストする際にエスケープする方法は無さそうなので、エスケープが必要な記号が常に含まれないEntry
のid
を渡すようにした。
WebAPIの処理内でid
を使ってContentfulからslug
とtitle
を取得するようにしている。