当前位置: 首页 > news >正文

手把手教你实现:当 GitHub 收到 Star 后,通过企微外部群自动通知

QiWe开放平台 · 个人名片

API驱动企微自动化,让开发更高效

核心能力:为开发者提供标准化接口、快速集成工具,助力产品高效拓展功能场景

官方站点:https://www.qiweapi.com

团队定位:专注企微API生态的技术服务团队

对接通道:搜「QiWe 开放平台」联系客服

核心理念:合规赋能,让企微开发更简单、更高效


GitHub Webhook 会在特定事件发生时向你的服务器发送POST请求,我们的目标是解析它,并调用企微add_msg_template接口。

1. 业务流程设计

  1. GitHub 发起 Webhook:包含仓库名、操作者、事件类型。

  2. Go 接口验证签名:确保请求真的来自 GitHub,防止恶意攻击。

  3. 构造卡片消息:根据不同事件(如 Star 或 New Issue)渲染不同的文案。

  4. 异步推送企微:避免阻塞 GitHub 的回调连接。

2. 代码实现:Go 语言版本

我们使用Gin框架来快速搭建服务。

package main import ( "crypto/hmac" "crypto/sha256" "encoding/hex" "fmt" "io" "net/http" "github.com/gin-gonic/gin" ) const ( githubSecret = "your_github_webhook_secret" qwToken = "your_qywx_access_token" ) func main() { r := gin.Default() r.POST("/github/webhook", func(c *gin.Context) { // 1. 验证 GitHub 签名 body, _ := io.ReadAll(c.Request.Body) signature := c.GetHeader("X-Hub-Signature-256") if !verifySignature(githubSecret, signature, body) { c.JSON(403, gin.H{"error": "Invalid signature"}) return } // 2. 获取事件类型 event := c.GetHeader("X-GitHub-Event") // 3. 异步处理消息发送,不影响 GitHub 的回调响应 go processGithubEvent(event, body) c.JSON(200, gin.H{"status": "accepted"}) }) r.Run(":8080") } // verifySignature 验证签名安全性 func verifySignature(secret, signature string, body []byte) bool { h := hmac.New(sha256.New, []byte(secret)) h.Write(body) expected := "sha256=" + hex.EncodeToString(h.Sum(nil)) return hmac.Equal([]byte(expected), []byte(signature)) } func processGithubEvent(event string, body []byte) { // 解析 JSON 并调用之前写的 SendExternalGroupMsg 接口 // 如果是 "watch" (Star) 事件 -> 发送:🌟 新增一个 Star! // 如果是 "issues" 事件 -> 发送:🛠 有人提了新 Issue。 fmt.Printf("处理 GitHub 事件: %s\n", event) }

3. 如何配置 GitHub 端?

  1. 进入你的 GitHub 仓库设置 ->Settings->Webhooks->Add webhook

  2. Payload URL: 填写你的服务器地址(如http://your-ip:8080/github/webhook)。

  3. Content type: 选择application/json

  4. Secret: 填写你在代码中定义的githubSecret

  5. Which events: 选择Let me select individual events,勾选StarsIssues

4. 关键避坑点

  • 公网地址问题:GitHub 无法访问你的localhost。开发调试时,可以使用ngrokcrawlee等工具做内网穿透。

  • Star 事件的特殊性:在 Webhook 中,Star 事件对应的名称是watch,而不是star

  • 内容去重:GitHub 有时会因为网络问题重发 Webhook。建议在 Go 中对X-GitHub-Delivery(唯一请求 ID)做 1 分钟内的去重处理。

http://www.jsqmd.com/news/346271/

相关文章:

  • 2026广州SAT暑假封闭营推荐哪家?哪家培训机构能冲刺高分 - 博客万
  • 数据不撒谎,但你用对工具了吗?虎贲等考AI让数据分析从“拦路虎”变“加分项”
  • 铜川市英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜单 - 老周说教育
  • Cell | 填补空白!首张脑细胞类型特异性溶酶体蛋白图谱揭示神经疾病新机制
  • 阅读
  • 科研绘图 “破壁” 指南!虎贲等考 AI:数据一键可视化,期刊级图表 10 分钟速成
  • 当你发现组件未正确卸载时,该怎么办?
  • 双向守护 物业健康一体机守护业主与员工安心
  • 2026年果酱生产厂家权威推荐:草莓/蓝莓/黄桃/树莓/桑葚/无花果/苹果果酱源头厂家精选 - 品牌推荐官
  • 内核子系统、SoC控制器驱动、驱动与内核的关系
  • 使用realloc函数来调整栈帧使one_gadget生效
  • 如何处理 React 中事件处理程序的绑定问题
  • Linux内核全景解析:核心组成与子系统架构深度指南
  • 如何解决React中props未更新的问题
  • 2026直达大巴车推荐:吴江区宜帆顺票务代理服务部,红河/曲靖/威信/毕节等线路全覆盖 - 品牌推荐官
  • 新手必看京东e卡提现到支付宝的四种精心挑选高效方式 - 淘淘收小程序
  • 别再为一个气体终端写三套对接代码了
  • 嵌入式C编程中volatile 的使用规则
  • 2026年果酱生产厂家实力推荐:山东晶荣食品,无花果/苹果/桑葚/蓝莓等全品类果酱专业供应 - 品牌推荐官
  • 2026中国五大摄影培训学校排行榜 零基础到职业IP运营、短视频培训、视频剪辑培训进阶的优质之选 - 深度智识库
  • 收藏!AI入行避坑指南:招聘乱象背后,小白/程序员如何少走弯路
  • 2026建材市场管材深度盘点:PE/HDPE/复合/PVC/波纹管五大实力品牌解析 - 深度智识库
  • vscode git 提交关闭Husky 或者 eslint校验
  • 计算几何-旋转卡壳两种实现方案(兼P1452题解
  • 2026年废纸打包机厂家推荐:江苏旭鹏智能科技液压/自动/全自动/卧式废纸打包机设备全解析 - 品牌推荐官
  • 沃尔玛23与86开头购物卡有和区别,可以回收吗? - 淘淘收小程序
  • 2026年全国道路标识牌厂家哪家专业?聚焦合规适配与区域服务优势 侧重要求落地适配性 - 深度智识库
  • 合肥市英语雅思培训机构推荐|2026权威测评出国雅思辅导机构口碑榜单 - 老周说教育
  • day 22
  • 2026年盘扣脚手架厂家权威推荐:防腐/镀锌/重型/移动/建筑盘扣脚手架源头厂家精选 - 品牌推荐官