製品開発者
製品に公開機能を追加する。
架空の日記アプリに、ユーザーが確認して投稿を予約し、結果を表示する操作を追加します。
自社製品+SOSOAPI
説明用の連携フロー- 自社製品準備して確認
- SosoAPI確認した投稿を一件予約
- ソーシャルアカウント結果を追跡
三つのステップ
コンテンツを準備
製品内で文案と画像を集める。
ユーザーに確認してもらう
予約前にアカウント、内容、日時を表示する。
結果を取り込む
進行と最終公開結果を表示する。
ソーシャル投稿を、自社製品の機能に。
詳しい手順を見る
シナリオ
架空の日記アプリに、内容を確認して実行する「このお知らせを予約」操作を追加します。ユーザーのワークスペースと正確な接続アカウントを表示し、プロバイダーが公開したと誤解させずに返された状態を示してください。

始める前に
- SosoAPIを作成・認証し、目的のワークスペースを選ぶ。
- App Settings → Agents & API Accessでキーを作り、サーバーのSOSOAPI_API_KEYに保存します。JavaScript例はNode.js 20+を使い、SosoAPIソースリポジトリは不要です。
- 現在の認可範囲から、実際のワークスペースUUIDとThreadsソーシャルアカウントUUIDのみを選びます。アカウントはThreadsテキスト投稿に適格である必要があります。
- APIキー所有者には選択ワークスペースのeditorかownerアクセスが必要です。キーはサーバー側に保持し、ブラウザーコード、リクエストJSON、ログに含めないでください。
入力例
- 架空の製品
- Harborlight Journal · 非公開の日記アプリの構想。実際の連携を示すものではありません。
- ユーザーの意図
- 選択Threadsアカウントに確認済み製品メモ一件を、未来の現地時刻で予約する。
- 文案例
- 「あとで読み返す小さなメモ。Harborlight Journalは、短い日々の振り返りのための余白を作っています。思いを一つ残して、あとは明日に。」
- 実行時に必要なスコープ
- 現在のユーザー認可範囲から<workspace-uuid>と<threads-social-account-uuid>を取得し、推測しないでください。
- 予約
- <future ISO-8601 instant with offset>。display_timezoneはAsia/Hong_Kongに設定します。
- 再試行の識別情報
- <unique stable idempotency key for this one user intent>。同じ要求の安全な再試行時のみ再利用します。
手順ガイド
API呼び出しの前に製品の確認画面を設計する
SosoAPIでこの画面を開くSosoAPIアプリで目的のワークスペースを選び、接続アカウントを確認します。製品モックアップでも、そのユーザーが選んだワークスペースとアカウントを表示し、黙って別の対象を選ばないでください。
確認手順で正確なキャプション、アカウント、現地時刻、タイムゾーンを表示します。本人がScheduleを選ぶ必要があり、フォームを開くだけで送信してはいけません。
得られるもの
書き込み前に人が投稿先と日時を確認できます。架空の製品モックアップは設計例であり、導入済みの顧客連携ではありません。
サーバーから現在のScheduled Postsを取得
<workspace-uuid>を選択ワークスペースIDに置き換え、サーバーで次の読み取り専用要求を実行します:
const apiKey = process.env.SOSOAPI_API_KEY; if (!apiKey) throw new Error("Configure a SosoAPI API key on your server"); const response = await fetch( "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/studio-api/scheduled-posts/list", { method: "POST", headers: { "Authorization": "Bearer " + apiKey, "Content-Type": "application/json" }, body: JSON.stringify({"workspace_id":"<workspace-uuid>"}) } ); const result = await response.json(); if (!response.ok) throw new Error("SosoAPI request failed: " + response.status); // Use result in your server response; never return or log the API key.返されたデータで製品の一覧を更新し、本人の確認は読み取りと分けます。
得られるもの
現在のワークスペース投稿、または認可・検証エラーを返します。読み取り専用で、投稿は作成しません。
ユーザーの明示的な確認後のみ送信
CalendarからNew Postを選び、アプリの同じ操作で確認手順を比較します。
すべてのプレースホルダーを認可されたID、オフセット付きの未来のISO日時、一意の冪等性キーに置き換えてください。サーバー側リクエストの実行前に、アカウント、文案、日時を確認します。
const apiKey = process.env.SOSOAPI_API_KEY; if (!apiKey) throw new Error("Configure a SosoAPI API key on your server"); const response = await fetch( "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/studio-api/scheduled-posts/create", { method: "POST", headers: { "Authorization": "Bearer " + apiKey, "Content-Type": "application/json" }, body: JSON.stringify({ "workspace_id": "<workspace-uuid>", "social_account_id": "<threads-social-account-uuid>", "caption": "A small note for later: Harborlight Journal is making room for shorter daily reflections. Keep one thought; leave the rest for tomorrow.", "hashtags": [], "media": [], "provider_payload": {"platform": "threads", "publish_options": {"post_type": "TEXT"}}, "scheduled_at": "<future ISO-8601 instant with offset>", "display_timezone": "Asia/Hong_Kong", "idempotency_key": "<unique-stable-key-for-this-intent>" }) } ); const result = await response.json(); if (!response.ok) throw new Error("SosoAPI request failed: " + response.status); // Use result in your server response; never return or log the API key.実行すると実際の予約を作成します。ユーザー確認後のみ送信し、APIキーをブラウザーに公開しないでください。
得られるもの
有効な受理応答はScheduled Postを識別しますが、公開の証明ではありません。権限拒否、無効範囲・アカウント、非対応内容、予約拒否は成功でなくエラーとして表示してください。
返された状態を表示し、安全な次の操作を案内する
SosoAPIでこの画面を開く返されたScheduled Post IDを保存し、現在の状態、投稿先、予約を製品で表示します。
該当するScheduled Postの詳細へ案内します。配信に人の対応が必要なら、黙って再送せずNeeds Attentionへ案内してください。
プロバイダー確認済みの最終状態が記録されるまで、公開済みと表示しないでください。
得られるもの
受領記録と、予約済み、公開処理中、公開済み、失敗、不明を区別します。不明な結果は新しい書き込み前に既存投稿と照合します。
リクエストの受領。その先の公開結果まで。
以下はAPIレスポンスの一部フィールドに架空の値を入れた例です。予約作成後はpost.idを保存し、その投稿の結果確認に使ってください。
1. 作成レスポンス
{
"post": {
"id": "10000000-0000-4000-8000-000000000001",
"status": "scheduled",
"scheduled_at": "2100-01-05T10:00:00+08:00",
"published_at": null,
"permalink": null
},
"deduped": false
}2. 同じ投稿を取得する
POST /studio-api/scheduled-posts/get
{
"id": "10000000-0000-4000-8000-000000000001"
}プロバイダー確認後の詳細レスポンスには、次が含まれる場合があります:
{
"post": {
"id": "10000000-0000-4000-8000-000000000001",
"status": "published",
"published_at": "2100-01-05T02:00:08Z",
"permalink": "https://www.threads.net/@example/post/EXAMPLE"
},
"delivery": {
"stage": "terminal",
"message": "Published on Threads."
}
}post.status- scheduled、publishing、published、failedなど実際の状態を使います。接続が切れたら、判断前に同じ投稿を取得してください。
post.permalink- 取得できる場合のプロバイダー投稿リンク。nullの場合があります。上のURLは例です。
delivery / outcomes- 詳細レスポンスは公開の進行と利用可能なプラットフォーム結果を示します。失敗時は詳細とNeeds Attentionを確認してから対応を選んでください。
フィールドの例で、実際の公開結果記録ではありません。このページはAPIを呼びません。
各ステータスの意味
Submittedリクエストへの応答- リクエストを受領しました。予約済み・公開済みと扱う前に現在の状態を確認します。
Scheduled投稿の詳細- 未来の日時でScheduled Postが受理されています。待機中は投稿先と予約日時を表示してください。
Publishing投稿の詳細- 配信中です。最終結果を待ってください。処理中は成功ではありません。
Published投稿の詳細- SosoAPIがScheduled Postにプロバイダーの最終確認を記録した後にのみ使用します。
Failed投稿の詳細- 最終的な失敗は確認が必要です。変更・再試行前に詳細と利用できる操作を調べます。
Unknownアプリに表示されるもの- 接続が切れて結果が不確かな場合、再送前にScheduled PostsとNeeds Attentionを確認します。
関連ガイド
サーバー側API例を掲載しています。実行前に認可IDとAPIキーを設定してください。ページ自体はリクエストを送りません。
最初のワークフローを試す。
アカウントを作り、Freeで始める。