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
相关产品推荐
相关产品推荐

