fix: escape telegram alert body with HTML parse mode
Some checks failed
Deploy to 110 WOOO Server / deploy (push) Failing after 8s
Some checks failed
Deploy to 110 WOOO Server / deploy (push) Failing after 8s
This commit is contained in:
@@ -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, "&").replace(/</g, "<").replace(/>/g, ">");
|
||||
}
|
||||
|
||||
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",
|
||||
}),
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user