mcpField
M
migrating-from-customer-io

migrating-from-customer-io

github.com/posthogマーケティング・グロース9714 回インストール今日更新
リポジトリ

migrating-from-customer-io について

Customer.io の選択したオートメーションを、PostHog の下書きワークフローに移行する手順を示すスキルです。個人データを移さず、ワークフローを有効化せずに、安全な選択、プレビュー、インポート、確認を進めます。

主な機能

  1. 01Customer.io オートメーションの移行
  2. 02下書きワークフローのプレビューとインポート
  3. 03送信者とセグメントの対応付け
  4. 04テンプレート、スニペット、レイアウトの処理
  5. 05プライバシーを考慮したデータ境界
  6. 06インポート結果と再実行の案内

活用シーン

  1. 01稼働中のオートメーションを PostHog へ移行
  2. 02未対応ステップをインポート前に確認
  3. 03メッセージテンプレートの不足に対処
  4. 04元データ修正後に下書きを再インポート

MCP 対応

Customer.io MCP サーバーからの読み取りと、PostHog の MCP ツール経由のインポートを調整します。`cio` コマンドラインツールも利用できます。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/posthog/ai-plugin --skill migrating-from-customer-io

インストール後、Claude Code で/migrating-from-customer-ioを入力して読み込まれたか確認します。

詳細

Customer.io からの移行

PostHog は Customer.io のオートメーションを下書きワークフローとしてインポートします。下書きからメッセージが送信されることはありません。担当者がそれぞれの下書きを確認し、インポートで引き継げなかった内容を修正してから有効にします。

2 つの MCP サーバー間でデータを受け渡します。Customer.io の MCP(または cio CLI)から読み取り、返された内容を変更せずに PostHog の workflows-import-customerio に渡します。変換は PostHog が行うため、workflows-create を使って自分でワークフローを再構築しないでください。

人のデータは移動しない

オートメーション、テンプレート、送信者 ID、セグメント名のみを渡してください。顧客プロフィール、セグメントメンバー、配信データ、イベントデータは取得も受け渡しもしないでください。対象者は通常すでに PostHog に存在しており、そのコピーはユーザーが求めていないプライバシー上のリスクとなります。

メッセージの内容をコンテキストに含めない

メールテンプレートは大容量で、それぞれ数十キロバイトの HTML を含むこともよくあります。PostHog のプロジェクトに Customer.io App API キーが保存されている場合(オプトアウトインポートを実行したチームには保存されています)、PostHog は Customer.io 自体からメッセージの内容を読み取ります。そのため、まずオートメーションのグラフを渡し、PostHog から求められた場合にのみテンプレートを読み取ってください。

手順

  1. PostHog のプロジェクトを確認します。 下書きは PostHog MCP のアクティブなプロジェクトに作成されます。project-get でプロジェクトを読み取り、名前と ID をユーザーに伝え、下書きをそのプロジェクトに作成してよいか確認します。別のプロジェクトにする場合は、Customer.io から何か読み取る前に switch-project で切り替えます。
  2. 環境を確認します。 Customer.io のワークスペースが複数ある場合は、どのワークスペースを移行するか尋ねます。その ID が、以下のすべてのパスで environment_id になります。
  3. オートメーションを一覧表示します。 Customer.io の読み取りツール(MCP では cio_read_api、CLI では cio api)で GET /v1/environments/{environment_id}/campaigns を呼び出します。結果は page(0 始まり)でページごとに 20 件返されるため、20 件未満のページが返るまで各ページを読み取ります。各オートメーションの状態を添えて一覧をユーザーに提示し、どれを移行するか尋ねます。通常は実行中のオートメーションが対象です。依頼がない限り、アーカイブ済みのものは除外します。
  4. 各オートメーションを読み取ります。 GET /v1/environments/{environment_id}/campaigns/{campaign_id} を呼び出します。レスポンスの campaign オブジェクトと、トップレベルの actions 配列を保持します。campaign.actions は存在しません。
  5. 送信者とセグメントを読み取ります。 sender_identities(id、email、name)を取得するには GET /v1/environments/{environment_id}/identities?type=email を呼び出し、segments はセグメント一覧から取得します(id、name、type のみ)。PostHog は各メールアドレスを同じアドレスの PostHog 送信者に対応付け、セグメント名をメモに記載します。
  6. テンプレートなしでプレビューします。 source: "customerio"、dry_run: true、campaigns: [{campaign, actions}]、sender_identities、segments を指定して workflows-import-customerio を呼び出します。1 回の呼び出しで最大 50 件のオートメーションを処理できます。
  7. 必要な場合にのみテンプレートを読み取ります。 content_fetched だけで判断せず、各オートメーションのメモを確認します。true は PostHog が一部のコンテンツを読み取ったことを示すだけで、1 つのオートメーション内のメッセージがすべて読み取られているとは限りません。メモにメッセージコンテンツがインポートに含まれていない、または PostHog がメッセージを読み取れなかったと記載されているオートメーションについては、template_id があるすべてのアクションのテンプレートを GET /v1/environments/{environment_id}/templates/{template_id} で読み取り、template オブジェクトを保持して、campaigns: [{campaign, actions, templates}] を指定して再度プレビューします。テンプレートは 1 つずつ読み取ります。ワークスペース内のテンプレートをすべて一覧表示すると、大規模なワークスペースではタイムアウトします。次回この手順を省略できるよう、Workflows のオプトアウトタブにある「Import from Customer.io」で App API キーが保存されることをユーザーに伝えます。
  8. スニペットとレイアウトを収集します。 メモに Customer.io のスニペット名が記載されている場合、または読み取ったテンプレート本文に {{ snippets.name }} が含まれている場合は、ワークスペースのスニペットを読み取り、snippets({name: content})として渡します。PostHog がコンテンツ自体を読み取った場合、スニペットも読み取っています。見つからなかったスニペットがあれば、メモに記載されています。メモにレイアウト名が記載されている場合は、GET /v1/environments/{environment_id}/layouts/{layout_id} を読み取り、その body を layouts({layout_id: body})として渡します。
  9. プレビュー結果を報告します。 各オートメーションについて、ステータスとメモをレベル別(下記参照)にまとめて伝えます。ステータスが failed のものをインポートする前に確認を求めます。validation_errors に下書きが拒否される理由が記載されています。
  10. インポートします。 dry_run: false と同じ引数を指定して再度呼び出します。各下書きのリンク(/workflows/{workflow_id})と needs_input のメモを改めて共有します。有効化する前に、チームでそれらに対応する必要があります。

