如何通过GitHub Webhook获取项目条目关联的Issue?
如何从GitHub Projects v2条目Webhook负载中获取关联的Issue?
我已经配置了projects_v2_item的Webhook,当更新项目中的条目时会触发请求,但请求负载里只有项目条目本身的信息,没有包含关联的Issue详情。下面是Webhook返回的负载示例:
{ "action": "edited", "projects_v2_item": { "id": 10000001, "node_id": "###", "project_node_id": "###", "content_node_id": "###", "content_type": "Issue", "creator": { "login": "sumedhe", "id": 2020370, "node_id": "###", ... }, "created_at": "2024-10-01T08:29:55Z", "updated_at": "2024-10-01T08:31:44Z", "archived_at": null }, "changes": { "field_value": { "field_node_id": "###", "field_type": "single_select", "field_name": "Status", "project_number": 1, "from": null, "to": { "id": "###", "name": "Todo", "color": "GREEN", "description": "This+item+hasn't+been+started" } } }, "organization": { "login": "selforgmap", "id": 47916970, ... }, "sender": { "login": "sumedhe", "id": 2020370, ... } }
解决方法
GitHub的projects_v2_item Webhook负载确实不会直接返回关联Issue的完整数据,但你可以通过负载里的关键字段,调用GitHub API获取Issue详情:
1. 使用GraphQL API(推荐)
负载中的content_node_id就是关联Issue的Node ID,直接用它查询Issue信息:
query GetIssueByNodeId($nodeId: ID!) { node(id: $nodeId) { ... on Issue { id number title body state createdAt updatedAt repository { name owner { login } } # 按需添加更多需要的字段 } } }
将$nodeId替换为负载里的projects_v2_item.content_node_id,调用GitHub GraphQL端点即可拿到完整的Issue数据。
2. 使用REST API
如果更习惯REST风格,可先通过Node ID获取Issue的仓库和编号信息,再调用Issue详情接口:
- 先查询Node ID对应的Issue基础信息:
curl -H "Authorization: token YOUR_GITHUB_TOKEN" \ https://api.github.com/graphql \ -d '{"query":"query { node(id: \"CONTENT_NODE_ID\") { ... on Issue { number repository { name owner { login } } } } }"}'
- 拿到仓库所有者、仓库名和Issue编号后,调用详情接口:
curl -H "Authorization: token YOUR_GITHUB_TOKEN" \ https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER
注意事项
- 确保你的GitHub Token有足够权限(至少需要
repo范围权限,私有仓库需对应权限); - 可在Webhook处理逻辑中直接集成API调用,同步获取Issue数据;
- 若担心API调用延迟,可缓存已获取的Issue数据,减少重复请求。
内容的提问来源于stack exchange,提问作者sumedhe
相关产品推荐
相关产品推荐

