giip
SES 商机登记
6分钟阅读

问题管理 API 参考

本文档提供在 GIIP 平台上以编程方式管理问题及错误日志的技术规范。

🔌 前往问题管理功能页 →

📋 概述

问题管理 API 供自动化脚本或 AI 代理查询和处理服务器故障、错误日志及任务状态。主要有两种调用方式。


🔐 认证 (Authentication)

⚠️ 本节为精简版(完整版含逐端点实测矩阵、密钥类型对照表、401 原因分类等,请参见 英文版日文版韩文版,2026-08-20 起为最新,本页尚待完整翻译)。

  • 仅支持请求头x-api-key: <key>(推荐)或 Authorization: Bearer <key>
  • 不支持 JSON 请求体 { "token": "<key>" },也不支持查询字符串 ?token=<key>——服务端代码 (giipfaw/giipIssues/run.ps1giipIssueComments/run.ps1)只读取上述两种请求头,其余方式一律返回 401 {"error":"Auth required"}(已于 2026-08-20 通过源码核查 + 生产环境实测确认,此前版本中关于 Body/Query 可用的说明有误,已删除)。查询字符串传递密钥本身也是安全反模式(会残留在服务器日志/浏览器 历史/代理日志中),已正式弃用
  • 密钥必须处于"启用"状态POST /api/giipIssues 的服务端逻辑(pApiGiipIssuePutbyAK)在登录会话 AK 认证失败时会自动回退到 SK 认证(已于 giip #1265 现场重新验证)。但 SK 是按 giipv3 项目(csn)从 /svclist(服务列表)页面签发的,重新签发/轮换会立即使旧 SK 失效,失效的(旧)SK 调用会返回 401 Invalid session。遇到 401 时,请先到 /svclist 确认当前有效的 SK。

🚀 方式 1: 专用端点 (REST API)

与问题交互最直观的方式。

认证: REST 端点使用 x-api-key 请求头,Content-Type 为 application/json

1. 创建问题 (新建)

  • URL: POST /api/giipIssues
  • 说明: 省略 isn(或传入 0)即执行 INSERT 新建问题;响应会返回新生成的 isn
  • 请求体 (JSON):
{
  "title": "标题 (必填)",
  "content": "正文",
  "status": "PENDING",
  "csn": 47,
  "target_lssn": null,
  "agent_workflow": null
}
  • 成功响应:
{ "isn": 577, "message": "Issue created", "success": true }

2. 添加评论

  • URL: POST /api/giipIssueComments
  • 请求体 (JSON):
{
  "isn": 7890,
  "content": "...",
  "author": "api-tester",
  "issuetype": "comment"
}
  • 成功响应:
{ "success": true }

3. 查询问题列表

  • URL: GET /api/giipIssues
  • 查询参数:
    • status: (可选) 问题状态 (READY, PENDING, DONE 等)
    • isn: (可选) 特定问题的序列号
  • 响应: { "issues": [...] }

4. 更新问题状态

  • URL: POST /api/giipIssuesPUT /api/giipIssues
  • 请求体 (JSON):
{
  "isn": "7890",
  "status": "DONE",
  "comment": "无法重现,已关闭。"
}

🚀 方式 2: 通用 API 包装器 (giipApiSk2)

直接调用 GIIP 存储过程的强大方式,强烈推荐 AI 代理使用。仅用于读取和代理动作(查询列表、获取详情、远程执行),不用于写入(状态变更)。 写入请使用方式 1 的专用 REST 端点。

  • URL: POST /api/giipApiSk2
  • Content-Type: application/x-www-form-urlencoded
  • 字段:
    • token: [Your_SK] — SK 放在这里,绝不写进 textjsondata
    • text: [命令] [参数...]
    • jsondata: (可选) 例如 {}{"isn":7890,"status":"DONE"}

⚠️ 关键警告 — text 中只列存储过程(SP)真正接受的参数,且按顺序排列。 引擎 (run.ps1) 会自动追加认证参数 (@sk) 和 jsondata,因此绝不要text 中列出它们。 一旦多列参数,就会超出 SP 的参数个数,导致错误 has too many arguments specified

常用命令示例

功能SP 参数 (写入 text)text 参数值说明
查询问题列表statusGiipIssueList READY仅获取 READY 状态的问题
获取详情isnGiipIssueGet 7890获取 ISN 7890 的详细信息
远程执行isnGiipIssueDispatch 7890派发 ISN 7890 的处理动作;成功时 data[0].RstVal = 200

🚫 危险 —— Sk2 GiipIssuePut 不可用于写入(状态变更)。 它映射到存储过程 pApiGiipIssuePutbySK(@sk, @isn, @title, @content, @status, @csn),这是一个全量覆盖(full-overwrite)、不做保留合并的 SP。因此 GiipIssuePut 7890 DONE 会把 "DONE" 写入 @title、把 jsondata 写入 @content摧毁原有的标题和正文,却仍返回一个虚假的 RstVal:200(已在实测中破坏 577/578 号问题)。要安全地变更状态,请使用专用 REST 端点 PUT /api/giipIssues {isn, status}(映射到 pApiGiipIssuePutbyAK,采用 ISNULL(@title, title) 保留既有值 —— 这也是 giipv3 前端所用的路径)。


🔍 响应标准

成功时返回 200 OK 及 JSON 数据。两种调用方式的响应结构不同:

giipApiSk2 (SP 包装器) 成功响应 —— 成功标志为 RstVal = 200

{
  "data": [
    { "RstVal": 200, "Proc_MSG": "Dispatched", "isn": 7890 }
  ]
}

该示例代表读取/动作结果:读取类命令在 data 中返回记录,动作类命令返回 RstVal = 200

专用 REST 端点成功响应 —— 响应体中没有 RstVal

{ "isn": 7890, "message": "Issue updated", "success": true }

说明: SP 的成功代码是 RstVal = 200(不是 0);失败时返回 400 / 401 / 403 / 404。专用端点则以 success 布尔值代替 RstVal


⚠️ 重要提示

  • 500 Internal Server Error: 若出现 "The term 'if' is not recognized",为服务器端 PowerShell 兼容性问题。请确认已应用最新补丁 (v1.0.1+)。
  • CSN 限制: 要访问属于特定项目组的问题,API 密钥必须具备相应项目的权限。

故障排除

症状原因解决
认证失败 / 401缺少或错误的 Secret Keyx-api-key 请求头或 token 参数中填入有效的 SK
用 SK 调用 POST /api/giipIssues 返回 401 Invalid session服务端已正确支持 SK 认证(已现场重新验证,giip #1265)。真正原因通常是该 SK 已失效(被重新签发/轮换)、拼写错误,或是其他 csn 的 SK/svclist(服务列表)确认目标 csn 当前有效的 SK 后重试;也可临时用登录会话 AK 代替
命令被忽略或返回空结果text 参数格式错误(命令与参数未分隔)遵循 [命令] [参数] 格式,如 GiipIssueList READY
... has too many arguments specifiedtext 中列出的参数过多只列出该 SP 真正接受的参数;@skjsondata 会自动追加,切勿手动列出
状态变更后标题/正文被破坏为 DONE/{}用 Sk2 GiipIssuePut(全量覆盖 SP)改状态改用专用 REST PUT /api/giipIssues {isn, status}(方式 1);Sk2 GiipIssuePut 不用于写入
响应 data[0].RstVal 不是 200SP 出错或 isn 不正确检查 Proc_MSG;成功代码是 200 而非 0
500 Internal Server Error ("The term 'if' is not recognized")服务器端 PowerShell 兼容性问题确认已应用最新补丁 (v1.0.1+)
项目组的问题未返回API 密钥缺少该 CSN/项目的权限为密钥授予相应项目的权限

版本: 1.4 最后更新: 2026-08-20 源文件: giipv3/public/help/giip-issue-api.zh-CN.md

变更记录 (v1.4, 2026-08-20, giip #1265): 针对"用 SK 调用 POST /api/giipIssues 返回 401 Invalid session"的报告做了现场验证。生产环境 Azure SQL 上部署的 pApiGiipIssuePutbyAK 定义与仓库源码完全一致, SK 回退认证(lwGetUSNbyat 失败后回退到 lwGetUSNbysk)已经正确部署(不是部署缺口)。实测复现:用启用状态 的 SK 调用返回 200 Issue created;用已失效(被轮换/重新签发)的旧 SK 调用则返回 401 Invalid session (2026-08-20 直接对生产环境 giipfaw API 两种情况分别验证)。因此这不是代码缺陷,而是文档没有说明"哪个 SK 才有效"。已在认证章节和故障排除表中补充 SK 启用状态要求及 /svclist 复核路径。

变更记录 (v1.3): 与生产环境实时 API 核对校准 (参考任务 20260708183049)。① 新增 Sk2 写入路径危险警告 —— GiipIssuePut 是全量覆盖(full-overwrite)SP,会摧毁标题与正文(经破坏并恢复 577/578 号问题验证);写入应走 REST 端点,Sk2 仅用于读取/动作;② 成功代码为 RstVal = 200 而非 0;③ 新增问题创建流程,并明确安全的状态变更走 REST PUT /api/giipIssues {isn, status}


相关文档: