在文档智能中调用接口,返回id,id输入query怎么通不了,要用轮询?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在文档智能中调用接口时,返回的 id
是用于查询任务处理结果的关键标识。根据知识库中的说明,文档智能的接口通常采用异步任务处理机制,这意味着提交任务后不会立即返回最终结果,而是需要通过轮询的方式获取任务的处理状态和结果。
以下是详细的原因和操作步骤:
文档智能的接口设计为异步处理模式,主要原因是文档解析、抽取或转换等任务可能涉及复杂的计算和处理流程,耗时较长。因此,提交任务后,系统会立即返回一个任务标识符(即 id
),而实际的任务处理会在后台进行。
Completed
字段为 false
。Completed
字段为 true
,Status
字段为 Success
。Completed
字段为 true
,Status
字段为 Fail
,并附带错误码和详细信息。直接使用 id
查询时,如果任务尚未完成,则无法获取最终结果,因此需要通过轮询机制不断查询任务状态,直到任务完成或超时。
以下是调用文档智能接口并进行轮询的标准流程:
调用异步任务提交接口(如 SubmitDocumentExtractJob
或其他相关接口),提交文档处理请求。接口会返回一个任务标识符 id
。
示例返回:
{
"RequestId": "43A29C77-405E-4CC0-BC55-EE694AD00655",
"Data": {
"Id": "docmind-20220712-b15fe420"
}
}
使用上一步返回的 id
,调用结果查询接口(如 GetDocumentExtractResult
或其他相关接口)查询任务状态。建议每 10秒轮询一次,最多轮询 120分钟。
名称 | 类型 | 必填 | 描述 | 示例值 |
---|---|---|---|---|
Id | string | 是 | 需要查询的业务订单号,从提交接口返回。 | docmind-20220712-b15f**** |
名称 | 类型 | 描述 | 示例值 |
---|---|---|---|
RequestId | string | 请求唯一ID。 | 43A29C77-405E-4CC0-BC55-** |
Completed | boolean | 异步任务是否处理完成,false 表示仍在处理中,true 表示已完成。 | true |
Status | string | 任务完成状态,Success 表示成功,Fail 表示失败。 | Success |
Data | string | 返回数据,具体结构取决于任务类型(如表格解析、文档抽取等)。 | - |
Code | string | 状态码。 | 200 |
Message | string | 详细信息。 | Message |
Completed
为 false
,表示任务仍在处理中,需继续轮询。Completed
为 true
,检查 Status
字段:
Success
:任务成功,提取 Data
中的结果。Fail
:任务失败,查看 Code
和 Message
获取错误原因。Code
和 Message
字段会提供详细的错误信息,请根据提示排查问题。以下是一个轮询的示例代码(以 Python 为例):
import time
from alibabacloud_docmind_api20220711.client import Client as DocmindClient
from alibabacloud_tea_openapi.models import Config
from alibabacloud_docmind_api20220711.models import GetDocumentExtractResultRequest
# 初始化客户端
config = Config(
access_key_id="your-access-key-id",
access_key_secret="your-access-key-secret",
endpoint="docmind-api.cn-hangzhou.aliyuncs.com"
)
client = DocmindClient(config)
# 提交任务后返回的 id
task_id = "docmind-20220712-b15f****"
# 轮询任务状态
def poll_task_status(task_id):
request = GetDocumentExtractResultRequest(id=task_id)
max_poll_time = 120 * 60 # 最大轮询时间 120 分钟
poll_interval = 10 # 轮询间隔 10 秒
elapsed_time = 0
while elapsed_time < max_poll_time:
response = client.get_document_extract_result(request)
completed = response.body.completed
if completed:
if response.body.status == "Success":
print("任务成功,结果:", response.body.data)
return
elif response.body.status == "Fail":
print("任务失败,错误信息:", response.body.message)
return
time.sleep(poll_interval)
elapsed_time += poll_interval
print("任务超时,未在规定时间内完成。")
poll_task_status(task_id)
由于文档智能接口采用异步处理机制,直接使用 id
查询可能无法立即获取结果,因此需要通过轮询方式不断检查任务状态。请按照上述步骤和注意事项操作,确保任务结果能够正确获取。