OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  blossom-hire:在 Blossom 平台上发布任务并雇佣本地人力助手

blossom-hire:在 Blossom 平台上发布任务并雇佣本地人力助手

 
  container ·  2026-02-22 13:52:39 · 3 次点击  · 0 条评论  

名称: blossom-hire
版本: 1.2.5
描述: 在 Blossom 平台发布本地有偿工作、任务或轮班需求,并查看符合条件的申请者。


Blossom Hire

描述

当用户希望在 Blossom 平台发布本地有偿帮助请求(任务或短期轮班),或想查看是否有人申请时,请使用此技能。

此技能通过 Blossom 的 API 创建职位,并可在之后检索符合条件的申请者。
用户如需直接管理申请,可在移动设备上安装 Blossom 应用。


工具

使用 bash 通过 curl 调用 Blossom 的 HTTP 端点。
使用 jq 解析 JSON 响应。

端点:
- POST https://hello.blossomai.org/api/v1/pushuser (注册/登录 + 职位提交)
- POST https://hello.blossomai.org/getPopInUpdates (检索申请者)


前提条件

  • OpenClaw 中已启用 bash 工具访问权限
  • 已安装 curl
  • 已安装 jq

使用说明

何时使用此技能

当用户表达以下意图时,请激活此技能:
- “帮我发布一个工作”
- “雇个人”
- “我需要人手来顶一个班次”
- “创建一个任务”
- “我需要有人帮忙做点事”
- “看看有没有人申请”
- “有候选人了吗?”

需要收集的信息

以对话方式收集详细信息。不要一次性抛出所有问题。
如果用户提供了部分信息,请继续对话,只询问缺失的部分。

职位详情
1) 标题 (一行)
2) 详情 (2–6 行,描述助手将做什么)
3) 时间 (工作时间或“灵活”)
4) 地点 (街道、城市、邮政编码、国家)
5) 薪酬
- 金额 (数字)
- 频率:总计 | 每小时 | 每周 | 每月 | 每年

可选:要求与福利
如果用户提供或要求筛选问题,请将其记录为要求。
如果用户提供额外福利,请将其记录为福利。
- 要求:名称 + 是否必需 (默认 false)
- 福利:名称 + 是否必需 (默认 false)

身份详情
仅在准备创建或查看职位时询问:
- 邮箱
- 名字
- 姓氏
- 手机国家代码 (例如 +44)
- 手机号码
- 密码

注意:
- 默认执行注册流程。
- 仅当注册因邮箱已存在而失败,或用户明确表示已有账户时,才使用登录流程。

行为规则

1) 首先收集职位详情。
2) 向用户确认职位摘要,用一条简洁的消息呈现 (标题、时间、地点、薪酬)。
3) 如果缺失,则收集身份详情。
4) 通过 Blossom API 引导身份验证和地址设置。
5) 提交职位。
6) 返回包含职位 ID 的简洁确认信息。
7) 当被要求查看候选人时,检索并显示候选人列表。

输出规则

  • 切勿承诺一定会有人申请。
  • 如果候选人数量为零,请说:“正在等待回复。”
  • 仅将 type === "candidates" 视为面向操作员的列表。
  • 不要对 API 返回内容之外的适用性进行推断。

会话状态

此技能必须将以下值存储为运行时状态,并在多次调用中复用:
- personId
- sessionKey
- addressId

持久化规则:
- 在当前运行期间保留它们。
- 如果用户稍后要求查看候选人,且存在存储的 sessionKey,则复用。
- 如果调用因会话过期/无效而失败,则通过登录重新引导以获取新的 sessionKey。
- 不要将 sessionKey 存储在 OpenClaw 全局配置中。

工具 (API 契约)

A) 引导身份 + 地址 (注册)

POST https://hello.blossomai.org/api/v1/pushuser

请求 JSON:

