Open Call 选定画师确认提示与 Group 消息 (2026-08-05)

本文中的非自动接受页面事件和 Group 消息方案已被 Pending Commission 隐藏与延后创建 Group 取代。当前仅在 Commission 可见后使用现有 created / worktask.created 提示。

接口变更

user

  • POST /api/project_requests/choose
    • 功能:用户选定 Open Call 应征画师并创建 Commission WorkTask
    • 变更:自动接受时沿用 Service 的 WorkTask 创建提示;非自动接受时发送双方待确认页面事件和等待画师确认的 Group 系统消息
  • POST /api/worktask_page_event_list/list
    • 功能:获取用户侧 Commission WorktaskPageEventList
    • 变更:新增 project_artist_confirmation_pending 和 project_artist_accepted 两种事件类型

artist_center

echo / event

  • GroupMessageCreated
    • 功能:向 Group 成员实时广播新消息
    • 变更:自动接受沿用现有 worktask.created 消息;非自动接受在选中画师和画师确认加入时分别发送对应的 Group 系统消息

接口示例

user

POST /api/project_requests/choose

  • 功能说明:用户选定一个 Open Call 应征并创建 Commission WorkTask、阶段和 Group。
  • 变更说明:接口响应结构不变;新增的提示行为由应征记录的 auto_accept 决定。

请求参数

字段类型必填说明
project_request_idnumber是被选定的 Project Request ID
deadlinestring是本次 Commission 截稿时间
remunerationnumber否本次 Commission 成交稿酬;不传时使用应征报价
nameobject / string否Commission 名称,沿用多语言字段格式

请求示例

{
  "project_request_id": 201,
  "deadline": "2026-08-20 23:59:59",
  "remuneration": 21000,
  "name": {
    "zh": "Open Call 约稿",
    "_lang": "zh"
  }
}

响应示例

{
  "ok": true
}

分支行为

auto_accept新 WorkTask 状态WorktaskPageEventListGroup 消息
truewait_pay与 Service 一致,为 User、Artist 各创建一条现有 created 事件与 Service 一致,发送现有 worktask.created 系统消息
falsepending为 User、Artist 各创建一条 project_artist_confirmation_pending立即发送“约稿合作已创建、等待被选定画师确认”的 Group 系统消息

auto_accept=false 时,用户选中画师后 Group 系统消息的中文内容如下。Commission #58 中的数字由后端使用实际 work_task_id 动态渲染:

约稿合作已创建

Commission #58 已成功创建,当前正在等待被选定画师确认稿酬、截稿日等相关信息。

画师确认后,客户即可进行付款;为保障双方权益,请在开始正式创作前,确保至少已完成一个阶段的付款。

您可以在本群聊中进行本次约稿相关的沟通。

您可以直接使用自己的语言输入,聊天内容会自动翻译。

如遇翻译或其他问题,请点击底部的按钮申请多语言助手加入。

请注意:助手仅可查看群聊内容,无法访问私聊。请在本群聊中进行与本次约稿相关的所有交流。

后端同时提供 zh、en、ja 三种内容。前端应直接展示 Group 消息中的多语言 title / content,不要根据 WorkTask 状态重新拼接这段消息。

auto_accept=true 不使用上述等待确认文案,也不创建两种 project_artist_* 页面事件;它完整沿用现有 Service WorkTask 创建后的 created 页面事件和 worktask.created Group 系统消息,前端继续使用已有处理逻辑。

错误响应

  • 400:应征状态不可选定或支付渠道不匹配
  • 404:Project Request 或 Project 不属于当前用户
  • 422:请求参数校验失败

POST /api/worktask_page_event_list/list

  • 功能说明:获取当前用户在指定 WorkTask 中尚未关闭的页面事件。
  • 变更说明:Open Call 非自动接受流程新增两种 User 页面提示事件。

请求参数

字段类型必填说明
work_task_idnumber是当前用户拥有的 WorkTask ID

请求示例

{
  "work_task_id": 58
}

待画师确认响应示例

{
  "data": [
    {
      "id": 301,
      "work_task_id": 58,
      "type": "project_artist_confirmation_pending",
      "data_id": null,
      "data": null,
      "to": "user",
      "is_close": false
    }
  ]
}

画师已接受响应示例

{
  "data": [
    {
      "id": 302,
      "work_task_id": 58,
      "type": "project_artist_accepted",
      "data_id": null,
      "data": null,
      "to": "user",
      "is_close": false
    }
  ]
}

前端文案映射

typeUser 端提示文案
project_artist_confirmation_pending您已选定画师并创建约稿合作。请等待画师确认稿酬、截稿日及其他合作信息。画师确认后,您即可进行付款并正式启动约稿流程。
project_artist_accepted画师已确认加入本次约稿。请至少完成一个节点的付款;付款完成后,画师即可正式开始创作。

前端必须按 type 映射文案,不能读取 data 作为提示内容;这两类事件的 data 固定为 null。

错误响应

  • 404:WorkTask 不属于当前用户
  • 422:work_task_id 校验失败

artist_center

POST /api/artist_center/work_tasks/accept

  • 功能说明:画师确认加入一个由 Open Call Project Request 创建、当前状态为 pending 的 Commission WorkTask。
  • 变更说明:接受成功后 WorkTask 进入 wait_pay,关闭双方 project_artist_confirmation_pending,创建双方 project_artist_accepted,并发送 Group 系统消息。

请求参数

字段类型必填说明
idnumber是当前画师的 Project 来源 WorkTask ID

请求示例

{
  "id": 58
}

响应示例

{
  "ok": true
}

Group 消息

画师已确认加入本次约稿。

为保障双方权益,请在开始正式创作前,确保至少已完成一个阶段的付款。

后端 Group 模板同时提供 zh、en、ja 三种内容。

