Install
openclaw skills install @brade888/sbkj-bidsearchopenclaw skills install @brade888/sbkj-bidsearchBAOBIAO_ZTB_API_KEY 或项目现有安全配置读取,禁止把真实 Key 写入代码、Skill、日志、示例或提交记录。https://gate.gov-bid.com/outer-gateway/bid,请求地址按参考文档拼接 ?key={API_KEY}。projectId/id + publishTime,二者是后续项目详情调用的联合身份。code 和业务 subCode;不要只根据 HTTP 200 判断成功。references/ 下对应文件,不要一次性加载全部接口资料。按照以下优先级执行,减少 Agent 在底层接口和实现语言之间反复判断:
BAOBIAO_ZTB_API_KEY,再调用脚本。scripts/compile_search_condition.py,不要手工重写 JSON。scripts/invoke_baobiao_api.py,通过 --endpoint 和 JSON 请求体调用,不要在回答中拼接含 Key 的 URL。references/ 并给出调用链和参数说明。$env:BAOBIAO_ZTB_API_KEY = "从安全渠道取得的Key"
python scripts/invoke_baobiao_api.py `
--endpoint searchProjectApi `
--data-file request.json
脚本输出约定:正常 JSON 输出到 stdout,错误输出到 stderr;退出码 0 表示成功,1 表示调用或输入错误,2 表示缺少 API Key 或参数错误,3 表示接口返回业务失败。API Key 只在当前进程临时提供,不写入 Skill 或项目文件。
| 用户意图 | 标准处理 |
|---|---|
| 自然语言搜索招中标项目 | 读取 natural-language-search-workflow.md,AI 重写后调用普通搜索 |
| 已有结构化筛选条件搜索 | 读取 search-condition-mapping.md 和 api-reference.md,直接调用普通搜索 |
| 根据项目编号查项目 | 调用项目编号搜索,再按 projectId + publishTime 进入详情链路 |
| 查看公告全文 | 调用正文详情 |
| 提取预算、中标金额、联系人、投标企业 | 调用官方结构化详情 |
| 下载或查看附件 | 调用附件列表;正文详情中的附件概要不能替代下载接口 |
| 跳转原始来源 | 优先使用结构化详情的 collectUrl,缺失时调用采集源网址 |
| 查询合同 | 读取 contract-workflow.md,调用合同搜索,必要时进入项目详情链路 |
| 查询企业基本情况、联系人、客户、供应商 | 读取 company-workflow.md,按需调用企业画像接口组 |
| 查询拟在建项目 | 读取 planned-project-workflow.md,使用拟在建项目独立模型 |
| 推理行业、分类或从正文抽取字段 | 读取 ai-workflow.md,明确标记 AI 推断结果 |
将 aiSearchSubmitPolling 视为普通搜索的条件编译器,不要让 Agent 直接凭空拼装复杂普通搜索参数。
userQuery,取得 requestKey。status=completed 才继续。processing、search_rewrite_done、area_code_done、industry_done 表示仍在处理,不能提前搜索。failed 必须返回 errorMsg 或可定位的失败原因。searchCondition、areaCode 和 industryCodes 转换成普通搜索请求。00:00:00,结束日期补 23:59:59。subjects 默认按 OR 语义使用英文竖线连接;如果用户明确要求同时出现,改用空格并说明语义。enterpriseName 映射到 companyName;projectClassIds 映射到 projectClassID;purchaseTypeId 映射到 purchaseTypeID。subcontractFlag 在普通搜索接口没有明确对应字段,必须提示“未透传”,不能静默丢弃。inCludeKW 拼写必须保持接口原名。pageNumber 不超过 50;需要总数时使用接口约定的 pageNumber=0,并说明不会返回完整记录。如果文档没有明确轮询请求如何携带 requestKey,先标记接口契约待确认;不要猜测参数名,也不要伪造“已完成”。
getZTBProjectDetail 负责 HTML 原文、标题、展示字段和正文附件概要。getZTBStructreDetail 负责项目编号、标段、预算、中标金额、时间、地点、主体联系人和投标企业等官方业务字段。getZTBProjectFiles 负责下载 URL、后缀、大小和处理状态。getCollectUrl 负责原始来源跳转;结构化详情已有 collectUrl 时优先使用它。collectUrl 缺失时才补充采集源网址。使用以下逻辑模型组织结果:
BidProjectView
├── identity: projectId, publishTime
├── summary: 搜索列表摘要
├── content: 正文详情和 HTML
├── structured: 官方结构化详情
├── attachments: 可下载附件
└── source: collectUrl, sbkjBidUrl
当项目 ID、发布时间、详情数据或附件数据缺失时,保留缺失状态并说明原因,不用其他字段猜补。
costtime/costTime、startdate/startDate。data 可能是数组、对象或分页对象,按具体接口解析。null、空数组、无附件和接口失败要区分处理。key,日志不得打印完整 Key。当用户要求直接运行接口联调脚本、验证接口参数或生成普通搜索请求时,使用 scripts/ 下的 Python 3 脚本,不要把脚本逻辑复制到项目 Controller 中。
argparse 提供命令行参数,使用 json 处理请求和响应,使用 urllib 完成基础 HTTP 调用。BAOBIAO_ZTB_API_KEY;禁止写入脚本、示例、日志和错误信息。main() 和 if __name__ == "__main__",通过明确退出码表示成功、参数错误、接口错误和业务失败。references/api-reference.mdreferences/natural-language-search-workflow.mdreferences/project-detail-workflow.mdreferences/contract-workflow.mdreferences/company-workflow.mdreferences/planned-project-workflow.mdreferences/ai-workflow.mdreferences/enums-and-response-rules.mdreferences/brand-and-promotion.mdscripts/invoke_baobiao_api.py:从环境变量读取 API Key,安全调用指定保标招标 POST 接口。scripts/compile_search_condition.py:将 AI 重写接口返回的 JSON 转换为普通搜索接口请求 JSON;支持从文件或标准输入读取。调用脚本前先配置 BAOBIAO_ZTB_API_KEY。脚本不会把 Key 写入输出或错误信息。AI 重写轮询接口的具体请求格式在原始文档中未完全明确,因此脚本只负责提交和条件编译,不擅自猜测轮询请求参数。