エンドポイントのパラメーターが不明な場合は、そのエンドポイントのスキーマを確認します(resource.method を指定して cio_schema を使用)。リソース全体のスキーマを取得すると、数万トークンを消費します。

メモを読む

レベル意味ユーザーに伝えること
needs_input下書きに、チームだけが指定できる設定が必要です。メール送信者、トリガーコホート、分岐条件などが該当します有効化を妨げます。ワークフローごとに一覧にしてください。
approximatedPostHog ではステップの動作が異なります。たとえば、待機時間は最大 30 日です有効化する前に確認してください。
unsupportedPostHog に同等の設定がなく、含まれていません。たとえば、SMS ステップが該当します別の方法で再構築するかどうかを決めてください。

同じメモは、インポートしたワークフローの PostHog アプリ内にも表示されます。また、workflows-import-notes は 1 つのワークフローのメモを返します。

送信者とカテゴリー

メールには、Customer.io の送信者と同じアドレスを持つ PostHog のメール送信者が設定されます。そのアドレスの PostHog 送信者がない場合は、送信者として追加できるよう、needs_input メモにそのアドレスが記載されます。メールのサブスクリプションのトピックは、そのトピックからオプトアウトのインポートによって作成された PostHog のメッセージカテゴリーになります。トピックがインポートされていない場合は、その旨を示すメモが表示されます。

セグメントとコホート

Customer.io のセグメントはインポートされません。セグメントをトリガーとするオートメーションは、空のトリガーと needs_input メモを伴ってインポートされます。ユーザーがすでにそのセグメントに一致する PostHog コホートを持っている場合は、segment_cohorts: {"<segment id>": <cohort id>} を渡すと、そのセグメントのトリガーと条件にそのコホートが使われます。コホートをトリガーにするには、リアルタイムコホートが必要です。静的セグメントには専用のメモが表示されます。ワークフローでは静的コホートを確認できないため、ユーザーはそれを条件として再構築する必要があります。

プッシュ通知

プッシュのステップは unsupported メモとしてインポートされ、デバイストークンはインポートされません。ユーザーが Customer.io からプッシュ通知を送信している場合、アプリが PostHog SDK に登録したとき、またはエクスポートしたデバイストークンを PostHog のプッシュチャネルにインポートしたときにのみ、デバイスが PostHog に登録されることを伝えてください。トークンはユーザーデータであるため、そのインポートは別の手順としてユーザーが開始します。

再実行

オートメーションを再度インポートすると、その下書きが置き換えられるため、Customer.io で問題を修正した後に再実行できます。それ以降にチームが下書きに加えた編集は失われるため、再インポートする前に確認してください。すでに誰かが有効化したワークフロー、またはユーザーに編集権限がないワークフローは変更されず、結果は skipped になります。

インポート後

下書きは有効化しないでください。ユーザーに needs_input メモを確認してもらった後、テストと有効化のために building-workflows スキルに引き継いでください。有効化にはユーザーの明示的な承認が必要です。

コメント