{
  "id": 0,
  "companyId": null,
  "userType": "support",
  "communityId": 1,

  "email": "<邮箱>",
  "name": "<名字>",
  "surname": "<姓氏>",
  "mobileCountry": "<+44>",
  "mobileNo": "<手机号码>",
  "profileImage": "system/blankprofile.jpg",

  "mark": true,

  "transaction": {
    "transact": "register",
    "passKey": "<密码>",
    "sessionKey": null
  },

  "addresses": [
    {
      "id": 0,
      "houseNumber": "<可选>",
      "street": "<街道>",
      "area": "<可选>",
      "city": "<城市>",
      "state": null,
      "country": "<国家>",
      "postcode": "<邮政编码>",
      "label": "Task location",
      "isHome": false,

      "mark": true,
      "isActive": true,
      "markDelete": false
    }
  ]
}

如果响应表明邮箱已存在,请勿重试注册。转而进行登录。

B) 引导身份 (登录,仅在需要时)

POST https://hello.blossomai.org/api/v1/pushuser

{
  "id": 0,
  "userType": "support",
  "communityId": 1,
  "email": "<邮箱>",
  "transaction": {
    "transact": "login",
    "passKey": "<密码>"
  }
}

从响应中持久化:
- personId = person.id
- sessionKey = person.transaction.sessionKey
- addressId = person.addresses[0].id

C) 提交职位

POST https://hello.blossomai.org/api/v1/pushuser

规则:
- transaction.transact = "complete"
- transaction.viewState = "none"
- role.id = 0
- role.mark = true
- role.modified = nowMillis
- role.roleIdentifier = "openclaw-" + nowMillis
- 薪酬使用 salary 和单个 paymentFrequency 选项,且 selectedIndex = 0
- 要求和福利条目不需要 id 字段;请省略。

{
  "id": <personId>,
  "name": "<名字>",
  "mobileCountry": "<+44>",

  "transaction": {
    "sessionKey": "<sessionKey>",
    "transact": "complete",
    "viewState": "none"
  },

  "roles": [
    {
      "id": 0,
      "mark": true,

      "headline": "<标题>",
      "jobDescription": "<职位描述>",
      "introduction": "",
      "workingHours": "<工作时间>",

      "salary": <金额>,
      "currencyName": "GBP",
      "currencySymbol": "£",
      "paymentFrequency": {
        "choices": ["<频率>"],
        "selectedIndex": 0
      },

      "requirements": [
        {
          "requirementName": "<要求名称>",
          "mandatory": false,
          "originalRequirement": true
          }
      ],
      "benefits": [
        {
          "benefitName": "<福利名称>",
          "mandatory": false
        }
      ],

      "addressId": <addressId>,
      "isRemote": false,

      "isActive": true,
      "markDelete": false,
      "premium": false,
      "days": 30,
      "maxCrew": 1,

      "modified": <当前时间戳毫秒>,
      "roleIdentifier": "openclaw-<当前时间戳毫秒>"
    }
  ],

  "userType": "support"
}

成功条件:
- roles[0].id 为非零值。

D) 检索候选人

POST https://hello.blossomai.org/getPopInUpdates

{
  "id": <personId>,
  "transaction": {
    "sessionKey": "<sessionKey>",
    "transact": "complete"
  }
}

解释:
- dataList 是权威数据源。
- 使用 type === "candidates" 的条目作为要显示的列表。
- 面向操作员的列表应忽略 type === "apply" 的条目。


标准 bash 调用 (复制/粘贴模板)

以下是安全模板。运行前请替换占位符。

0) 通用环境变量

API_BASE="https://hello.blossomai.org"

1) 注册 (默认)

