「Moments」をBlueskyに自動連携する方法

このブログに実装した「Moments(つぶやき機能)」を、BlueskyとAPI連携させました。 microCMSへの投稿をトリガーに、Cloudflare Workersを経由してBlueskyへ自動転送する仕組みです。

システム構成

  • Source: microCMS (Moments API)
  • Middleware: Cloudflare Workers
  • Destination: Bluesky (AT Protocol / bsky.social)
  • Identity: bloggers.win (Custom Domain Handle)

処理フロー

  1. Webhook Trigger
    • microCMSのコンテンツ公開時にCloudflare WorkersへPOSTリクエストを送信。
  2. Auth (com.atproto.server.createSession)
    • 環境変数に格納した BSKY_HANDLEBSKY_PASSWORD(アプリパスワード)を用いてJWTを取得。
  3. Blob Upload (com.atproto.repo.uploadBlob)
    • image_base64(Base64形式)または image.url(外部参照URL)からバイナリデータを生成。
    • 画像をBlobとしてBlueskyのPDSにアップロードし、cid を取得。
  4. Create Record (com.atproto.repo.createRecord)
    • 取得した本文(text)と画像Blob(embed)を結合し、app.bsky.feed.post としてレコードを作成。