产品开发者

为你的产品加入发布功能。

一款虚构日记应用添加由用户确认的操作,以排程社交帖子并显示结果。

你的产品 + SOSOAPI

整合流程示意
  1. 你的产品准备与确认
  2. SosoAPI排程一篇已确认帖子
  3. 社交账号跟进结果
集成流程示例。打开演练,了解服务端 API 请求和响应字段。

三个步骤

  1. 准备内容

    在你的产品中收集文案和图片。

  2. 让用户确认

    排程前显示账号、内容与时间。

  3. 带回结果

    显示进度与最终发布结果。

让社交发布成为你产品的一部分。

查看完整演练

场景

为虚构的日记产品添加一个有意识、可审核的“排程此更新”操作。让用户的工作区和确切已连接账号保持可见,并展示返回状态,不暗示平台已发布。

SosoAPI「为你的产品加入发布功能。」示例工作区示意图
共用的「添加帖子」编辑器,使用虚构资料。未提交任何帖子。

开始前

  • 创建并验证 SosoAPI 账号,再选择预期的 工作区。
  • 在「应用设置 → agent 与 API 访问权限」创建 API key。于服务器环境中存储为 SOSOAPI_API_KEY;这些 JavaScript 示例使用 Node.js 20+,不需要 SosoAPI 源代码仓库。
  • 仅从当前已授权范围中选择真实的 工作区 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> 替换为所选 工作区 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.
    • 使用返回资料更新产品清单。用户确认需与此读取分开处理。

    预期结果

    你会获取 工作区 当前帖子,或授权/验证错误。此唯读请求不会创建帖子。

  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,并在产品中显示当前状态、目标及排程。

    • 向用户提供对应 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
详细响应会显示发布进度,以及该帖子可获取的平台结果。如果失败,请先检查这些详情与「需要注意」事项,再决定后续操作。

这些是字段示例,并非实际发布收据。本页不会调用 API。

各状态的含义

Submitted请求响应
已收到你的请求。将其视为已排程或已发布前,请先检查帖子当前状态。
Scheduled帖子详情
Scheduled Post 已被接受,将在未来时间执行。等待期间,让目标和排程时间保持可见。
Publishing帖子详情
正在发送。请等待最终结果;进行中不代表成功。
Published帖子详情
仅在 SosoAPI 已为 Scheduled Post 记录平台最终确认后使用。
Failed帖子详情
终端失败需要审核。请检查帖子详情与可用操作,再决定变更或重试内容。
Unknown应用显示的内容
如果连接中断且结果不明,请先检查排程帖子与需要注意事项,再重新提交。

相关指南

操作指南包含服务器端 API 示例。执行前请设置已授权的 ID 与 API key;本页本身不会发出请求。

试试你的第一个工作流。

创建账号,从 Free 开始。

从 Free 开始