Skip to content

任务 API

创建和管理自动化任务的参考。

概述

任务是 Browserman 执行的单个自动化作业。每个任务代表一个操作,如发布推文、点赞内容或任何平台特定的动作。

任务状态

任务经历几个状态:

  • pending - 任务已排队,等待开始
  • processing - 任务当前正在执行
  • completed - 任务成功完成
  • failed - 任务遇到错误
  • timeout - 任务超过时间限制
  • cancelled - 任务被用户取消

创建任务

执行平台特定工具。

端点:

POST /api/tasks

请求体:

json
{
  "platform": "twitter",
  "tool": "createTweet",
  "accountName": "my-account",
  "parameters": {
    "text": "你好世界!",
    "preferredEngine": "lite"
  }
}

示例:

bash
curl -X POST https://api.browserman.run/api/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "twitter",
    "tool": "createTweet",
    "accountName": "my-twitter",
    "parameters": {
      "text": "测试 Browserman API!🚀"
    }
  }'

成功响应:

json
{
  "success": true,
  "data": {
    "taskId": "task_abc123def456",
    "state": "pending",
    "platform": "twitter",
    "tool": "createTweet",
    "accountName": "my-twitter",
    "createdAt": "2024-01-15T10:30:00Z"
  }
}

获取任务状态

检索任务的当前状态和结果。

端点:

GET /api/tasks/:taskId

示例:

bash
curl https://api.browserman.run/api/tasks/task_abc123def456 \
  -H "Authorization: Bearer YOUR_API_KEY"

响应(已完成):

json
{
  "success": true,
  "data": {
    "taskId": "task_abc123def456",
    "state": "completed",
    "platform": "twitter",
    "tool": "createTweet",
    "accountName": "my-twitter",
    "createdAt": "2024-01-15T10:30:00Z",
    "startedAt": "2024-01-15T10:30:05Z",
    "completedAt": "2024-01-15T10:30:15Z",
    "duration": 10000,
    "result": {
      "success": true,
      "output": "推文发布成功",
      "tweetUrl": "https://x.com/username/status/1234567890"
    }
  }
}

列出任务

获取带过滤和分页的任务列表。

端点:

GET /api/tasks

查询参数:

  • limit(可选)- 每页项目数(默认:50,最多:100)
  • offset(可选)- 跳过的项目数(默认:0)
  • platform(可选)- 按平台过滤:twitter、xueqiu、eastmoney、tonghuashun
  • action(可选)- 按操作名称过滤:createTweet、likeTweet、post 等
  • status(可选)- 按状态过滤:pending、processing、completed、failed、timeout
  • success(可选)- 按成功状态过滤:true(仅已完成)、false(未完成)
  • accountName(可选)- 按账号名称过滤
  • accountId(可选)- 按账号 ID 过滤
  • execution_engine(可选)- 按执行引擎过滤:lite、full
  • startDate(可选)- 按创建日期过滤(ISO 8601 格式)
  • endDate(可选)- 按创建日期过滤(ISO 8601 格式)

示例:

bash
# 获取最近完成的任务
curl "https://api.browserman.run/api/tasks?status=completed&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

# 仅获取成功的任务
curl "https://api.browserman.run/api/tasks?success=true&limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

# 获取特定账号的任务
curl "https://api.browserman.run/api/tasks?accountName=my-twitter&platform=twitter" \
  -H "Authorization: Bearer YOUR_API_KEY"

# 获取日期范围内的任务并分页
curl "https://api.browserman.run/api/tasks?startDate=2024-01-01&endDate=2024-01-31&limit=50&offset=0" \
  -H "Authorization: Bearer YOUR_API_KEY"

# 按平台和操作过滤
curl "https://api.browserman.run/api/tasks?platform=twitter&action=createTweet&success=true" \
  -H "Authorization: Bearer YOUR_API_KEY"

响应:

json
{
  "success": true,
  "data": {
    "tasks": [
      {
        "id": "task_abc123",
        "status": "completed",
        "platform": "twitter",
        "action": "createTweet",
        "execution_engine": "lite",
        "params": {
          "text": "测试 Browserman API!🚀"
        },
        "data": {
          "tweetId": "1234567890"
        },
        "created_at": "2024-01-15T10:30:00Z",
        "started_at": "2024-01-15T10:30:02Z",
        "completed_at": "2024-01-15T10:30:15Z",
        "duration_ms": 13000,
        "platform_account_id": "acc_xyz789"
      }
    ],
    "total": 150,
    "limit": 50,
    "offset": 0,
    "filters": {
      "platform": null,
      "action": null,
      "status": null,
      "success": null,
      "execution_engine": null,
      "accountId": null,
      "accountName": null,
      "startDate": null,
      "endDate": null
    }
  }
}

取消任务

取消待处理或处理中的任务。

端点:

DELETE /api/tasks/:taskId

示例:

bash
curl -X DELETE https://api.browserman.run/api/tasks/task_abc123 \
  -H "Authorization: Bearer YOUR_API_KEY"

任务轮询

由于任务是异步的,你需要轮询状态。推荐模式:

JavaScript 示例

javascript
async function waitForTask(taskId, maxWaitTime = 300000) {
  const startTime = Date.now();
  const pollInterval = 5000; // 5 秒

  while (Date.now() - startTime < maxWaitTime) {
    const response = await fetch(
      `https://api.browserman.run/api/tasks/${taskId}`,
      {
        headers: {
          'Authorization': `Bearer ${API_KEY}`
        }
      }
    );

    const { data } = await response.json();

    if (data.state === 'completed') {
      return data.result;
    } else if (data.state === 'failed') {
      throw new Error(data.error.message);
    }

    await sleep(pollInterval);
  }

  throw new Error('轮询超时');
}

下一步