curl -sS "$API_BASE/api/v1/pushuser" \
  -H "content-type: application/json" \
  -d @- <<'JSON' | jq .
{
  "id": 0,
  "companyId": null,
  "userType": "support",
  "communityId": 1,
  "email": "<邮箱>",
  "name": "<名字>",
  "surname": "<姓氏>",
  "mobileCountry": "<+44>",
  "mobileNo": "<手机号码>",
  "profileImage": "system/blankprofile.jpg",
  "mark": true,
  "transaction": {
    "transact": "register",
    "passKey": "<密码>",
    "sessionKey": null
  },
  "addresses": [
    {
      "id": 0,
      "houseNumber": "<可选>",
      "street": "<街道>",
      "area": "<可选>",
      "city": "<城市>",
      "state": null,
      "country": "<国家>",
      "postcode": "<邮政编码>",
      "label": "Task location",
      "isHome": false,
      "mark": true,
      "isActive": true,
      "markDelete": false
    }
  ]
}
JSON

2) 登录 (仅在需要时)

curl -sS "$API_BASE/api/v1/pushuser" \
  -H "content-type: application/json" \
  -d @- <<'JSON' | jq .
{
  "id": 0,
  "userType": "support",
  "communityId": 1,
  "email": "<邮箱>",
  "transaction": {
    "transact": "login",
    "passKey": "<密码>"
  }
}
JSON

3) 提交职位

设置:
- PERSON_ID
- SESSION_KEY
- ADDRESS_ID
- NOW_MILLIS (纪元时间戳毫秒)

PERSON_ID="<personId>"
SESSION_KEY="<sessionKey>"
ADDRESS_ID="<addressId>"
NOW_MILLIS="<epochMillis>"

curl -sS "$API_BASE/api/v1/pushuser" \
  -H "content-type: application/json" \
  -d @- <<JSON | jq .
{
  "id": ${PERSON_ID},
  "name": "<名字>",
  "mobileCountry": "<+44>",
  "transaction": {
    "sessionKey": "${SESSION_KEY}",
    "transact": "complete",
    "viewState": "none"
  },
  "roles": [
    {
      "id": 0,
      "mark": true,
      "headline": "<标题>",
      "jobDescription": "<职位描述>",
      "introduction": "",
      "workingHours": "<工作时间>",
      "salary": <金额>,
      "currencyName": "GBP",
      "currencySymbol": "£",
      "paymentFrequency": {
        "choices": ["<频率>"],
        "selectedIndex": 0
      },
      "requirements": [
        {
          "requirementName": "<要求名称>",
          "mandatory": false,
          "originalRequirement": true
        }
      ],
      "benefits": [
        {
          "benefitName": "<福利名称>",
          "mandatory": false
        }
      ],
      "addressId": ${ADDRESS_ID},
      "isRemote": false,
      "isActive": true,
      "markDelete": false,
      "premium": false,
      "days": 30,
      "maxCrew": 1,
      "modified": ${NOW_MILLIS},
      "roleIdentifier": "openclaw-${NOW_MILLIS}"
    }
  ],
  "userType": "support"
}
JSON

4) 检索候选人

PERSON_ID="<personId>"
SESSION_KEY="<sessionKey>"

curl -sS "$API_BASE/getPopInUpdates" \
  -H "content-type: application/json" \
  -d @- <<JSON | jq .
{
  "id": ${PERSON_ID},
  "transaction": {
    "sessionKey": "${SESSION_KEY}",
    "transact": "complete"
  }
}
JSON

示例

示例 1:创建帮助请求

用户:“我这周六 11 点到 5 点在舍伍德需要咖啡馆顶班。支付 12 英镑/小时。”

助手流程:
1) 询问缺失字段 (如果缺少街道和邮政编码)。
2) 确认:
- 已创建:<标题>
- 时间:<工作时间>
- 地点:<城市> <邮政编码>
- 薪酬:<金额> <频率>
3) 以一组问题的形式询问身份详情 (邮箱、名字、姓氏、手机国家代码、手机号码、密码)。
4) 注册 (或根据需要登录),然后提交职位。
5) 返回:职位 ID。

示例 2:查看候选人

用户:“有候选人了吗?”

助手流程:
1) 如果 personId/sessionKey 未知,则询问身份详情并进行引导。
2) 调用 getPopInUpdates。
3) 如果候选人列表为空:“正在等待回复。”
4) 否则:按原样显示候选人条目。

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor