pp-customer-io について
pp-customer-ioは、マーケティングや運用チーム、エージェント向けのCustomer.io CLIスキルです。ジャーニー分析、顧客タイムライン、配信前チェック、抑制の監査、Reverse-ETLの状態確認に対応し、同じ操作をstdioとHTTPで提供するMCPサーバーも付属します。
主な機能
- 01ジャーニーファネルとセグメント分析
- 02顧客イベントのタイムライン
- 03ブロードキャスト配信前チェック
- 04抑制操作と監査ログ
- 05Reverse-ETLの稼働状況監視
活用シーン
- 01セグメント別のジャーニー完了率の測定
- 02顧客へのメッセージ配信状況の調査
- 03ブロードキャスト前の対象と抑制の確認
- 04一括抑制の監査と原因追跡
MCP 対応
付属のMCPサーバーは、エージェント向けにCLIと同じ操作をstdioおよびHTTP経由で提供します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-customer-ioインストール後、Claude Code で/pp-customer-ioを入力して読み込まれたか確認します。
詳細
Customer.io — Printing Press CLI
前提条件:CLI のインストール
このスキルは customer-io-pp-cli バイナリを使用します。**このスキルのコマンドを実行する前に、CLI がインストールされていることを必ず確認してください。**インストールされていない場合は、先にインストールします。
- Printing Press インストーラーを使ってインストールします。バイナリの既定のインストール先は、macOS/Linux では
$HOME/.local/bin、Windows では%LOCALAPPDATA%\Programs\PrintingPress\binです。npx -y @mvanhorn/printing-press-library install customer-io --cli-only - 次のコマンドで確認します:
customer-io-pp-cli --version - 表示されたインストール先ディレクトリが、このスキルを実行するエージェント/ランタイムの
$PATHに含まれていることを確認します。
npx でのインストールに失敗した場合(Node がない、オフラインなど)は、Go を直接インストールしてください(Go 1.26.6 以降が必要です)。
go install github.com/mvanhorn/printing-press-library/library/marketing/customer-io/cmd/customer-io-pp-cli@latest
インストール後に --version で「command not found」と表示される場合、ランタイムからバイナリのディレクトリを $PATH 経由で参照できていません。確認が成功するまで、スキルのコマンドを実行しないでください。
この CLI の使用場面
ウェブ UI での操作が面倒な Customer.io の作業を行う場合に、この CLI を使ってください。たとえば、監査証跡を伴う一括抑制、セグメント別のジャーニーファネル分析、インシデントのトリアージ用のカスタマー 360 タイムライン、重要な配信前のブロードキャスト事前チェック、Reverse-ETL のヘルスチェックなどです。エージェントから Customer.io を操作する場合にも適しています。付属の MCP サーバーは、同じ動詞を stdio と HTTP トランスポート経由で公開します。生イベントの取り込み(Track API)や、ソースごとの CDP 書き込みキーには、公式のサーバーサイド SDK のいずれかを使用してください。
独自の機能
この API 向けの他のツールでは、以下の機能を利用できません。
蓄積されるローカル状態
-
campaigns funnel— 1 つのキャンペーンについて、ステップごとのジャーニーファネル(送信 → 配信 → 開封 → クリック → コンバージョン)を表示します。必要に応じてセグメント別に分析できます。エージェントに「セグメント X のうち、ジャーニー Y を完了した割合は?」と聞かれた場合に使います。同期済みデータに対する 1 回のクエリで答えられ、2 回のエクスポートとスプレッドシートは不要です。
customer-io campaigns funnel cmp_482 --segment seg_19 --since 30d --json -
segments overlap— ローカルストアのセグメントメンバーシップから、ペアごとおよび複数セグメント間のベン図を計算します。オーディエンス設計を検証するとき、「解約リスクの高いセグメントと高価値セグメントは重複しているか?」といった確認に使います。2 回エクスポートする必要はありません。
customer-io segments overlap seg_19 seg_42 seg_88 --json -
customers timeline— ローカルストアの identify、配信、抑制、セグメントメンバーシップのイベントを統合した、顧客ごとの時系列イベントストリームです。インシデントのトリアージや、「このユーザーにウェルカム SMS は届いたか?」といった確認に使います。UI を延々とスクロールする代わりに、コマンド 1 つで確認できます。
customer-io customers timeline [email protected] --since 30d --json
送信時の安全性
-
broadcasts preflight— ブロードキャストを開始する前に、対象セグメントの規模、抑制との重複、ローカルの配信キャッシュに記録された最終送信日時を確認し、理由を構造化した緑/黄/赤の判定を出力します。二重送信、意図しない大量メール送信、429 の集中を避けるため、ブロードキャストの前に必ず使ってください。
customer-io broadcasts preflight 123457 bcr_77 --segment seg_19 --json -
suppressions audit— 指定期間内のすべての抑制について、原因となったバウンスまたは苦情の配信イベント(該当するイベントがない場合は「manual」)を特定します。顧客が抑制されている理由を運用エンジニアが説明する必要がある場合や、苦情に起因する解約を監査する場合に使います。
customer-io suppressions audit --since 30d --reason bounce --json -
cdp-reverse-etl health— Reverse-ETL の実行履歴を、ステータス、行数、エラー理由とともに確認する名前付き動詞です。オプションで--watchポーリングモードも利用できます。「ウェアハウスの同期は正常か?」という毎日のスタンドアップでの確認に使います。個別に行う 3 回の API 呼び出しと jq フィルターを置き換えます。
customer-io cdp-reverse-etl health --since 24h --watch
監査と来歴
-
suppressions bulk add— メールアドレス/顧客 ID の CSV または JSONL を読み込み、適応型スロットリングで実際の抑制呼び出しを並列実行し、すべての呼び出しを日付で分類したローカル JSONL 監査ログに追記します。後から「誰が、いつ、誰を、どのステータスコードで抑制したか」を説明する必要がある、コンプライアンス要件に基づく一括処理に使用します。
customer-io suppressions bulk add --from-csv complaints.csv --reason complaint --dry-run -
deliveries triage— テンプレート、ステータス、期間でライブ配信とローカル配信を絞り込み、インシデント報告書にそのまま貼り付けられる自己完結型のバンドル(エラー理由別の SQL グループ集計を含む summary.md、deliveries.jsonl、recipients.txt)を作成します。バンドルを Claude または Notion ドキュメントに渡せば、インシデントを一度で引き継げます。UI のスクロールにかかる 30 分以上の時間を削減します。
customer-io deliveries triage --template tx_91 --status bounced --since 1h --bundle ./incident-2026-05-07
コマンドリファレンス
broadcasts — 単発のブロードキャストを一覧表示、確認、トリガーします(10 秒あたり 1 リクエストにレート制限)
customer-io-pp-cli broadcasts get— ブロードキャストを 1 件取得しますcustomer-io-pp-cli broadcasts list— 環境内のブロードキャストを一覧表示しますcustomer-io-pp-cli broadcasts metrics— ブロードキャスト 1 件のメトリクスを読み取りますcustomer-io-pp-cli broadcasts trigger— ブロードキャストをトリガーします(10 秒あたり 1 リクエストにレート制限)
campaigns — キャンペーンを一覧表示し、キャンペーンとジャーニーのメトリクスを読み取ります
customer-io-pp-cli campaigns get— キャンペーンを 1 件取得しますcustomer-io-pp-cli campaigns journey_metrics— ジャーニーファネルのステップごとのメトリクスを読み取りますcustomer-io-pp-cli campaigns list— 環境内のキャンペーンを一覧表示しますcustomer-io-pp-cli campaigns metrics— キャンペーンの集計メトリクスを読み取ります
cdp_destinations — CDP の宛先を一覧表示します(Premium 機能)
customer-io-pp-cli cdp_destinations— CDP の宛先を一覧表示します
cdp_reverse_etl — Reverse-ETL の同期を一覧表示します(Premium 機能)
customer-io-pp-cli cdp_reverse_etl— Reverse-ETL の同期を一覧表示します
cdp_sources — CDP のデータソースを一覧表示します(Premium 機能)
customer-io-pp-cli cdp_sources— CDP のソースを一覧表示します
customers — 環境(ワークスペース)内の Customer.io 顧客プロフィールを管理します
customer-io-pp-cli customers get— 顧客の属性を取得しますcustomer-io-pp-cli customers list_activities— 顧客のアクティビティイベントを一覧表示しますcustomer-io-pp-cli customers list_messages— 顧客に送信されたメッセージを一覧表示しますcustomer-io-pp-cli customers list_segments— 顧客が属するセグメントを一覧表示します
deliveries — 配信イベント(送信、開封、クリック、バウンス、苦情)を確認します
customer-io-pp-cli deliveries get— 配信を 1 件取得しますcustomer-io-pp-cli deliveries list— 最近の配信を一覧表示します
exports — データエクスポート(セグメントのメンバー、配信、顧客など)を開始、監視、ダウンロードします
customer-io-pp-cli exports download— 完了したエクスポートの署名付きダウンロード URL を取得しますcustomer-io-pp-cli exports get— エクスポートのステータスを取得しますcustomer-io-pp-cli exports list— 最近のエクスポートを一覧表示します
segments — セグメントを一覧表示し、セグメントのメンバーを確認します
customer-io-pp-cli segments customer_count— セグメントの顧客数を取得しますcustomer-io-pp-cli segments get— セグメントを 1 件取得しますcustomer-io-pp-cli segments list— 環境内のセグメントを一覧表示しますcustomer-io-pp-cli segments members— セグメント内の顧客 ID を一覧表示します
suppressions — 顧客を配信停止または配信停止解除します。コンプライアンス対応の公式監査サーフェスです
customer-io-pp-cli suppressions add— 顧客を配信停止にしますcustomer-io-pp-cli suppressions count— 環境内の配信停止済み顧客数を取得します(Customer.io には一覧エンドポイントがありません。'exports...customer-io-pp-cli suppressions remove— 配信停止を解除します
transactional — トランザクションテンプレートとメトリクスを確認します
customer-io-pp-cli transactional get_template— トランザクションテンプレートを 1 件取得しますcustomer-io-pp-cli transactional list_templates— トランザクションテンプレートを一覧表示しますcustomer-io-pp-cli transactional template_metrics— トランザクションテンプレート 1 件のメトリクスを読み取ります
webhooks — 配信およびエンゲージメントイベントの Reporting Webhooks を管理します
customer-io-pp-cli webhooks get— Reporting Webhook を 1 件取得しますcustomer-io-pp-cli webhooks list— Reporting Webhooks を一覧表示します
workspaces — Service Account から参照できる環境(ワークスペース)を一覧表示します
customer-io-pp-cli workspaces account— 現在のアカウントの詳細を取得しますcustomer-io-pp-cli workspaces list— SA トークンから参照できる environment_ids を含め、現在のアカウントを読み取ります
適切なコマンドを見つける
実行したいことは分かっていても、どのコマンドを使えばよいか分からない場合は、CLI に直接尋ねてください。
customer-io-pp-cli which "<capability in your own words>"
which は、自然言語による機能の問い合わせを、この CLI の厳選された機能インデックスから最も適したコマンドに対応付けます。終了コード 0 は少なくとも 1 件一致したことを示します。終了コード 2 は確度の高い一致がなかったことを示します。その場合は --help を使うか、より絞り込んだ問い合わせをしてください。
レシピ
ウェルカムジャーニーでエンゲージメントがない高価値顧客を見つける
customer-io campaigns funnel cmp_welcome --segment seg_high_value --since 90d --agent --select steps.delivered.count,steps.opened.count,steps.clicked.count,non_engaged.recipients
ファネルコマンドは、同期済みの配信データとセグメントのメンバーを結合します。--agent と --select を組み合わせると、入れ子が深いファネルのレスポンスを、件数とエンゲージメントがない受信者のリストだけに絞り込めるため、エージェントのコンテキストを小さく保てます。
トランザクションメールのバウンス急増に備えてインシデント資料を作成する
customer-io deliveries triage --template tx_password_reset --status bounced --since 2h --bundle ./incident-bounce-2026-05-07
エラー理由を分類した summary.md、配信オブジェクト全体を含む deliveries.jsonl、および受信者の一覧 recipients.txt を作成します。Notion のインシデントドキュメントや Claude の要約プロンプトに、そのまま貼り付けられます。
ブロードキャストを安全に実行できることを確認する
customer-io broadcasts preflight bcr_summer_promo --segment seg_active_30d --json
構造化された理由(セグメントのサイズ、抑制対象との重複、同期済み配信データに基づく最終送信日時)とともに、緑/黄/赤の判定を返します。一定以上の規模のブロードキャストを実行する前に、必ず実行してください。
苦情リストを出所情報付きで一括抑制する
customer-io suppressions bulk add --from-csv complaints-2026-05.csv --reason complaint --dry-run
実際に反映するには --dry-run を外してください。すべての呼び出しは、タイムスタンプ、受信者、ステータス、HTTP コードとともに ~/.customer-io/audit/suppressions-2026-05-07.jsonl に記録されるため、後から根拠を確認できます。
Reverse-ETL 同期をリアルタイムで監視する
customer-io cdp-reverse-etl health --watch --since 24h
60 秒ごとにポーリングし、同期ごとにステータスの行を出力します。ログを保存するには、tee にパイプしてください。
認証の設定
Customer.io では、Service Account トークン(sa_live_* プレフィックス)を使用します。CLI は OAuth クライアントクレデンシャルエンドポイント https://us.fly.customer.io/v1/service_accounts/oauth/token(EU ワークスペースの場合は eu.fly.customer.io)を通じて、このトークンを有効期間の短い JWT に交換し、Journeys UI API(/v1/...)と CDP コントロールプレーン(/cdp/api/...)の両方で JWT を Bearer トークンとして使用します。customer-io auth login --sa-token $CIO_TOKEN --region us を一度実行してください。キャッシュされた JWT は自動で更新されます。Track API(Site ID と API Key による別個の認証)は、意図的に v1 の対象外としています。SA トークンが統一された認証情報です。
customer-io-pp-cli doctor を実行して、設定を確認してください。
エージェントモード
任意のコマンドに --agent を追加します。次のオプションに展開されます:--json --compact --no-input --no-color --yes。
-
パイプ可能 — stdout に JSON、stderr にエラーを出力します
-
フィルター可能 —
--selectでフィールドを絞り込めます。ドット区切りのパスで入れ子の構造をたどり、配列は各要素をたどります。レスポンスが冗長な API でコンテキストを小さく保つために重要です。customer-io-pp-cli broadcasts list mock-value --agent --select id,name,status -
プレビュー可能 —
--dry-runで、リクエストを送信せずに内容を確認できます -
オフライン対応 — 同期/検索コマンドでは、利用可能な場合にローカルの SQLite ストアを使用できます
-
非対話型 — プロンプトは表示せず、すべての入力をフラグで指定します
-
明示的な再試行 — すでに存在するリソースの作成を成功として扱う場合に限り、
--idempotentを使用してください
レスポンスエンベロープ
ローカルストアまたは API からデータを読み取るコマンドは、出力を出所情報のエンベロープでラップします。
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
データには .results を解析し、ライブデータかローカルデータかを確認するには .meta.source を参照してください。人が読める N results (live) の概要は、stdout がターミナルの場合に限り stderr に出力されます。パイプやエージェントで処理する場合、stdout には純粋な JSON が出力されます。
エージェントからのフィードバック
あなた自身やエージェントが、この CLI の気になる点に気付いたら、記録してください。
customer-io-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
customer-io-pp-cli feedback --stdin < notes.txt
customer-io-pp-cli feedback list --json --limit 10
エントリーは ~/.customer-io-pp-cli/feedback.jsonl にローカル保存されます。CUSTOMER_IO_FEEDBACK_ENDPOINT が設定され、かつ --send が渡されているか、CUSTOMER_IO_FEEDBACK_AUTO_SEND=true が設定されている場合を除き、POST されることはありません。デフォルトの動作はローカル保存のみです。
バグ報告ではなく、意外に感じたことを書いてください。短く、具体的に、1 行で記述します。積み重ねにつながるのは、そうした記録です。
出力先
すべてのコマンドで --deliver <sink> を指定できます。出力は標準出力への出力に加えて、または標準出力への出力の代わりに、指定した出力先に送られます。そのため、エージェントはコマンド結果を手動でパイプ処理せずに振り分けられます。対応している出力先は3種類です。
| 出力先 | 効果 |
|---|---|
stdout | デフォルト。標準出力のみに書き込みます |
file:<path> | 出力を <path> にアトミックに書き込みます(tmp + rename) |
webhook:<url> | 出力本文を URL に POST します(--compact の場合は application/json または application/x-ndjson) |
不明なスキームは、対応しているスキームを示す構造化エラーとともに拒否されます。Webhook の失敗時はゼロ以外の終了コードが返され、URL と HTTP ステータスが標準エラーに記録されます。
名前付きプロファイル
プロファイルは、保存済みのフラグ値のセットで、複数回の実行で再利用できます。スケジュールされたエージェントが毎回同じ設定で同じコマンドを呼び出す場合に使用します。これは HeyGen の「Beacon」パターンです。
customer-io-pp-cli profile save briefing --json
customer-io-pp-cli --profile briefing broadcasts list mock-value
customer-io-pp-cli profile list --json
customer-io-pp-cli profile show briefing
customer-io-pp-cli profile delete briefing --yes
明示的なフラグは常にプロファイル値より優先され、プロファイル値はデフォルトより優先されます。agent-context は、実行時に情報を調べるエージェントがプロファイルを見つけられるよう、利用可能なすべてのプロファイルを available_profiles の下に一覧表示します。
終了コード
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 2 | 使用エラー(引数が正しくありません) |
| 3 | リソースが見つかりません |
| 4 | 認証が必要です |
| 5 | API エラー(上流の問題) |
| 7 | レート制限中(待機して再試行してください) |
| 10 | 設定エラー |
引数の解析
$ARGUMENTS を解析します。
- 空、
help、または--help→customer-io-pp-cli --helpの出力を表示します installで始まる場合 →mcpで終わる場合は MCP のインストール、それ以外の場合は上記の前提条件を参照します- その他すべて → 直接使用(
--agentを付けて CLI コマンドとして実行します)
MCP サーバーのインストール
- MCP サーバーをインストールします。
go install github.com/mvanhorn/printing-press-library/library/other/customer-io/cmd/customer-io-pp-mcp@latest - Claude Code に登録します。
claude mcp add customer-io-pp-mcp -- customer-io-pp-mcp - 確認します:
claude mcp list
直接使用
- インストールされているか確認します:
which customer-io-pp-cli見つからない場合は、インストールを提案します(このスキルの冒頭にある前提条件を参照してください)。 - ユーザーのクエリに最適なコマンドを、上記の独自機能とコマンドリファレンスから選びます。
--agentフラグを付けて実行します。customer-io-pp-cli <command> [subcommand] [args] --agent- あいまいな場合は、サブコマンドのヘルプを確認します:
customer-io-pp-cli <command> --help。