错误响应

  • 400:WorkTask 不是由 Project Request 创建
  • 403:WorkTask 当前不是 pending,不可重复接受
  • 404:WorkTask 不属于当前画师
  • 422:id 校验失败

POST /api/artist_center/worktask_page_event_list/list

  • 功能说明:获取当前画师在指定 WorkTask 中尚未关闭的页面事件。
  • 变更说明:Open Call 非自动接受流程新增两种 Artist 页面提示事件。

请求参数

字段类型必填说明
work_task_idnumber是当前画师拥有的 WorkTask ID

请求示例

{
  "work_task_id": 58
}

待确认响应示例

{
  "data": [
    {
      "id": 303,
      "work_task_id": 58,
      "type": "project_artist_confirmation_pending",
      "data_id": null,
      "data": null,
      "to": "artist",
      "is_close": false
    }
  ]
}

已接受响应示例

{
  "data": [
    {
      "id": 304,
      "work_task_id": 58,
      "type": "project_artist_accepted",
      "data_id": null,
      "data": null,
      "to": "artist",
      "is_close": false
    }
  ]
}

前端文案映射

typeArtist 端提示文案
project_artist_confirmation_pending客户已选定您并创建约稿合作。请仔细核对稿酬、截稿日及其他合作信息。确认无误后,请点击「确认加入约稿」。加入约稿后,请等待客户至少完成一个节点的付款,再正式开始创作。
project_artist_accepted您已确认加入本次约稿。请等待客户至少完成一个节点的付款,再正式开始创作。

前端在 project_artist_confirmation_pending 状态下展示「确认加入约稿」操作,并调用 POST /api/artist_center/work_tasks/accept。接口成功后应重新拉取 WorkTask 详情和页面事件列表。

错误响应

  • 404:WorkTask 不属于当前画师
  • 422:work_task_id 校验失败

echo / event

GroupMessageCreated

  • 功能说明:通过当前 Group 成员的 user_events.{user_id} Channel 广播新增 Group 消息。
  • 变更说明:自动接受的现有 WorkTask 创建消息,以及非自动接受新增的选中/接受消息,均沿用现有 GroupMessageCreated,没有新增 Echo 事件名称。

关键字段

{
  "group": {
    "id": 88,
    "work_task_id": 58
  },
  "message": {
    "group_id": 88,
    "sender_uid": null,
    "content_type": "system_notifiction",
    "content": {
      "scene": "project_request.artist_accepted",
      "meta": {
        "project_id": 101,
        "project_request_id": 201,
        "work_task_id": 58,
        "to": "group"
      },
      "title": {
        "zh": "画师已确认加入本次约稿",
        "en": "The artist has joined the commission",
        "ja": "クリエイターがコミッションへの参加を確認しました",
        "_lang": "zh"
      },
      "content": {
        "zh": "为保障双方权益,请在开始正式创作前,确保至少已完成一个阶段的付款。",
        "en": "To protect both parties, please ensure that at least one stage has been paid for before official work begins.",
        "ja": "双方の権利を守るため、正式な制作を開始する前に、少なくとも1つの工程の支払いが完了していることを確認してください。",
        "_lang": "zh"
      }
    }
  }
}

前端注意

  • content_type 的现有枚举值是 system_notifiction,拼写保持不变;不要改按 system_notification 判断。
  • 自动接受的创建消息沿用 Service 流程,scene 是现有值 worktask.created。
  • 非自动接受在用户选中画师时,等待确认消息的 scene 是 project_request.user_choosen,拼写保持不变。
  • 画师接受消息的 scene 是 project_request.artist_accepted。
  • 系统消息 sender_uid 为 null。
  • 前端使用当前界面语言读取 message.content.title[lang] 和 message.content.content[lang];缺少目标语言时按现有 _lang 回退逻辑处理。

页面事件生命周期

业务动作project_artist_confirmation_pendingproject_artist_accepted
用户选中 auto_accept=false 的应征User、Artist 各创建一条 open 事件不创建
画师接受关闭双方事件User、Artist 各创建一条 open 事件
画师拒绝关闭双方事件不创建
User 或 Artist 取消 pending / wait_pay WorkTask关闭双方事件关闭双方事件
客户完成首阶段付款已关闭或不存在关闭双方事件

列表接口只返回 is_close=false 的事件,所以状态切换后旧提示会从接口响应中消失。

前端对接清单

  • User、Artist 的 Commission WorktaskPageEventList 组件增加两个新 type 分支。
  • 同一个 type 在 User、Artist 端使用不同文案,不要共用一段提示。
  • Artist 待确认卡片展示「确认加入约稿」按钮,成功后刷新 WorkTask 和事件列表。
  • auto_accept=true 时不要等待 project_artist_confirmation_pending;WorkTask 会直接是 wait_pay,页面事件和 Group 消息均复用现有 Service WorkTask 创建流程。
  • auto_accept=false 时,选中画师后立即展示双方待确认页面事件,Group 也会立即收到等待画师确认的系统消息。
  • Group 消息沿用现有系统消息组件和多语言选择逻辑。
  • 收到 GroupMessageCreated 后沿用现有逻辑追加消息并更新 Group 排序/未读状态。
  • 不要根据 Group 文案推断 WorkTask 状态;业务按钮和页面状态以 WorkTask API 返回的 status 为准。

兼容性说明

  • 原有 WorktaskPageEventList 类型保持不变,本次只新增两个枚举值。
  • 页面事件响应结构没有变化,新增类型的 data_id / data 均为 null。
  • POST /api/project_requests/choose 和 POST /api/artist_center/work_tasks/accept 的 HTTP 响应结构不变。
  • Echo Channel、事件名称与 GroupMessage 结构不变,只新增系统消息内容。