# 提交后续输入

当任务状态变为 `input-required` 时，智能体正在等待用户回答，而不是已经失败。读取状态消息中的问题和字段标识，收集用户输入后，再提交到同一个任务。

## 何时使用本接口

只在任务明确要求结构化补充输入时使用 `matrixflow/input.submit`。开始前保存：

- Task `id`；
- 当前 `turnId`；
- 状态消息中每个待回答字段的标识；
- 状态消息提供 `callId` 时，同时保存该值。

如果只是想在已经完成的回答后继续原会话，应使用 `message/send` 并传入 `contextId`，不使用本接口。

## 提交回答

下面示例回答一个确认项和一个多选项：

```bash
export TASK_ID='<task-id>'
export TURN_ID='<turn-id>'
export CALL_ID='<call-id>'
export REQUEST_ID='<new-unique-request-id>'

curl -X POST "$PRODUCT_API_BASE_URL/agents/a2a" \
  -H "X-API-Key: $PRODUCT_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d "{
    \"agent_id\": \"$AGENT_ID\",
    \"jsonrpc\": \"2.0\",
    \"id\": \"$REQUEST_ID\",
    \"method\": \"matrixflow/input.submit\",
    \"params\": {
      \"taskId\": \"$TASK_ID\",
      \"turnId\": \"$TURN_ID\",
      \"callId\": \"$CALL_ID\",
      \"answers\": {
        \"approval\": {
          \"answers\": [\"yes\"]
        },
        \"regions\": {
          \"answers\": [\"华东\", \"华南\"]
        }
      }
    }
  }"
```

| 字段 | 类型 | 必需 | 说明 |
| --- | --- | --- | --- |
| `method` | string | 是 | 固定为 `matrixflow/input.submit`。 |
| `params.taskId` | string | 是 | 正在等待输入的任务 ID。 |
| `params.turnId` | string | 是 | 本次待输入轮次 ID。使用当前响应返回的值。 |
| `params.callId` | string | 否 | 本次输入请求的调用 ID。状态消息返回时原样传递。 |
| `params.answers` | object | 是 | 以待回答字段标识为键的回答集合。 |
| `params.answers.<field>.answers` | string[] | 是 | 该字段的回答列表。即使只有一个回答，也使用数组。 |

不要根据问题显示文本自行创造字段标识。字段标识、可选值和是否允许多选应以当前任务的状态消息为准。

## 检查响应

提交成功后，响应仍使用 JSON-RPC 结构。保存响应中的最新任务状态、Task ID 和 Turn ID，然后继续调用 `tasks/get`：

```json
{
  "jsonrpc": "2.0",
  "id": "<REQUEST_ID>",
  "result": {
    "kind": "task",
    "id": "<TASK_ID>",
    "turnId": "<NEXT_TURN_ID>",
    "status": {
      "state": "working"
    }
  }
}
```

提交接口成功只表示服务端接受了回答。任务可能继续运行、再次请求输入、完成或失败；必须重新查询状态。

## 常见问题

| 现象 | 先检查 | 下一步 |
| --- | --- | --- |
| 返回参数错误 | `taskId`、`turnId` 和 `answers` | 使用最近一次 `input-required` 响应中的值重新构造请求。 |
| 找不到回答字段 | 状态消息中的字段标识 | 不使用界面标签代替字段标识。 |
| 提交后仍然等待输入 | 最新 Turn ID 和未回答字段 | 重新查询任务，展示新问题，不重复提交旧轮次。 |
| 重复提交 | 请求记录和任务最新状态 | 先查询任务，确认回答是否已被接受，再决定是否重试。 |

## 下一步

- [查询任务状态与结果](query-task-status-results.md)
- [发送消息并启动任务](call-agent-a2a.md)
