Postproxy について
Postproxyは、Claude CodeからPostproxy APIを通じてソーシャルプロフィールや投稿を管理するMCPサーバーです。投稿、予約、下書き、状態確認、アカウント概要に対応します。
主な機能
- 01投稿の公開・予約・下書き
- 02投稿ステータスと統計の確認
- 03プロフィールグループとプロフィールの一覧
- 04アカウント活動の概要表示
- 05ガイドに沿ったプロフィール接続
活用シーン
- 01選択したプロフィールへの投稿予約
- 02公開ジョブの完了状況の確認
- 03複数グループの活動確認
MCP 対応
Claude CodeなどのMCPクライアントに、認証、プロフィール管理、投稿公開、状態確認のためのPostproxy APIツールを提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.postproxy.dev/mcpclaude mcp add --transport http dev-postproxy-postproxy https://mcp.postproxy.dev/mcp{"mcpServers":{"dev-postproxy-postproxy":{"type":"http","url":"https://mcp.postproxy.dev/mcp"}}}Cursor で開く{"servers":{"dev-postproxy-postproxy":{"type":"http","url":"https://mcp.postproxy.dev/mcp"}}}VS Code で開く{"mcpServers":{"dev-postproxy-postproxy":{"type":"http","url":"https://mcp.postproxy.dev/mcp"}}}{"mcpServers":{"dev-postproxy-postproxy":{"serverUrl":"https://mcp.postproxy.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.postproxy.dev/mcp認証が必要ツール
詳細
Postproxy MCP サーバー
Claude Code と Postproxy API を統合するための MCP(Model Context Protocol)サーバーです。このサーバーを使うと、Claude Code を通じて投稿の公開、ステータスの確認、ソーシャルメディアプロフィールの管理ができます。
インストール
グローバルインストール
npm install -g postproxy-mcp
ローカルインストール
npm install postproxy-mcp
Claude Code は MCP サーバーの設定を ~/.claude/plugins/ に保存します。
postproxy-mcp をインストールすると、再起動時に Claude がサーバーを自動的に検出します。
設定
MCP サーバーを登録する
postproxy-mcp をインストールした後、claude mcp add コマンドを使って Claude Code に登録します。
claude mcp add --transport stdio postproxy-mcp --env POSTPROXY_API_KEY=your-api-key --env POSTPROXY_BASE_URL=https://api.postproxy.dev/api -- postproxy-mcp
your-api-key を実際の Postproxy API キーに置き換えてください。
設定は自動的に ~/.claude/plugins/ に保存されます。このコマンドを実行した後は、次の手順を行ってください。
- Claude Code のセッションを再起動します
- Claude に「Postproxy の認証ステータスを確認して」と尋ね、接続をテストします
- ツールが利用可能であれば、Claude が自動的に使用できるようになります
代替方法:対話形式でのセットアップ
技術に詳しくないユーザーは、対話形式のセットアップコマンドを使用できます。
postproxy-mcp setup
または
postproxy-mcp-setup
セットアップの手順を順番に案内し、claude mcp add を使ってサーバーを自動的に登録します。
利用可能なツール
認証ツール
auth_status
認証ステータス、API 設定、ワークスペース情報を確認します。
パラメーター:なし
戻り値:
{
"authenticated": true,
"base_url": "https://api.postproxy.dev/api",
"profile_groups_count": 2
}
アカウントの概要
summary_get
「現在の状況は?」という質問に、1 回の呼び出しで回答します。history_list/comments_list/dm_chats_list を個別に呼び出す代わりに、指定した期間のアクティビティをスナップショットとして取得します。
パラメーター:
window(string、省略可):24h(デフォルト)、7d、または30dfrom(string、省略可):明示的な期間の開始を示す ISO 8601 タイムスタンプまたは日付のみの値。windowより優先され、*_previousの件数はnullになりますto(string、省略可):明示的な期間の終了。fromのみを指定した場合は現在時刻がデフォルトになりますprofile_group_id(string、省略可):単一のグループを対象にレポートします。API キーでアクセスできるすべてのグループを対象にする場合は省略します
戻り値:
{
"window": {
"label": "24h",
"from": "2026-08-17T09:00:00Z",
"to": "2026-08-18T09:00:00Z",
"previous_from": "2026-08-16T09:00:00Z",
"backlog_from": "2026-07-19T09:00:00Z"
},
"posts": {
"published": 4,
"published_previous": 3,
"failed": 1,
"scheduled_ahead": 6,
"next_scheduled_at": "2026-08-18T14:00:00Z",
"by_platform": { "instagram": { "published": 4, "failed": 0 } }
},
"engagement": {
"total": { "impressions": 48210, "likes": 1204 },
"by_platform": { "instagram": { "impressions": 31002, "likes": 900 } },
"posts_with_insights": 14
},
"comments": { "received": 96, "received_previous": 71, "awaiting_reply": 12, "by_platform": { "instagram": 61 } },
"reviews": { "received": 7, "received_previous": 4, "awaiting_reply": 3 },
"dms": { "inbound": 41, "outbound": 33, "chats_awaiting_reply": 5, "reply_window_closing": 2 },
"api": { "calls": 812, "calls_previous": 640 }
}
注記:
- 投稿数は投稿の数です。3 つのネットワークに送信された投稿も 1 件として数え、スレッドも 1 件として数えます。
by_platformはネットワークごとの配信数を数えるため、X の 3 件のスレッドはtwitterで 3 件となります。 engagementは期間内に公開された投稿の公開後累計値であり、期間中に獲得したエンゲージメントではありません。各投稿の最新の統計スナップショットを合計します。数分前に公開された投稿にはまだスナップショットがなく、posts_with_insightsに含まれないことがあります。キーは プラットフォーム別の統計フィールド に記載されている正規化済みの指標です。awaiting_replyの件数は期間ではなく現在の状態を示します。windowを変更しても変わりません。過去 30 日間を対象とし、window.backlog_fromとして返されます。コメントが返信済みと見なされるのは、あなたが返信した場合(Postproxy 経由またはプロフィール上での返信)に限られます。Postproxy には既読/未読の状態がないため、chats_awaiting_replyはメッセージのタイムスタンプから算出されます。reply_window_closingは、24 時間のメッセージ送信可能期間の残りが 6 時間未満のチャット数です。期間のないネットワーク(Telegram、Bluesky)は除外されます。- アカウントでインサイトがオフの場合、
engagementはnullになります。DM がオフの場合、dmsはnullになります。 - 他のツールと同様、対象範囲が限定されます。グループに限定された API キーでは、そのグループのみが報告されます。
プロフィール管理
profile_groups_list
API キーでアクセスできるすべてのプロフィールグループを一覧表示します。プロフィールグループは、関連するプロフィールをまとめるための組織用コンテナーです(ブランド別またはクライアント別など)。グループの id を使って、profiles_list を profile_group_id で絞り込めます。
パラメーター:なし
戻り値:
{
"profile_groups": [
{
"id": "grp123abc",
"name": "Main Brand",
"profiles_count": 4
}
]
}
profile_groups_initialize_connection
プロファイルグループ内の新しいプロファイル用に接続 URL を生成します。ユーザーは URL を開いて OAuth フローを完了します。
パラメーター:
profile_group_id(string、必須):プロファイルグループ IDplatform(string、必須):接続するプラットフォーム(例:instagram、linkedin、whatsapp)onboarding(string、任意):Instagram と WhatsApp のみ。Instagram:instagram(デフォルト)は Instagram Login を使用します。facebookは、管理している Facebook ページにリンクされた Instagram プロフェッショナルアカウント向けに Facebook Login を使用します。どちらの場合もプロファイルはplatform: "instagram"となり、別の方法で再接続すると既存のプロファイルがそのまま更新されます。WhatsApp:apiまたはbusiness_app(WhatsApp Business Management を参照)。identifier+app_password(Bluesky)/bot_token(Telegram):認証情報。ローカルサーバーのみ
profiles_list
投稿に利用できるソーシャルメディアプロファイルをすべて一覧表示します。
パラメーター:
profile_group_id(string、任意):指定すると、このグループ内のプロファイルのみが返されます(グループ ID の確認にはprofile_groups_listを使用します)
戻り値:
{
"profiles": [
{
"id": "profile-123",
"name": "My Twitter Account",
"platform": "twitter",
"profile_group_id": "group-abc"
}
]
}
profiles_placements
プロファイルで利用できるプレースメントを一覧表示します。Facebook プロファイルの場合、プレースメントはビジネスページです。LinkedIn プロファイルの場合、プレースメントには個人プロフィールと組織が含まれます。Pinterest プロファイルの場合、プレースメントはボードです。Telegram プロファイルの場合、プレースメントはボットが投稿できるチャンネルです。Google Business プロファイルの場合、プレースメントは完全なリソースパス(accounts/X/locations/Y)として返され、location_id に渡します。WhatsApp プロファイルの場合、プレースメントは Business Account 上の電話番号です。プレースメントの id は phone_number_id で、すべての whatsapp_* ツールと dm_chat_create に渡します。facebook、linkedin、pinterest、telegram、google_business、whatsapp のプロファイルで利用できます。
パラメーター:
profile_id(string、必須):プロファイルの hashid
戻り値(LinkedIn の例):
{
"placements": [
{
"id": null,
"name": "Personal Profile"
},
{
"id": "108520199",
"name": "Acme Marketing"
}
]
}
注意:
- 投稿の作成時にプレースメントを指定しない場合:
- LinkedIn:個人プロフィールがデフォルトになります
- Facebook:接続済みページのいずれかがランダムにデフォルトになります(接続済みページが 1 つだけの場合、プレースメント ID の設定は不要です)
- Pinterest:失敗します
- Telegram:失敗します — すべての投稿で
chat_idが必須です - Google Business:失敗します — すべての投稿およびすべての
google_business_*ツールでlocation_idが必須です
profiles_stats
プロファイルのフォロワー数/エンゲージメントの時系列データを取得します。スナップショットは約 23 時間ごとに記録されるため、フォロワーの増加やその他の傾向を時系列でグラフ化できます。stats フィールドはプラットフォーム固有の形式(正規化されていません)です。各ネットワークの形式と、追加されるプロファイルレベルのキー(followers_count、followersCount など)については、post_stats セクションの プラットフォーム別の統計フィールド を参照してください。
パラメーター:
profile_id(string、必須):プロファイルの hashidplacement_id(string、条件付き):facebook、linkedin、telegram、google_businessのプロファイルでは必須です。profiles_placementsから取得してください。instagram、threads、youtube、twitter、tiktok、pinterest、blueskyでは省略します。from(string、任意):ISO 8601 タイムスタンプ — この時刻以降に記録されたスナップショットのみを含めますto(string、任意):ISO 8601 タイムスタンプ — この時刻以前に記録されたスナップショットのみを含めます
戻り値(LinkedIn の例):
{
"data": {
"profile_id": "prof_li_001",
"platform": "linkedin",
"placement_id": "108520199",
"records": [
{ "stats": { "followerCount": 4500, "shareCount": 8, "likeCount": 80 }, "recorded_at": "2026-05-09T08:00:00Z" },
{ "stats": { "followerCount": 4520, "shareCount": 9, "likeCount": 90 }, "recorded_at": "2026-05-10T08:00:00Z" }
]
}
}
プレースメントを使用しないネットワーク(例:Bluesky)では、placement_id を省略します:
{
"data": {
"profile_id": "prof_bsky_001",
"platform": "bluesky",
"placement_id": null,
"records": [
{ "stats": { "followersCount": 8800, "postsCount": 40 }, "recorded_at": "2026-05-09T08:00:00Z" }
]
}
}
投稿管理
post_publish
指定したソーシャルメディアのプロフィールに投稿を公開します。
パラメーター:
-
content(string, 必須): 投稿内容のテキスト -
profiles(string[], 必須): プロフィール ID(hashid)またはプラットフォーム名(例:"linkedin"、"instagram"、"twitter")の配列です。プラットフォーム名を指定した場合、そのプラットフォームで最初に接続されたプロフィールに投稿します。 -
schedule(string, 任意): ISO 8601 形式の予約日時 -
media(string[], 任意): メディアの URL またはローカルファイルパスの配列 -
idempotency_key(string, 任意): 重複を防ぐための冪等性キー -
require_confirmation(boolean, 任意): true の場合、公開せずに概要を返します -
draft(boolean, 任意): true の場合、自動公開されない下書き投稿を作成します -
queue_id(string, 任意): 投稿を追加するキュー ID です。キューが自動的に時間枠を割り当てます。scheduleと併用しないでください。 -
queue_priority(string, 任意): キューに追加するときの優先度です:high、medium(デフォルト)、low -
platforms(object, 任意): プラットフォーム固有のパラメーターです。キーはプラットフォーム名(例: "instagram"、"youtube"、"tiktok")、値はプラットフォーム固有のオプションを含むオブジェクトです。詳細はプラットフォームパラメーターのリファレンスをご覧ください。例:
{ "instagram": { "format": "reel", "collaborators": ["username1", "username2"], "first_comment": "Link in bio!" }, "youtube": { "title": "My Video Title", "privacy_status": "public" }, "tiktok": { "privacy_status": "PUBLIC_TO_EVERYONE", "auto_add_music": true } }
戻り値:
{
"post_id": "job-123",
"accepted_at": "2024-01-01T12:00:00Z",
"status": "pending",
"draft": true
}
下書き投稿に関する注意: 下書き投稿(draft: true)をリクエストしたにもかかわらず、API が draft: false を返した場合、API が下書きパラメーターを無視した可能性を示す warning フィールドがレスポンスに含まれます。API が特定のパラメーター(メディア添付など)との組み合わせや、特定の条件下で下書きをサポートしていない場合に発生することがあります。詳細はレスポンスの warning フィールドを確認してください。
post_status
ジョブ ID を指定して、公開済み投稿のステータスを取得します。
パラメーター:
post_id(string, 必須): post.publish のレスポンスに含まれる投稿 ID
戻り値:
{
"post_id": "job-123",
"overall_status": "complete",
"draft": false,
"status": "processed",
"content": "Full post body as submitted...",
"scheduled_at": "2024-01-02T09:00:00Z",
"created_at": "2024-01-01T12:00:00Z",
"source": "postproxy",
"queue_id": null,
"platforms": [
{
"platform": "twitter",
"status": "published",
"url": "https://twitter.com/status/123",
"post_id": "123",
"error": null,
"attempted_at": "2024-01-01T12:00:00Z"
}
]
}
即時公開された投稿では、scheduled_at は null です。プラットフォームの url は公開済みのパーマリンクです(公開されるまでは null)。
ステータス値:
overall_status:"draft"、"pending"、"processing"、"complete"、"failed"- プラットフォームの
status:"pending"、"processing"、"published"、"failed"、"deleted" - プラットフォームの
error: 公開に失敗した場合のエラーメッセージ(成功した場合は null)
post_publish_draft
下書き投稿を公開します。このエンドポイントで公開できるのは、ステータスが draft: true の投稿のみです。
パラメーター:
post_id(string, 必須): 公開する下書き投稿の投稿 ID
戻り値:
{
"post_id": "job-123",
"status": "processed",
"draft": false,
"scheduled_at": null,
"created_at": "2024-01-01T12:00:00Z",
"message": "Draft post published successfully"
}
post_delete
ジョブ ID を指定して投稿を削除します。
パラメーター:
post_id(string, 必須): 削除する投稿 ID
戻り値:
{
"post_id": "job-123",
"deleted": true
}
post_stats
1 件以上の投稿の統計スナップショットを取得します。一致するすべてのスナップショットを返すため、時間の経過に伴う傾向を確認できます。プロフィール/ネットワークや期間による絞り込みに対応しています。
パラメーター:
post_ids(string[], required):投稿のハッシュ ID の配列(最大 50 件)profiles(string, optional):プロフィールのハッシュ ID またはネットワーク名のカンマ区切りリスト(例:instagram,twitter、abc123,def456、または両者の混在)from(string, optional):ISO 8601 タイムスタンプ — この時刻以降に記録されたスナップショットのみを含めますto(string, optional):ISO 8601 タイムスタンプ — この時刻以前に記録されたスナップショットのみを含めます
戻り値:
{
"data": {
"abc123": {
"platforms": [
{
"profile_id": "prof_abc",
"platform": "instagram",
"records": [
{
"stats": {
"impressions": 1200,
"likes": 85,
"comments": 12,
"saved": 8
},
"recorded_at": "2026-02-20T12:00:00Z"
}
]
}
]
}
}
}
プラットフォーム別の統計フィールド:
| プラットフォーム | フィールド |
|---|---|
impressions、likes、comments、saved、profile_visits、follows | |
impressions、clicks、likes | |
| Threads | impressions、likes、replies、reposts、quotes、shares |
impressions、likes、retweets、comments、quotes、saved | |
| YouTube | impressions、likes、comments、saved |
impressions | |
| TikTok | impressions、likes、comments、shares |
impressions、likes、comments、saved、outbound_clicks |
注記:Instagram ストーリーズは統計を返しません。TikTok の統計を取得するには、投稿に公開 ID が必要です。
キュー管理
queues_list
すべての投稿キューを一覧表示します。キューは、優先度に基づいて投稿を並べ替え、毎週繰り返される時間枠に自動的にスケジュールします。
パラメーター:
profile_group_id(string, optional):プロフィールグループでキューを絞り込みます
戻り値:
{
"queues": [
{
"id": "q1abc",
"name": "Morning Posts",
"description": "Daily morning content",
"timezone": "America/New_York",
"enabled": true,
"jitter": 10,
"profile_group_id": "pg123",
"timeslots": ["Monday at 09:00 (id: 1)", "Wednesday at 09:00 (id: 2)"],
"posts_count": 5
}
]
}
queues_get
単一の投稿キューについて、時間枠や投稿数などの詳細を取得します。
パラメーター:
queue_id(string, required):キュー ID
queues_create
毎週の時間枠を設定して、新しい投稿キューを作成します。
パラメーター:
profile_group_id(string, required):キューを関連付けるプロフィールグループ ID(profiles_listを使用して確認してください)name(string, required):キュー名description(string, optional):任意の説明timezone(string, optional):IANA タイムゾーン名(例:America/New_York)。デフォルト:UTCjitter(number, optional):自然な投稿パターンにするため、スケジュール時刻に適用するランダムなオフセット(分単位、0~60)。デフォルト:0timeslots(array, optional):初期設定の週間時間枠。各オブジェクトにはday(0=日曜日から6=土曜日)とtime(24 時間形式のHH:MM)を指定します
例:
{
"profile_group_id": "pg123",
"name": "Weekday Mornings",
"timezone": "America/New_York",
"jitter": 10,
"timeslots": [
{ "day": 1, "time": "09:00" },
{ "day": 2, "time": "09:00" },
{ "day": 3, "time": "09:00" },
{ "day": 4, "time": "09:00" },
{ "day": 5, "time": "09:00" }
]
}
queues_update
キューの設定や時間枠を更新するか、一時停止/再開します。タイムゾーンや時間枠を変更すると、キューに入っているすべての投稿が再配置されます。
パラメーター:
queue_id(string, required):更新するキュー IDname(string, optional):新しいキュー名description(string, optional):新しい説明timezone(string, optional):IANA タイムゾーン名enabled(boolean, optional):キューを一時停止するにはfalse、再開するにはtrueを設定しますjitter(number, optional):ランダムなオフセット(分単位、0~60)timeslots(array, optional):追加または削除する時間枠。追加する場合:{ "day": 1, "time": "09:00" }。削除する場合:{ "id": 42, "_destroy": true }。
queues_delete
投稿キューを削除します。キュー内の投稿はキューへの参照が削除されますが、投稿自体は削除されません。
パラメーター:
queue_id(string, required):削除するキュー ID
queues_next_slot
キューで次に利用可能な時間枠を取得します。
パラメーター:
queue_id(string, required):キュー ID
戻り値:
{
"next_slot": "2026-03-11T14:00:00Z"
}
キューへの投稿の追加
post_publish で投稿を公開する際、手動でスケジュールする代わりに、キューに追加できます。
queue_id(string, optional):投稿を追加するキュー ID。キューが時間枠を自動的に割り当てます。scheduleと同時に使用しないでください。queue_priority(string, optional):優先度:high、medium(デフォルト)、またはlow。優先度の高い投稿ほど早い時間枠に割り当てられます。
例:
{
"content": "Queued post content",
"profiles": ["twitter", "linkedin"],
"queue_id": "q1abc",
"queue_priority": "high"
}
コメント管理
comments_list
公開済みの投稿のコメントを一覧表示します。ネストされた返信を含む、ページ分割されたトップレベルのコメントを返します。
パラメーター:
post_id(string、必須):投稿 IDprofile_id(string、必須):取得するコメントのプラットフォームを特定するためのプロフィール IDpage(number、任意):ページ番号。0 始まりです(デフォルト:0)per_page(number、任意):1 ページあたりのトップレベルコメント数(デフォルト:20)from(string、任意):ISO 8601 の日付/時刻。この日時以降に受信したコメントのみto(string、任意):ISO 8601 の日付/時刻。この日時以前に受信したコメントのみ
from/to は、プラットフォームの posted_at(常に設定されているとは限りません)ではなく、Postproxy がコメントを受信した日時でフィルターします。2026-03-25 のように日付のみを指定した場合、その日の開始時刻を意味します。このフィルターはトップレベルのコメントにのみ適用されます。期間内のコメントには、replies 配列全体が引き続き含まれます。
戻り値:
{
"total": 42,
"page": 0,
"per_page": 20,
"data": [
{
"id": "cmt_abc123",
"external_id": "17858893269123456",
"body": "Great post!",
"status": "synced",
"author_username": "someuser",
"like_count": 3,
"is_hidden": false,
"posted_at": "2026-03-25T10:00:00.000Z",
"replies": [
{
"id": "cmt_def456",
"body": "Thanks!",
"author_username": "author",
"parent_external_id": "17858893269123456"
}
]
}
]
}
コメントオブジェクトには、attachments 配列が含まれる場合もあります(コメントに添付されたメディア。image、video、audio、gif、external、file)。各要素には id、type、url、status、external_id が含まれます。Facebook、Threads、Bluesky ではデータが設定されますが、Instagram、YouTube、LinkedIn のコメントはテキストのみです。メディアがない場合、配列は空です。
comments_get
単一のコメントとその返信を取得します。
パラメーター:
post_id(string、必須):投稿 IDcomment_id(string、必須):コメント ID(Postproxy ID またはプラットフォームの外部 ID)profile_id(string、必須):プロフィール ID
comments_create
公開済みの投稿にコメントまたは返信を作成します。コメントは非同期でプラットフォームに公開されます。
パラメーター:
post_id(string、必須):投稿 IDprofile_id(string、必須):プロフィール IDtext(string、必須):コメントのテキスト内容parent_id(string、任意):返信先のコメント ID(Postproxy ID または外部 ID)。投稿自体にコメントする場合は省略します。
戻り値:
{
"id": "cmt_ghi789",
"body": "Thanks for the feedback everyone!",
"status": "pending",
"external_id": null
}
コメントは status: "pending" の状態で作成されます。プラットフォームに公開されると "published" になります。公開に失敗すると "failed" になります。
comments_delete
プラットフォームからコメントを非同期で削除します。Instagram、Facebook、YouTube、LinkedIn でサポートされています。Threads ではサポートされていません。
パラメーター:
post_id(string、必須):投稿 IDcomment_id(string、必須):コメント ID(Postproxy ID または外部 ID)profile_id(string、必須):プロフィール ID
comments_edit
公開したコメントのテキストを非同期で編集します。Facebook と YouTube のみでサポートされています。{ accepted: true } を返します。結果は comment.edited/comment.edit_failed ウェブフックで通知されます。
パラメーター:
post_id(string、必須):投稿 IDcomment_id(string、必須):コメント ID(Postproxy ID または外部 ID)profile_id(string、必須):プロフィール IDbody(string、必須):新しいコメントのテキスト
comments_hide
プラットフォーム上のコメントを非同期で非表示にします。Instagram、Facebook、Threads でサポートされています。
パラメーター:
post_id(string、必須):投稿 IDcomment_id(string、必須):コメント IDprofile_id(string、必須):プロフィール ID
comments_unhide
以前に非表示にしたコメントを再表示します。Instagram、Facebook、Threads でサポートされています。
パラメーター:
post_id(string、必須):投稿 IDcomment_id(string、必須):コメント IDprofile_id(string、必須):プロフィール ID
comments_like
プラットフォーム上のコメントに非同期で「いいね」します。現在は Facebook のみでサポートされています。
パラメーター:
post_id(string、必須):投稿 IDcomment_id(string、必須):コメント IDprofile_id(string、必須):プロフィール ID
comments_unlike
コメントへの「いいね」を取り消します。現在は Facebook のみでサポートされています。
パラメーター:
post_id(string、必須):投稿 IDcomment_id(string、必須):コメント IDprofile_id(string、必須):プロフィール ID
プラットフォームの対応状況
| アクション | Threads | YouTube | |||
|---|---|---|---|---|---|
| 一覧表示 | Yes | Yes | Yes | Yes | Yes |
| 返信 | Yes | Yes | Yes | Yes | Yes |
| 削除 | Yes | Yes | No | Yes | Yes |
| 非表示/再表示 | Yes | Yes | Yes | No | No |
| いいね/取り消し | No | Yes | No | No | No |
ダイレクトメッセージ
DM に対応したプロフィールでの 1 対 1 メッセージ(チャットとメッセージ)に対応しています。Facebook(Messenger)、Instagram(DM)、Telegram(Bot DM)、Bluesky、WhatsApp で利用できます。送信したメッセージは非同期で処理されます(status: "pending" として返されます)。Meta の 24 時間メッセージングウィンドウは Facebook/Instagram に適用されます。参加者からの問い合わせに人間が返信する場合は、tag: "HUMAN_AGENT" を指定することで、ウィンドウの期限後(最長 7 日間)も送信できます。ただし、プロモーション目的または自動送信コンテンツには使用できません。Telegram と Bluesky にはウィンドウの制限はありません。WhatsApp でウィンドウを再度開くには、承認済みテンプレート(template)または category: "utility" のテキストを送信する必要があります。WhatsApp のその他の機能については、WhatsApp Business Management を参照してください。
dm_chats_list
プロフィールのチャットを、最新のアクティビティ順に一覧表示します。
パラメーター:
profile_id(string, required):プロフィール ID(Facebook、Instagram、Telegram、Bluesky、または WhatsApp)page(number, optional):ページ番号。0 始まり(デフォルト:0)per_page(number, optional):1 ページあたりの項目数(デフォルト:20)before/after(string, optional):last_message_atに対する ISO 8601 タイムスタンプフィルター
WhatsApp のチャットには、external_placement_id(チャットに紐づく電話番号)、group(グループチャットの場合は true)、within_messaging_window も含まれます。
dm_chat_create
参加者とのチャットを検索または作成します(冪等性があり、既存のチャットがあればそれを返します)。まだメッセージを送っていない参加者にメッセージを送る前に使用します。
パラメーター:
profile_id(string, required):プロフィール IDparticipant_external_id(string, required):プラットフォーム上の参加者 ID(Instagram スコープのユーザー ID、Facebook PSID、Telegram ユーザー ID、Bluesky DID、または国番号付きの WhatsApp 電話番号。数字以外の文字は除去されます)placement_id(string, optional):profiles_placementsのプレースメント ID。WhatsApp では必須(チャットに紐づく電話番号)、Facebook では任意(ページ ID)participant_username(string, optional)participant_name(string, optional)
新規の WhatsApp の会話ではメッセージングウィンドウが開いていないため、最初の送信には template を指定する必要があります(dm_message_send を参照)。
dm_chat_get
Postproxy ID またはプラットフォームの external_conversation_id でチャットを取得します。
パラメーター:
chat_id(string, required):チャット ID または外部会話 ID
dm_messages_list
チャット内のメッセージを、新しいものから順に一覧表示します。
パラメーター:
chat_id(string, required):チャット ID または外部会話 IDpage(number, optional):ページ番号。0 始まり(デフォルト:0)per_page(number, optional):1 ページあたりの項目数(デフォルト:20)direction(string, optional):inboundまたはoutboundstatus(string, optional):メッセージのステータスで絞り込み
dm_message_send
送信メッセージを送ります。body(テキスト)、media(単一の添付ファイル)、または WhatsApp の場合は template、interactive、location、contacts のいずれか1つだけを指定してください。
パラメーター:
chat_id(string、必須):チャット ID または外部の会話 IDbody(string、省略可):メッセージ本文(ほかに何も送信しない場合は必須。WhatsApp ではmediaと合わせてキャプションとして指定することもできます)media(string[]、省略可):URL またはローカルファイルパスで指定する添付ファイル(最大1件)。Bluesky ではサポートされません(リモート/Worker MCP が受け付けるのは URL のみです)。WhatsApp の上限:画像 5MB(jpeg/png)、動画 16MB(mp4/3gpp)、音声 16MB、ドキュメント 100MB。tag(string、省略可):24 時間のウィンドウ外に送信するにはHUMAN_AGENTを指定します。これにより、参加者の最後の受信メッセージから7日間に延長されます(Facebook/Instagram のみ)。Meta は、参加者自身の問い合わせに対して返信する人間による使用に限定しています。マーケティング、オファー、自動的な再エンゲージメントに使用すると、そのページ/Instagram アカウントのメッセージ機能が停止される場合があります。7日を過ぎると Meta は送信を拒否し、メッセージはstatus: failedとなり、プラットフォームのエラーがerror_detailsに記録されます。reply_to_external_id(string、省略可):Telegram と WhatsApp — 引用/スレッド返信の対象となるプラットフォームのメッセージ ID(Telegram のmessage_id、WhatsApp のwamid)reply_markup(object、省略可):Telegram のみ — インライン/返信キーボードのペイロードquick_replies(object[]、省略可):Facebook と Instagram のみ — 参加者のメッセージ作成欄の上に表示する、タップ可能なチップ(最大13件)。各項目は{ title, payload }です。buttons(object[]、省略可):Facebook と Instagram のみ — メッセージに添付するボタン(最大3個)。各項目は{ type: "web_url", title, url }または{ type: "postback", title, payload }です。card(object、省略可):Facebook と Instagram のみ —buttonsを含むカードの追加フィールド(subtitle、image_url、default_action)。buttonsが必要です。template(object、省略可):WhatsApp のみ — 承認済みテンプレートを送信します:{ id | name, language, variables[], button_params[], header_media, header_location }。24時間のウィンドウ外にメッセージを送る場合、または新しい会話を開始する場合に使える唯一の方法です。interactive(object、省略可):WhatsApp のみ — Meta 形式のインタラクティブメッセージ(返信ボタン、リスト、cta_url、商品、フロー、位置情報リクエスト)。変更せずに渡されます。location(object、省略可):WhatsApp のみ —{ latitude, longitude, name, address }contacts(object[]、省略可):WhatsApp のみ — Meta のcontacts形式の連絡先カードcategory(string、省略可):WhatsApp のみ —"utility"を指定すると、テンプレートを使わずにウィンドウ外へ送信できる可能性がある、通常のテキスト送信をユーティリティのダイレクト送信として扱います。link_preview(boolean、省略可):WhatsApp のみ —falseを指定すると、テキストメッセージ内の URL プレビューを表示しません。voice_note(boolean、省略可):WhatsApp のみ — OGG/Opus の音声添付ファイルをボイスノートとして配信します。filename(string、省略可):WhatsApp のみ — ドキュメント添付ファイルの表示名
クイック返信とボタン
Facebook Messenger と Instagram Direct のみ — Telegram では代わりに reply_markup を使用してください(これらを渡すと 422 が返されます)。クイック返信は、タップすると消える一時的なチップです。ボタンはスレッド内のメッセージに付いたままになります。
quick_replies | buttons | |
|---|---|---|
| 1回の送信あたりの最大数 | 13 | 3 |
title | 必須、20文字以下 | 必須、20文字以下 |
payload | 必須、1000文字以下 | postback では必須、1000文字以下 |
url | — | web_url では必須、https:// である必要があります |
body が必要 | いいえ | はい。body は80文字までです |
media と併用 | Facebook のみ | 不可 |
{
"chat_id": "chat_xyz789",
"body": "What can I help with?",
"quick_replies": [
{ "title": "Track order", "payload": "TRACK" },
{ "title": "Talk to support", "payload": "HELP" }
]
}
{
"chat_id": "chat_xyz789",
"body": "Nike Air Max",
"card": { "subtitle": "$129 · Arriving Friday", "image_url": "https://cdn.example.com/shoe.png" },
"buttons": [
{ "type": "web_url", "title": "Buy now", "url": "https://shop.example.com/p/air-max" },
{ "type": "postback", "title": "Notify me", "payload": "NOTIFY:air-max" }
]
}
ボタンは、要素のタイトルが body となる Meta の汎用テンプレートとして配信されます。80文字の上限はそのためです。Instagram は Messenger より制限が厳しく、クイック返信はプレーンテキストメッセージでのみ配信されるため、media または buttons と併用した quick_replies を送ると 422 が返されます。
タップの受信:タップされたチップやボタンの postback は、tapped_action を含む受信メッセージとして届きます。形式は { "kind": "quick_reply" | "postback" | "callback_query", "payload": "...", "title": "..." } です。platform_data を調べるのではなく、dm_messages_list / dm_message_get から読み取ってください。Instagram のアイスブレーカーのタップと Telegram のコールバッククエリも、同じフィールドに正規化されます。
WhatsApp のテンプレートとインタラクティブメッセージ
WhatsApp の番号が自由形式のテキスト、メディア、interactive、location、contacts を送信できるのは、参加者の24時間ウィンドウが開いている間(チャットの within_messaging_window)のみです。ウィンドウの外では、自分から開始した会話も含め、承認済みテンプレートを送信してください。variables はプレースホルダーに順番に値を入れます(最初にヘッダーのテキスト変数、次に本文の変数、最後に動的 URL ボタンの変数)。whatsapp_templates_list の variable_count と一致している必要があります。レンダリングされた本文はメッセージに保存されます。
{
"chat_id": "chat_wa1",
"template": {
"name": "order_update",
"language": "en_US",
"variables": ["Ana", "ORD-12345"]
}
}
メディアヘッダーを含むテンプレートでは header_media: { "link": "https://..." } を、位置情報ヘッダーでは header_location を使用します。URL/コピペ用コード/フローボタンでは button_params: [{ "index": 0, "sub_type": "url", "parameters": [{ "type": "text", "text": "12345" }] }] を使用します。
ウィンドウ内では、interactive は Meta 独自のオブジェクトです。返信ボタン(最大3個)、リスト(最大10行)、CTA URL、商品カード、フロー、または位置情報のリクエストを指定できます。
{
"chat_id": "chat_wa1",
"interactive": {
"type": "button",
"body": { "text": "Ready to confirm your booking?" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "confirm", "title": "Confirm" } },
{ "type": "reply", "reply": { "id": "reschedule", "title": "Reschedule" } }
]
}
}
}
タップすると、返信の id が platform_data.interactive に含まれ、タップされたタイトルが body に入った受信メッセージとして返されます。Facebook/Instagram の quick_replies / buttons を WhatsApp で使用すると 422 が返されます。また、template / interactive / location / contacts / category をそれ以外のネットワークで使用すると 422 が返されます。
dm_message_get
Postproxy ID またはプラットフォームの external_id を指定して、単一のメッセージを取得します。
パラメーター:
message_id(文字列、必須):メッセージ ID または外部 ID
dm_message_edit
送信済みの送信メッセージを編集します。Telegram のみ。 body および/または reply_markup を指定してください(キーボードを消去するには {} を渡します)。少なくとも一方が必要です。
パラメーター:
message_id(文字列、必須):メッセージ ID または外部 IDbody(文字列、任意):新しいテキスト/キャプションreply_markup(オブジェクト、任意):新しいキーボード(または削除する場合は{})
dm_message_react / dm_message_unreact
メッセージにビジネスアカウントのリアクションを追加または削除します。Facebook Messenger、Instagram Direct、WhatsApp に対応しています。
パラメーター(dm_message_react):
message_id(文字列、必須):メッセージ ID または外部 IDreaction(文字列、任意):名前付きリアクション(既定値はlove)。WhatsApp では無視されますemoji(文字列、任意):Unicode 絵文字。WhatsApp では必須です(任意の絵文字)
パラメーター(dm_message_unreact):
message_id(文字列、必須)
dm_chat_archive / dm_chat_unarchive
チャットをアーカイブ(ミュート)またはアーカイブ解除(ミュート解除)します。Bluesky のみ。 archived が設定されたチャットを返します。
パラメーター:
chat_id(文字列、必須):チャット ID または外部の会話 ID
dm_chat_mark_read
チャットを既読にします。WhatsApp では、最新の受信メッセージの開封確認(青いチェックマーク)を送信します。他のネットワークでは、metadata.read_at に時刻を記録するだけです。チャットを返します。
パラメーター:
chat_id(文字列、必須):チャット ID または外部の会話 ID
dm_comment_private_reply
コメントへの返信として、そのコメントの投稿者に DM を送信します(Meta の「Private Replies」)。24 時間の制限を回避でき(最大 7 日前のコメントが対象)、チャットは自動的に作成または再利用されます。コメントごとに送信できるプライベート返信は 1 回限りです。Instagram と Facebook のみ対応しています。
パラメーター:
post_id(文字列、必須):投稿 IDcomment_id(文字列、必須):コメント ID または外部 IDprofile_id(文字列、必須):プロフィール ID(Instagram または Facebook)text(文字列、必須):DM のテキストquick_replies(配列、任意):最大 13 個のチップ。形式はdm_message_sendと同じですbuttons(配列、任意):最大 3 個のボタン。形式はdm_message_sendと同じです。textは最大 80 文字ですcard(オブジェクト、任意):buttonsのカードスタイル(subtitle、image_url、default_action)
インタラクティブ要素には dm_message_send と同じルールが適用されます。Instagram では、quick_replies と buttons は併用できません。プライベート返信ではメディア添付を利用できません。
プラットフォームの対応状況
| アクション | Telegram | Bluesky | |||
|---|---|---|---|---|---|
| 一覧表示/送信/取得 | はい | はい | はい | はい | はい |
| メディア添付 | はい | はい | はい | いいえ | はい(キャプション可) |
| メッセージの編集 | いいえ | いいえ | はい | いいえ | いいえ |
| リアクション/リアクション解除 | はい | はい | いいえ | いいえ | はい(emoji) |
| アーカイブ/アーカイブ解除 | いいえ | いいえ | いいえ | はい | いいえ |
| 既読にする(開封確認を送信) | ローカルのみ | ローカルのみ | ローカルのみ | ローカルのみ | はい |
| コメントへのプライベート返信 | はい | はい | いいえ | いいえ | いいえ |
tag(24 時間の制限) | はい | はい | 該当なし | 該当なし | いいえ — template / category: utility を使用 |
reply_to_external_id | いいえ | いいえ | はい | いいえ | はい |
reply_markup | いいえ | いいえ | はい | いいえ | いいえ |
quick_replies / buttons / card | はい | はい(テキストのみ) | いいえ | いいえ | いいえ — interactive を使用 |
template / interactive / location / contacts | いいえ | いいえ | いいえ | いいえ | はい |
受信したタップでの tapped_action | はい | はい | はい | いいえ | いいえ(platform_data.interactive を参照) |
履歴
history_list
最近の投稿ジョブを一覧表示します。
パラメーター:
limit(数値、任意):返すジョブの最大数(デフォルト:10)
戻り値:
{
"jobs": [
{
"post_id": "job-123",
"content": "Full post body as submitted...",
"content_preview": "Post content preview...",
"created_at": "2024-01-01T12:00:00Z",
"overall_status": "complete",
"status": "processed",
"scheduled_at": "2024-01-02T09:00:00Z",
"draft": false,
"source": "postproxy",
"queue_id": null,
"platforms_count": 2,
"platforms": [
{
"platform": "twitter",
"status": "published",
"url": "https://x.com/user/status/123"
}
]
}
]
}
すぐに公開された投稿では、scheduled_at は null になります。status は API の生のステータス(draft、scheduled、processing、processed、…)であり、overall_status は各プラットフォームの結果を 1 つの判定にまとめたものです。
注:Postproxy の
/postsAPI は、プラットフォームごとのプロフィール情報(プロフィール ID または名前)を返さず、ネットワークのみを返します。ネットワークを接続済みプロフィールに対応付けるには、profiles_listを使用してください。
Google Business Profile の管理
ここでは、Google ビジネス リスティング自体の営業時間、属性、サービス、フードメニュー、アクションリンク、プロフィール写真を編集します。リスティングへのローカル投稿の公開(それにはプラットフォーム google_business を指定した post_publish を使用します)とは異なります。
このグループのすべてのツールには、次の3つのルールが適用されます。
location_idは常に必須です。profiles_placementsが返す、完全な Google リソースパスaccounts/X/locations/Yを指定します。- 更新ではフィールドマスクを使用します。 各書き込みでは、置き換える項目を正確に指定する
fields配列が必要です。fieldsに指定されていてペイロードに含まれていない項目はクリアされ、ネストされたオブジェクトはマージではなく全体が置き換えられます。パッチを適用する前に、必ず読み取ってください。 - 利用可能な項目はカテゴリや地域によって異なります。 属性、サービスリスト、フードメニュー、アクションリンクの種類はリスティングごとに異なります。最初に利用可能な項目を一覧表示してください。対象のロケーションが対象外の場合は
422が返されます。
ペイロードでは Google 独自の形式とキャメルケースのキーを送受信の両方で使用するため、レスポンスをそのままリクエスト本文として送信できます。
| ツール | 目的 |
|---|---|
google_business_location_get | リスティングを読み取ります — 名前、説明、ウェブサイト、電話番号、カテゴリ、住所、営業時間、サービス提供地域、メタデータ |
google_business_location_update | リスティングの項目(title、websiteUri、phoneNumbers、categories、storefrontAddress、serviceArea、labels、latlng、openInfo、profile、storeCode)を更新します |
google_business_categories_list | 地域のカテゴリリソース名(categories/gcid:*)を解決します — categories のパッチに必要です |
google_business_hours_update | regularHours、specialHours、moreHours を設定します |
google_business_attributes_get | 現在設定されている属性を読み取ります |
google_business_attributes_available | このリスティングで設定できる属性と、その値の型を一覧表示します |
google_business_attributes_update | 属性を設定します |
google_business_service_list_get | サービスリストを読み取ります |
google_business_service_list_update | サービスリストを置き換えます(metadata.canModifyServiceList が必要です) |
google_business_food_menus_get | フードメニューを読み取ります(レストランに類するカテゴリのみ) |
google_business_food_menus_update | フードメニューを置き換えます(metadata.canHaveFoodMenus が必要です) |
google_business_place_action_links_list | アクションボタン(「オンラインで予約」、「オンラインで注文」)を一覧表示します |
google_business_place_action_types_available | Google がそのロケーションで受け付けるアクションの種類を一覧表示します |
google_business_place_action_link_create | アクションボタンを追加します |
google_business_place_action_link_update | アクションボタンを更新します |
google_business_place_action_link_delete | アクションボタンを削除します |
google_business_media_list | プロフィール写真と動画を一覧表示します |
google_business_media_create | 写真または動画を追加します |
google_business_media_delete | 写真または動画を削除します |
一般的な流れ
1. profiles_placements → get location_id
2. google_business_location_get → read current state
3. google_business_attributes_available → see what this listing accepts
4. google_business_attributes_update → patch only what changed
属性値の形式
google_business_attributes_available は属性ごとに valueType を返します。この値によって、送信する形式が決まります。
| valueType | 形式 |
|---|---|
BOOL | { "name": "attributes/offers_online_appointments", "values": [true] } |
URL | { "name": "attributes/url_linkedin", "uriValues": [{ "uri": "https://..." }] } |
ENUM | { "name": "attributes/preferred_messaging_service", "repeatedEnumValue": { "setValues": ["TOKEN"] } } |
attribute_mask のデフォルト値は送信した名前だけなので、部分更新で指定しなかった属性がクリアされることはありません。
営業時間
時刻には "09:00"/"09:00:00" 形式の文字列、または Google の { "hours": 9, "minutes": 0 } 形式のオブジェクトを指定できます。どちらも呼び出しの前に正規化されます。現在の営業時間は google_business_location_get で読み取ってください。fields に指定した各ブロックは全体が置き換えられます。
{
"fields": ["regularHours"],
"regularHours": {
"periods": [
{ "openDay": "MONDAY", "openTime": "09:00", "closeDay": "MONDAY", "closeTime": "18:00" }
]
}
}
メディア
Google は media_url からファイルを直接ダウンロードします。アップロードの手順はないため、URL は一般公開されている https で到達可能である必要があります(有効期間の短い署名付き URL や localhost は使用できません)。画像は 250×250 以上、5MB 以下である必要があります。category のデフォルトは ADDITIONAL です。プロフィールのヘッダーやロゴを変更する場合にのみ、COVER または LOGO を使用してください。
空の結果の読み取り
Google は空の値を返す代わりにキーを省略します。属性がないリスティングの場合、attributes キー自体がなく、{ "name": "..." } が返されます。同様に、serviceItems、placeActionLinks、isPreferred のようなブール値フラグも省略されます。キーがない場合は空として扱ってください。
分析
Google Business のロケーション分析は、標準の profiles_stats ツールから取得できます。location_id を placement_id として渡してください。指標は、検索とマップでのインプレッション(デスクトップとモバイル)、ウェブサイトのクリック数、通話のクリック数、ルート検索数、会話数、予約数、食事の注文数、フードメニューのクリック数です。Google Business にはフォロワー数がなく、ローカル投稿ごとの分析データも Google から提供されません。
WhatsApp Business 管理
受信トレイの管理にとどまらず、接続済みの WhatsApp Business アカウントを管理します。メッセージテンプレート、電話番号のステータスと登録、公開ビジネスプロフィール、表示名とユーザー名、ブロックしたユーザー、グループ、Click-to-WhatsApp のコンバージョンレポートを扱います。会話自体は、上記の dm_* ツールを通じて行います。
このグループのすべてのツールには、次の4つのルールが適用されます。
- WhatsApp Business アカウント(WABA)がプロフィールで、そこに登録された各電話番号がプレースメントです。 電話番号を対象とするツールには
phone_number_idを指定します。これはprofiles_placementsのプレースメントidです(メタデータにはdisplay_phone_number、quality_rating、messaging_limit_tier、name_status、platform_typeが含まれます)。 - テンプレートと Conversions データセットは WABA レベルです。 これらのツールには
profile_idのみを指定します。 - 自由形式のメッセージを送信できるのは24時間以内です。 参加者から最後に届いたメッセージが24時間より前のもの(または新しい会話)の場合、
dm_message_sendで受け付けられるのは APPROVED のtemplate(またはcategory: "utility"のテキスト)のみです。テンプレートが配信されると、ウィンドウが再び開きます。 - 共存番号には制限があります。
onboarding: "business_app"(電話の WhatsApp Business アプリにも引き続き接続されている)で接続された番号は、スループットが低く、Groups API を使用できません。このような番号の場合、whatsapp_number_infoはCLOUD_API以外のplatform_typeを返します。
Meta のデータ形式が返される場合、レスポンスには Meta 独自のフィールド名(components、interactive、ビジネスプロフィールのフィールド)が使用されます。
| ツール | 用途 |
|---|---|
whatsapp_templates_list | 同期済みテンプレートの一覧表示(name、language、status で絞り込み。refresh: true を指定すると、最初に Meta から再同期します) |
whatsapp_template_get | コンポーネント、ステータス、variable_count を含む1つのテンプレート |
whatsapp_template_create | カスタムテンプレート(components)を送信するか、ライブラリテンプレート(library_template_name)をインスタンス化します |
whatsapp_template_update | components(更新後は PENDING 審査に戻ります)、および/または message_send_ttl_seconds を変更します |
whatsapp_template_delete | 1つの言語(language)または名前全体を削除します |
whatsapp_template_library_get | インスタンス化する前に Meta のライブラリテンプレートを確認します |
whatsapp_number_info | 電話番号と WABA の最新ステータス:品質評価、メッセージング上限、名前のステータス、プラットフォームタイプ |
whatsapp_number_register | 6桁の PIN を使って Cloud API に電話番号を登録します |
whatsapp_number_request_verification_code | 未認証の電話番号に SMS/音声認証コードを送信します |
whatsapp_number_verify | 認証コードを送信します |
whatsapp_business_profile_get | 公開プロフィール:概要、住所、説明、メールアドレス、ウェブサイト、業種、写真 |
whatsapp_business_profile_update | これらのフィールドを更新します(about は139文字以下、description は512文字以下、ウェブサイトは2件以下) |
whatsapp_business_profile_photo_update | プロフィール写真を置き換えます(url または base64 の data。JPEG/PNG、5MB 以下) |
whatsapp_display_name_get | 認証済みの表示名と審査ステータス |
whatsapp_display_name_request_change | Meta の審査に新しい表示名を申請します |
whatsapp_username_get / _set / _delete / _suggestions | 電話番号の wa.me ユーザー名を管理します |
whatsapp_blocked_users_list / whatsapp_blocked_user_status | ブロックされているユーザー |
whatsapp_users_block / whatsapp_users_unblock | 1回の呼び出しで最大1000件の電話番号をブロック/ブロック解除します |
whatsapp_groups_list / _create / _get / _update / _delete | 電話番号が管理するグループ(Cloud API 番号のみ) |
whatsapp_group_participants_add / _remove | メンバーを管理します(グループの定員は8人です) |
whatsapp_group_invite_link_create | 新しい招待リンクを作成します(以前のリンクは無効になります) |
whatsapp_group_join_requests_list / _approve / _reject | 承認が必要なグループへの参加リクエストを処理します |
whatsapp_dataset_get / whatsapp_dataset_create | WABA 上の Conversions API データセット |
whatsapp_conversion_event_send | Click-to-WhatsApp の会話について、LeadSubmitted/Purchase/AddToCart/InitiateCheckout/ViewContent を報告します |
一般的なフロー
1. profile_groups_initialize_connection → platform: whatsapp (onboarding: api | business_app)
2. profiles_placements → get phone_number_id
3. whatsapp_templates_list → find an APPROVED template and its variable_count
4. dm_chat_create → participant_external_id: phone, placement_id: phone_number_id
5. dm_message_send → template: { name, language, variables }
6. dm_messages_list → the reply opens a 24h window; free-form sends now work
電話番号の接続
profile_groups_initialize_connection に platform: "whatsapp" を指定すると、接続 URL が返されます。電話番号がスマートフォンの WhatsApp Business アプリにある場合は onboarding: "business_app" を指定します(ユーザーが QR コードをスキャンすると、アプリは Postproxy と並行して引き続き動作し、最大 6 か月分のチャットがインポートされます)。電話番号が別のプロバイダーのものである場合や、新しい番号の場合は onboarding: "api" を指定します(Cloud API に移行され、アプリでは使えなくなります)。省略すると、接続ページで選択を求められます。WhatsApp Business アカウントごとに 1 つのプロフィールが作成され、その電話番号ごとに 1 つのプレースメントが作成されます。
テンプレート
Meta ではすべてのカスタムテンプレートが審査されます。新しいテンプレートは承認されるまで PENDING となり、送信できるのは APPROVED のテンプレートのみです。プレースホルダーには {{1}}、{{2}}…(parameter_format: POSITIONAL、デフォルト)または {{name}}(NAMED)を使用します。テンプレートの variable_count は、送信時に含める必要がある variables の数です。ヘッダーテキストのプレースホルダー、本文のプレースホルダー、動的 URL ボタンごとに 1 つの順です。ライブラリテンプレート(whatsapp_template_library_get → whatsapp_template_create に library_template_name を指定)は審査を省略できます。名前は言語ごとに一意です。language を指定せずに名前で削除すると、すべての言語のテンプレートが削除されます。
コンバージョン
Click-to-WhatsApp 広告から始まった会話では、チャットの metadata に ctwa_clid が含まれます。データセットを一度作成し(whatsapp_dataset_create)、chat_id または phone を指定して whatsapp_conversion_event_send で成果を報告します。ctwa_clid が記録されていないチャットの場合は 422 が返されます。
プロンプトの例
Claude Code で使用できるプロンプトの例を以下に示します。
認証の確認
Check my PostProxy authentication status
プロフィールの一覧表示
Show me all my available social media profiles
投稿の公開
プロフィール ID を使用する場合:
Publish this post: "Check out our new product!" to profiles ["profile-123"]
プラットフォーム名を使用する場合:
Publish "Exciting news!" to linkedin and twitter
Instagram リールの音声
| ツール | 説明 |
|---|---|
instagram_available_audio | Meta の音楽/オリジナルサウンドのライブラリを検索します(search_query がない場合はトレンドの音源を検索します)。リールには audio_id を指定します |
Facebook Login で接続した Instagram プロフィールでのみ使用できます(profile_groups_initialize_connection に onboarding: "facebook" を指定)。Instagram Login プロフィールでは 422 が返されます。
プラットフォーム固有のパラメーターを使った公開
プラットフォーム固有のパラメーターを使って、各プラットフォームの投稿をカスタマイズできます。platforms パラメーターには、キーにプラットフォーム名、値にプラットフォーム固有のオプションを指定するオブジェクトを渡します。
Instagram の例
コラボレーターを含む通常の投稿:
Publish to Instagram: "Amazing content!" to my Instagram account with collaborators username1 and username2
または、パラメーターを明示的に指定する場合:
{
"content": "Amazing content!",
"profiles": ["instagram"],
"media": ["https://example.com/image.jpg"],
"platforms": {
"instagram": {
"format": "post",
"collaborators": ["username1", "username2"],
"first_comment": "What do you think? 🔥"
}
}
}
Instagram リール:
{
"content": "Check out this reel! #viral",
"profiles": ["instagram"],
"media": ["https://example.com/video.mp4"],
"platforms": {
"instagram": {
"format": "reel",
"collaborators": ["collaborator_username"],
"cover_url": "https://example.com/thumbnail.jpg",
"audio_name": "Trending Audio",
"first_comment": "Link in bio!"
}
}
}
ライブラリの音楽を使った Instagram リール(Facebook Login プロフィールの場合。instagram_available_audio から audio_id を取得します):
{
"content": "Summer vibes ☀️",
"profiles": ["instagram"],
"media": ["https://example.com/video.mp4"],
"platforms": {
"instagram": {
"format": "reel",
"audio_id": "1234567890123456",
"audio_volume": 80,
"strip_audio": true
}
}
}
audio_volume/video_volume には 1~100 を指定します(デフォルトは 100)。strip_audio を指定すると、動画自体の音声が削除されます(リールと動画ストーリー)。どの Instagram プロフィールでも使用できます。
Instagram ストーリー:
{
"profiles": ["instagram"],
"media": ["https://example.com/story-image.jpg"],
"platforms": {
"instagram": {
"format": "story"
}
}
}
YouTube の例
タイトルと公開範囲を指定した YouTube 動画:
Upload this video to YouTube with title "My Tutorial" and make it public
または、パラメーターを明示的に指定する場合:
{
"content": "This is the video description with links and details",
"profiles": ["youtube"],
"media": ["https://example.com/video.mp4"],
"platforms": {
"youtube": {
"title": "My Tutorial: How to Build an API",
"privacy_status": "public",
"cover_url": "https://example.com/custom-thumbnail.jpg"
}
}
}
限定公開の YouTube 動画:
{
"content": "Video description",
"profiles": ["youtube"],
"media": ["https://example.com/video.mp4"],
"platforms": {
"youtube": {
"title": "Private Tutorial",
"privacy_status": "unlisted"
}
}
}
TikTok の例
音楽を自動設定した公開 TikTok:
{
"content": "Check this out! #fyp",
"profiles": ["tiktok"],
"media": ["https://example.com/video.mp4"],
"platforms": {
"tiktok": {
"privacy_status": "PUBLIC_TO_EVERYONE",
"auto_add_music": true,
"disable_comment": false,
"disable_duet": false,
"disable_stitch": false
}
}
}
AI ラベルを付けたフォロワー限定の TikTok:
{
"content": "Special content for followers",
"profiles": ["tiktok"],
"media": ["https://example.com/video.mp4"],
"platforms": {
"tiktok": {
"privacy_status": "FOLLOWER_OF_CREATOR",
"made_with_ai": true,
"brand_content_toggle": false
}
}
}
Facebook の例
最初のコメントを含む Facebook 投稿:
{
"content": "Check out our new product!",
"profiles": ["facebook"],
"media": ["https://example.com/product.jpg"],
"platforms": {
"facebook": {
"format": "post",
"first_comment": "Link to purchase: https://example.com/shop"
}
}
}
Facebook ストーリー:
{
"profiles": ["facebook"],
"media": ["https://example.com/story-video.mp4"],
"platforms": {
"facebook": {
"format": "story"
}
}
}
Facebook ページへの投稿:
{
"content": "Company announcement",
"profiles": ["facebook"],
"platforms": {
"facebook": {
"page_id": "123456789",
"first_comment": "Visit our website for more details"
}
}
}
LinkedIn の例
個人アカウントの LinkedIn 投稿:
{
"content": "Excited to share my latest article on AI",
"profiles": ["linkedin"],
"media": ["https://example.com/article-cover.jpg"]
}
企業アカウントの LinkedIn 投稿:
{
"content": "We're hiring! Join our team",
"profiles": ["linkedin"],
"media": ["https://example.com/careers.jpg"],
"platforms": {
"linkedin": {
"organization_id": "company-id-12345"
}
}
}
Bluesky の例
通常の Bluesky 投稿(メンション/タグ/リンクを自動でファセット化):
{
"content": "Hey @jay.bsky.team — check out our latest #ruby post: https://example.com/blog/post",
"profiles": ["bluesky"]
}
マークアップは不要です。Postproxy が @handles、#tags、URL を AT Protocol のファセットに自動変換し、メディアが添付されていない場合は URL の Open Graph メタデータからリンクカードのプレビューを生成します。300 書記素まで入力できます。
Telegram の例
Telegram チャンネルへの投稿(HTML 書式):
{
"content": "<b>New release</b> — read more on our blog https://example.com/post",
"profiles": ["telegram"],
"platforms": {
"telegram": {
"chat_id": "-1001234567890",
"parse_mode": "HTML",
"disable_link_preview": true,
"disable_notification": false
}
}
}
Telegram プロフィールに対して profiles_placements を使うと、ボットが投稿できるチャンネルの chat_id を一覧表示できます。ボットをチャンネルに追加し、投稿権限を持つ管理者にする必要があります。
クロスプラットフォームの例
同じコンテンツを異なるプラットフォームに投稿:
{
"content": "New product launch! 🚀",
"profiles": ["instagram", "twitter", "linkedin"],
"media": ["https://example.com/product.jpg"]
}
プラットフォーム固有のパラメーターを指定して動画を投稿:
{
"content": "Product launch video",
"profiles": ["instagram", "youtube", "tiktok"],
"media": ["https://example.com/video.mp4"],
"platforms": {
"instagram": {
"format": "reel",
"first_comment": "Link in bio!"
},
"youtube": {
"title": "Product Launch 2024",
"privacy_status": "public",
"cover_url": "https://example.com/yt-thumbnail.jpg"
},
"tiktok": {
"privacy_status": "PUBLIC_TO_EVERYONE",
"auto_add_music": true
}
}
}
プラットフォームパラメーターのリファレンス
Instagram:
format: "post" | "reel" | "story"collaborators: ユーザー名の配列(投稿では最大10件、リールでは最大3件)first_comment: 文字列 - 投稿後に追加するコメントcover_url: 文字列 - リールのサムネイル URLaudio_name: 文字列 - リールのオーディオトラック名trial_strategy: "MANUAL" | "SS_PERFORMANCE" - リールのトライアル戦略thumb_offset: 文字列 - リールのサムネイルのオフセット(ミリ秒)user_tags:{ username, x, y, media_index }の配列 - 任意の形式(投稿、リール、ストーリー)で公開 Instagram アカウントをタグ付けします。画像ではxとy(左上を原点とする0.0~1.0の浮動小数点数)が必須です。リールと動画スライドはユーザー名のみでタグ付けされます(座標は破棄されます)。ストーリーでは座標を指定できますが、必須ではありません。media_indexはカルーセル内のスライドを選択します(0 始まり、デフォルトは0)。先頭の@は削除されます。範囲外の座標、最後のメディア項目を超えるmedia_index、またはx/yがない画像タグは、該当するエントリを示す 422 エラーで拒否されます。非公開アカウントとタグ付けをオフにしているアカウントは、Instagram によって通知なくスキップされます。
YouTube:
title: 文字列 - 動画タイトルprivacy_status: "public" | "unlisted" | "private"cover_url: 文字列 - カスタムサムネイル URL
TikTok:
privacy_status: "PUBLIC_TO_EVERYONE" | "MUTUAL_FOLLOW_FRIENDS" | "FOLLOWER_OF_CREATOR" | "SELF_ONLY"photo_cover_index: 整数 - カバーに使用する写真のインデックス(0 始まり)auto_add_music: ブール値 - 音楽の自動追加を有効にするmade_with_ai: ブール値 - コンテンツが AI 生成であることを示すdisable_comment: ブール値 - コメントを無効にするdisable_duet: ブール値 - デュエットを無効にするdisable_stitch: ブール値 - スティッチを無効にするbrand_content_toggle: ブール値 - 有料パートナーシップ(第三者)としてマークするbrand_organic_toggle: ブール値 - 有料パートナーシップ(自社ブランド)としてマークする
Facebook:
format: "post" | "story"first_comment: 文字列 - 投稿後に追加するコメントpage_id: 文字列 - 企業ページへの投稿に使用するページ ID
LinkedIn:
organization_id: 文字列 - 企業ページへの投稿に使用する組織 ID
Telegram:
chat_id: 文字列、必須 — 投稿先のチャンネル/チャット ID(一覧表示にはprofiles_placementsを使用)parse_mode: "HTML" | "MarkdownV2" — プレーンテキストの場合は省略しますdisable_link_preview: ブール値 — URL プレビューカードを無効にするdisable_notification: ブール値 — 通知音なしで送信する- 文字数制限:テキストのみの場合は 4,096 文字、メディア添付時のキャプションは 1,024 文字(上限を超えた本文は切り捨てられます)
- メディア:画像 ≤10 MB(×10)、動画 ≤50 MB(×10)、ドキュメント ≤50 MB(×1)
- ボットは投稿先チャンネルのメンバーである必要があります(投稿権限を持つ管理者であることが望ましいです)
Bluesky:
- プラットフォーム固有のパラメーターはありません
- 文字数制限:300 書記素(絵文字や結合文字列も 1 文字としてカウント)
@handle.bsky.social形式のメンション、#hashtags、URL を自動検出し、クリック可能なファセットに変換します- URL があり、メディアが添付されていない場合、Open Graph メタデータからリンクカードのプレビューを生成します
- メディア:画像 ≤1 MB(×4)、動画 ≤100 MB(×1、1~60 秒)
- 標準の
thread配列でスレッドをサポートします
Twitter/X と Threads:
- プラットフォーム固有のパラメーターはありません
詳細については、プラットフォームパラメーターのリファレンスをご覧ください。
下書き投稿を作成する
Create a draft post: "Review this before publishing" to linkedin
下書き投稿を公開する
Publish draft post job-123
投稿ステータスを確認する
What's the status of job job-123?
下書きのステータス、プラットフォーム固有のエラー、公開結果など、詳細なステータスが表示されます。
投稿を削除する
Delete post job-123
投稿統計を取得する
Show me the stats for post abc123
Get stats for posts abc123 and def456 filtered to Instagram only, from February 1st to today
投稿先を一覧表示する
Show me the placements for my LinkedIn profile prof123
キュー管理
Show me all my posting queues
Create a queue called "Weekday Mornings" for profile group pg123, timezone America/New_York, with timeslots Monday through Friday at 9am
Add a post to queue q1abc with high priority: "Check out our latest feature!"
Pause queue q1abc
What's the next available slot for queue q1abc?
コメント管理
Show me the comments on post abc123 for my Instagram profile prof456
Reply to comment cmt_abc123 on post abc123 with "Thanks for the feedback!" using profile prof456
Hide comment cmt_abc123 on post abc123 for profile prof456
ダイレクトメッセージ
List the DM chats for my Instagram profile prof456
Reply "Yes, we ship worldwide!" in chat chat_xyz789
Send a DM to the author of comment cmt_abc123 on post abc123 from profile prof456 saying "DM-ing you the details"
Open a WhatsApp chat with +1 310 555 0007 on number 1055512345 of profile prof_wa and send the order_update template in en_US with Ana and ORD-12345
Mark chat chat_wa1 as read and react to the last inbound message with 🔥
WhatsApp Business の管理
List the approved WhatsApp templates on profile prof_wa
Create a UTILITY template called appointment_reminder in en_US on profile prof_wa: "Hi {{1}}, your appointment is on {{2}} at {{3}}."
Show the quality rating and messaging tier for number 1055512345 on profile prof_wa
Update the WhatsApp business profile of number 1055512345 on prof_wa: about "Open Mon–Sat 9–18", website https://acme.example
Block +1 310 555 0099 on number 1055512345 of profile prof_wa
Report a Purchase of 49.90 USD for chat chat_wa1 on profile prof_wa with event id ord-9921
履歴の表示
Show me the last 5 posts I published
トラブルシューティング
サーバーが起動しない
- API キーを確認する:
claude mcp addで登録する際に、POSTPROXY_API_KEYが設定されていることを確認してください - Node のバージョンを確認する:Node.js >= 18.0.0 が必要です
- インストールを確認する:
postproxy-mcpがインストールされ、PATH に含まれていることを確認してください - 登録を確認する:サーバーが
claude mcp addで登録され、設定が~/.claude/plugins/に保存されていることを確認してください
認証エラー
- AUTH_MISSING:API キーが設定されていません。
claude mcp addの実行時に--env POSTPROXY_API_KEY=...を含めたことを確認してください - AUTH_INVALID:API キーが無効です。API キーが正しいことを確認してください。
検証エラー
- TARGET_NOT_FOUND:1 つ以上のプロフィール ID が存在しません。
profiles_listを使用して、利用可能なプロフィールを確認してください。 - VALIDATION_ERROR:投稿内容またはパラメーターが無効です。API は詳細なエラーメッセージを返すようになりました。
- 400 エラー:
{"status":400,"error":"Bad Request","message":"..."} - 422 エラー:
{"errors": ["Error 1", "Error 2"]}- 検証エラーメッセージの配列 - 具体的な検証上の問題については、エラーメッセージを確認してください
- 400 エラー:
API エラー
- API_ERROR:Postproxy API がエラーを返しました。詳細はエラーメッセージを確認してください。
- タイムアウト:リクエストに 30 秒以上かかりました。ネットワーク接続と API の状態を確認してください。
プラットフォームのエラー
post_status で投稿のステータスを確認すると、各プラットフォームオブジェクトの error フィールドで、プラットフォーム固有のエラーを確認できるようになりました。
error: null- 投稿は正常に公開されましたerror: "Error message"- プラットフォーム API からの詳細なエラーメッセージ- よくあるエラーには、認証の問題、レート制限、コンテンツ違反などがあります。
下書き投稿の問題
下書き投稿(draft: true)を作成しても、レスポンスで draft: false が返される場合:
- レスポンスには、API が下書きパラメーターを無視した可能性を説明する
warningフィールドが含まれます - 次のような場合に発生することがあります:
- API がメディア添付付きの下書きをサポートしていない
- API に、特定の条件下での下書き投稿に関する制限がある
- 詳細については、レスポンスの
warningフィールドを確認してください - デバッグモード(
POSTPROXY_MCP_DEBUG=1)を有効にすると、下書きパラメーターの処理に関する詳細なログを確認できます
デバッグモード
サーバーの登録時に POSTPROXY_MCP_DEBUG=1 を設定すると、デバッグログを有効にできます。
claude mcp add --transport stdio postproxy-mcp --env POSTPROXY_API_KEY=your-api-key --env POSTPROXY_BASE_URL=https://api.postproxy.dev/api --env POSTPROXY_MCP_DEBUG=1 -- postproxy-mcp
開発
ソースからビルドする
git clone https://github.com/postproxy/postproxy-mcp
cd postproxy-mcp
npm install
npm run build
開発モードで実行する
npm run dev
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。