さわらブログ

さわら(@xhiroga)の技術ブログ

Contentful にコンテンツが追加されたらツイートする by IFTTT(ノーコード)

TL:DR

ContentfulでIFTTTが用意したWebhookを叩いてツイートします。 (Zapierの方が簡単ですが、個人開発ではWebhookが無料で利用できるIFTTTがオススメです)

手順

  1. IFTTTのワークフローを設定する
  2. ContentfulでWebhookを叩く

IFTTTのワークフローを設定する

特に難しいことはなく、IFTTTで Webhook → Twitterの連携を設定します。

f:id:hiroga_cc:20210207175234p:plain
If Maker Event "tweet", then Post a tweet

ツイートの文章はIFTTT側に入れないのがポイントです。
Contentful以外のサービスからもWebhook経由でツイートしたい場合があるのを見越して、ワークフローを他のサービスと共用にするためです(IFTTTの無料枠が3枠なので節約するに越したことはない)
要するに、IFTTTはあくまでTwitterに付随するWebhookとして使います。

f:id:hiroga_cc:20210207174938p:plain
webhook to tweet

2. ContentfulでWebhookを叩く

IFTTTのWebhookエンドポイントにクセがあるので注意です。 ポイントは2点。

  1. Webhookのエンドポイントはワークフローの画面ではなく、プロフィール > My Services > Webhookから確認する。
  2. ContentfulのContent Typeは application/json に設定する。
  3. ツイートの文面をContentfulのWebhook側に埋め込む。

Content Typeについて、Zapierの場合はデフォルトの "application/vnd.contentful.management.v1+json" でも受け付けてくれます。優しいですね。

ツイートの文面のPayloadはこんな感じです。
実験したところ改行コード(\n)はツイートにも反映されました。ありがたい。

{
  "value1": "{ /payload/fields/title/en-US }\n新しい記事を公開しました!"
}

それからWebhookの発火タイミングですが、ユースケース次第ではあるものの「記事が投稿された場合に発火」ならEntryの Publishだけにチェックすれば良さそうです。

f:id:hiroga_cc:20210207175633p:plain
Entry(おそらくContentの旧称)

デバッグ時には何度もコンテンツをPublishする必要がありますが、記事のステータスを Unpublish → Publish に切り替えれば何度でも投稿できます。楽ですね。

まとめ

TwitterにWebhookを生やす感覚でIFTTTを使っていこう、という話でした。