guanghulab/scripts/send-feishu-alert.js
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

89 lines
2.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// scripts/send-feishu-alert.js
// 铸渊 · 飞书告警通知脚本(供 GitHub Actions 工作流调用)
//
// 用法: node scripts/send-feishu-alert.js "工作流名称" "告警内容"
//
// 环境变量:
// FEISHU_APP_ID 飞书应用 App ID
// FEISHU_APP_SECRET 飞书应用 App Secret
// ALERT_CHAT_ID 飞书群 chat_id
'use strict';
const https = require('https');
function httpsPost(url, body) {
return new Promise((resolve, reject) => {
const payload = JSON.stringify(body);
const u = new URL(url);
const req = https.request({
hostname: u.hostname,
port: 443,
path: u.pathname + u.search,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(payload),
},
}, res => {
let d = '';
res.on('data', c => d += c);
res.on('end', () => resolve(d));
});
req.on('error', reject);
req.write(payload);
req.end();
});
}
async function main() {
const appId = process.env.FEISHU_APP_ID;
const appSecret = process.env.FEISHU_APP_SECRET;
const chatId = process.env.ALERT_CHAT_ID;
const workflow = process.argv[2] || 'unknown';
const detail = process.argv[3] || '';
if (!chatId) {
console.log('⚠️ 未配置 ALERT_CHAT_ID跳过告警');
process.exit(0);
}
if (!appId || !appSecret) {
console.log('⚠️ 未配置飞书 App 凭据,跳过告警');
process.exit(0);
}
// 获取飞书 token
const tokenRes = JSON.parse(await httpsPost(
'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal',
{ app_id: appId, app_secret: appSecret }
));
const token = tokenRes.tenant_access_token;
if (!token) {
console.error('❌ 获取飞书 token 失败');
process.exit(1);
}
// 发送消息
const text = '🔴 GitHub Action 失败告警\n\n' +
'工作流: ' + workflow + '\n' +
'时间: ' + new Date().toISOString() + '\n' +
(detail ? '详情: ' + detail + '\n' : '') +
'请检查 GitHub Actions 日志。';
await httpsPost(
'https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id',
{
receive_id: chatId,
msg_type: 'text',
content: JSON.stringify({ text }),
}
);
console.log('✅ 告警已发送到飞书群');
}
main().catch(e => {
console.error('❌ 告警发送失败:', e.message);
process.exit(1);
});