You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Project v2 无法与Discord Webhook配合使用的问题

解决GitHub Project V2/Items V2事件无法推送到Discord的问题

问题核心是Discord原生Webhook不兼容GitHub Project V2系列事件的负载格式,导致GitHub返回204(请求成功)但Discord无法解析并展示通知。以下是无需第三方服务的修复方案,用GitHub Actions做中间格式转换:

修复步骤

1. 创建GitHub Action工作流文件

在你的GitHub仓库中新建路径 .github/workflows/discord-project-notifications.yml,写入以下内容:

name: Discord Project V2 Notifications
on:
  project_v2:
    types: [created, updated, deleted]
  project_v2_item:
    types: [created, updated, deleted, archived, restored]

jobs:
  send-notification:
    runs-on: ubuntu-latest
    steps:
      - name: Parse and send Discord notification
        uses: actions/github-script@v6
        with:
          script: |
            const eventName = context.eventName;
            const eventPayload = context.payload;
            const actor = eventPayload.sender.login;
            
            // 构造Discord消息内容
            let messageContent = '';
            const embed = {
              color: 0x24292f,
              author: {
                name: `${actor}`,
                icon_url: eventPayload.sender.avatar_url
              },
              fields: [],
              timestamp: new Date().toISOString()
            };
            
            if (eventName === 'project_v2') {
              const project = eventPayload.project;
              const action = eventPayload.action;
              messageContent = `📋 **Project V2 ${action.toUpperCase()}**`;
              embed.fields.push(
                { name: "Project Name", value: `[${project.name}](${project.html_url})`, inline: true },
                { name: "Action", value: action.toUpperCase(), inline: true }
              );
            } else if (eventName === 'project_v2_item') {
              const item = eventPayload.project_card;
              const action = eventPayload.action;
              const project = eventPayload.project;
              messageContent = `📝 **Project Item V2 ${action.toUpperCase()}**`;
              embed.fields.push(
                { name: "Item", value: item.note ? `\`${item.note}\`` : "Unnamed Item", inline: true },
                { name: "Project", value: `[${project.name}](${project.html_url})`, inline: true },
                { name: "Action", value: action.toUpperCase(), inline: true }
              );
            }
            
            // 发送到Discord Webhook
            const response = await fetch(process.env.DISCORD_WEBHOOK_URL, {
              method: 'POST',
              headers: { 'Content-Type': 'application/json' },
              body: JSON.stringify({ content: messageContent, embeds: [embed] })
            });
            
            if (!response.ok) {
              console.error(`推送失败: ${response.statusText}`);
              throw new Error(`HTTP错误: ${response.status}`);
            }
        env:
          DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_PROJECT_WEBHOOK_URL }}

2. 配置Discord Webhook密钥

  • 打开GitHub仓库的 Settings > Secrets and variables > Actions
  • 点击 New repository secret,名称填 DISCORD_PROJECT_WEBHOOK_URL,值填你的Discord频道Webhook地址(从Discord频道设置的「集成」>「Webhooks」获取)

3. 测试验证

提交工作流文件到仓库后,执行一次Project V2相关操作(比如创建项目、添加项目项),检查Discord频道是否收到格式化后的通知。

自定义说明

  • 可以调整embed的color值(十六进制颜色码),或者添加更多字段(比如项目描述、项的状态),从eventPayload中提取对应数据即可
  • 如果需要覆盖更多Project V2事件类型,补充on字段下的types列表即可

内容的提问来源于stack exchange,提问作者Olti Roka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:47:37