fix: escape telegram alert body with HTML parse mode
Some checks failed
Deploy to 110 WOOO Server / deploy (push) Failing after 8s

This commit is contained in:
OG T
2026-06-07 19:29:25 +08:00
parent 69cb463cbf
commit b1c9418f40

View File

@@ -121,27 +121,25 @@ async function resolveTelegramChatId(): Promise<string | undefined> {
return resolveTelegramFallbackChatId();
}
function escapeMarkdown(value: unknown) {
function escapeHtml(value: unknown) {
if (value === null || value === undefined) return "";
return String(value)
.replace(/([_*[\]()~`>#+=|{}.!-])/g, "\\$1")
.replace(/\n/g, "\\n");
return String(value).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
}
function buildTelegramMessage(event: TrafficAlertEvent) {
return (
`*VibeWork 流量告警*` +
`\n- 平台: \`agent-bounty-protocol\`` +
`\n- 等級: \`${event.level}\`` +
`\n- 行為: \`${event.action}\`` +
`\n- 通道: \`${event.surface}\`` +
`\n- Actor: \`${event.actorType}/${event.actorId}\`` +
`\n- Source IP: \`${event.sourceIp || "n/a"}\`` +
`\n- User-Agent: \`${event.userAgent || "n/a"}\`` +
`\n- 回應: \`${typeof event.metadata?.response_status === "number" ? event.metadata.response_status : "n/a"}\`` +
`\n- 任務: \`${event.taskId || "n/a"}\`` +
`\n- request_id: \`${typeof event.metadata?.request_id === "string" ? event.metadata.request_id : "n/a"}\`` +
`\n- 訊息: ${escapeMarkdown(event.message)}`
`<b>VibeWork 流量告警</b>` +
`\n- 平台: <code>agent-bounty-protocol</code>` +
`\n- 等級: <code>${escapeHtml(event.level)}</code>` +
`\n- 行為: <code>${escapeHtml(event.action)}</code>` +
`\n- 通道: <code>${escapeHtml(event.surface)}</code>` +
`\n- Actor: <code>${escapeHtml(`${event.actorType}/${event.actorId}`)}</code>` +
`\n- Source IP: <code>${escapeHtml(event.sourceIp || "n/a")}</code>` +
`\n- User-Agent: <code>${escapeHtml(event.userAgent || "n/a")}</code>` +
`\n- 回應: <code>${escapeHtml(typeof event.metadata?.response_status === "number" ? event.metadata.response_status : "n/a")}</code>` +
`\n- 任務: <code>${escapeHtml(event.taskId || "n/a")}</code>` +
`\n- request_id: <code>${escapeHtml(typeof event.metadata?.request_id === "string" ? event.metadata.request_id : "n/a")}</code>` +
`\n- 訊息: <code>${escapeHtml(event.message)}</code>`
);
}
@@ -277,7 +275,7 @@ export async function sendTrafficAlert(event: TrafficAlertEvent): Promise<void>
body: JSON.stringify({
chat_id: resolvedTelegramChatId,
text: buildTelegramMessage(event),
parse_mode: "MarkdownV2",
parse_mode: "HTML",
}),
},
},