產品開發者

為您的產品加入發布功能。

一款虛構日記應用程式加入由使用者確認的操作,以排程社群貼文並顯示結果。

您的產品 + SOSOAPI

整合流程示意
  1. 您的產品準備與確認
  2. SosoAPI排程一則已確認貼文
  3. 社群帳號跟進結果
整合流程範例。開啟操作指南,查看伺服器端 API 請求與回應欄位。

三個步驟

  1. 準備內容

    在您的產品中收集文案和圖片。

  2. 讓使用者確認

    排程前顯示帳號、內容與時間。

  3. 帶回結果

    顯示進度與最終發布結果。

讓社群發布成為您產品的一部分。

查看完整操作指南

場景

為虛構的日記產品加入一個有意識、可審核的“排程此更新”操作。讓使用者的工作空間和確切已連結帳號保持可見,並展示回傳狀態,不暗示平台已發布。

SosoAPI「為您的產品加入發布功能。」範例工作空間示意圖
共用的「新增貼文」編輯器,使用虛構資料。未提交任何貼文。

開始前

  • 建立並驗證 SosoAPI 帳號,再選擇預期的 Workspace。
  • 在「應用程式設定 → 代理程式與 API 存取權」建立 API key。於伺服器環境中儲存為 SOSOAPI_API_KEY;這些 JavaScript 範例使用 Node.js 20+,不需要 SosoAPI 原始碼儲存庫。
  • 僅從目前已授權範圍中選擇真實的 Workspace UUID 與 Threads 社群帳號 UUID。帳號必須符合 Threads 文字貼文資格。
  • API key 擁有者需要所選工作空間的 editor 或 owner 權限。將 key 保留在伺服器上,不要放在瀏覽器程式碼、請求 JSON 和日誌中。

輸入範例

虛構產品
Harborlight Journal · 私人日記應用程式構想;不代表有實際整合。
使用者意圖
為所選 Threads 帳號,在未來本地時間排程一則已審核的產品短訊。
文案範例
“留給稍後的簡短記錄:Harborlight Journal 正為更簡短的每日感想留出空間。留下一點思緒,其餘留待明天。”
必要執行時範圍
從目前使用者已授權範圍中取得 <workspace-uuid> 與 <threads-social-account-uuid>;切勿推測 ID。
排程
<future ISO-8601 instant with offset>,display_timezone 設為 Asia/Hong_Kong。
重試識別
<unique stable idempotency key for this one user intent>;僅在安全重試相同請求時重複使用。

操作指南

  1. 在 API 呼叫前設計產品確認步驟

    在 SosoAPI 中開啟此區域
    • 在 SosoAPI 應用程式中,選擇目標工作空間並審核已連結帳號。在您的產品原型中,展示使用者所選的同一工作空間和帳號,不要暗中代選。

    • 在確認步驟中顯示確切文案、帳號、本地時間和時區。要求本人選擇 Schedule;開啟表單不得提交任何內容。

    預期結果

    使用者可在寫入前看到目標和時間。虛構產品原型是設計練習,並非已安裝的客戶整合。

  2. 從您的伺服器讀取目前的排程貼文

    • 將 <workspace-uuid> 替換為所選 Workspace 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.
    • 使用回傳資料更新產品清單。使用者確認需與此讀取分開處理。

    預期結果

    您會取得 Workspace 目前貼文,或授權/驗證錯誤。此唯讀請求不會建立貼文。

  3. 僅在使用者明確確認後提交

    • 開啟 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 key。

    預期結果

    有效的已接受回應會指出所建立的排程貼文;不代表平台已發布。能力遭拒、範圍/帳號無效、不支援的承載內容或遭拒的排程,必須顯示為錯誤,不得回報成功。

  4. 呈現回傳狀態,並為使用者提供安全的後續操作

    在 SosoAPI 中開啟此區域
    • 儲存回傳的排程貼文 ID,並在產品中顯示目前狀態、目標及排程。

    • 向使用者提供對應排程貼文詳細資料的連結。如傳送需要人工處理,請連結到 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
詳細回應會顯示發布進度,以及該貼文可取得的平台結果。如果失敗,請先檢查這些詳細資料與「需要注意」事項,再決定後續操作。

這些是欄位範例,並非實際發布收據。本頁不會呼叫 API。

各狀態的含義

Submitted請求回應
已收到您的請求。將其視為已排程或已發布前,請先檢查貼文目前狀態。
Scheduled貼文詳細資料
排程貼文已被接受,將在未來時間執行。等待期間,讓目標和排程時間保持可見。
Publishing貼文詳細資料
正在傳送。請等待終端結果;進行中不代表成功。
Published貼文詳細資料
僅在 SosoAPI 已為排程貼文記錄平台最終確認後使用。
Failed貼文詳細資料
終端失敗需要審核。請檢查貼文詳細資料與可用操作,再決定變更或重試內容。
Unknown應用程式顯示的內容
如果連線中斷且結果不明,請先檢查排程貼文與需要注意事項,再重新提交。

相關指南

操作指南包含伺服器端 API 範例。執行前請設定已授權的 ID 與 API key;本頁本身不會發出請求。

試試您的第一個工作流程。

建立帳號,從 Free 開始。

從 Free 開始