提交后续输入¶
当任务状态变为 input-required 时,智能体正在等待用户回答,而不是已经失败。读取状态消息中的问题和字段标识,收集用户输入后,再提交到同一个任务。
何时使用本接口¶
只在任务明确要求结构化补充输入时使用 matrixflow/input.submit。开始前保存:
Task
id;当前
turnId;状态消息中每个待回答字段的标识;
状态消息提供
callId时,同时保存该值。
如果只是想在已经完成的回答后继续原会话,应使用 message/send 并传入 contextId,不使用本接口。
提交回答¶
下面示例回答一个确认项和一个多选项:
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\": [\"华东\", \"华南\"]
}
}
}
}"
字段 |
类型 |
必需 |
说明 |
|---|---|---|---|
|
string |
是 |
固定为 |
|
string |
是 |
正在等待输入的任务 ID。 |
|
string |
是 |
本次待输入轮次 ID。使用当前响应返回的值。 |
|
string |
否 |
本次输入请求的调用 ID。状态消息返回时原样传递。 |
|
object |
是 |
以待回答字段标识为键的回答集合。 |
|
string[] |
是 |
该字段的回答列表。即使只有一个回答,也使用数组。 |
不要根据问题显示文本自行创造字段标识。字段标识、可选值和是否允许多选应以当前任务的状态消息为准。
检查响应¶
提交成功后,响应仍使用 JSON-RPC 结构。保存响应中的最新任务状态、Task ID 和 Turn ID,然后继续调用 tasks/get:
{
"jsonrpc": "2.0",
"id": "<REQUEST_ID>",
"result": {
"kind": "task",
"id": "<TASK_ID>",
"turnId": "<NEXT_TURN_ID>",
"status": {
"state": "working"
}
}
}
提交接口成功只表示服务端接受了回答。任务可能继续运行、再次请求输入、完成或失败;必须重新查询状态。
常见问题¶
现象 |
先检查 |
下一步 |
|---|---|---|
返回参数错误 |
|
使用最近一次 |
找不到回答字段 |
状态消息中的字段标识 |
不使用界面标签代替字段标识。 |
提交后仍然等待输入 |
最新 Turn ID 和未回答字段 |
重新查询任务,展示新问题,不重复提交旧轮次。 |
重复提交 |
请求记录和任务最新状态 |
先查询任务,确认回答是否已被接受,再决定是否重试。 |