certd/packages/ui/certd-server/src/plugins/plugin-notification/telegram/index.ts

52 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import { BaseNotification, IsNotification, NotificationBody, NotificationInput } from '@certd/pipeline';
@IsNotification({
name: 'telegram',
title: 'Telegram通知',
desc: 'Telegram Bot推送通知',
})
export class TelegramNotification extends BaseNotification {
@NotificationInput({
title: 'Bot Token',
component: {
placeholder: '123456789:ABCdefGhijklmnopqrstUVWXyz',
},
helper: '[token获取](https://core.telegram.org/bots/features#botfather)',
required: true,
})
botToken = '';
@NotificationInput({
title: '聊天ID',
component: {
placeholder: '聊天ID例如 123456789 或 @channelusername',
},
helper: '用户ID(纯数字)或频道名称(@xxxx)',
required: true,
})
chatId = '';
async send(body: NotificationBody) {
if (!this.botToken || !this.chatId) {
throw new Error('Bot Token 和聊天ID不能为空');
}
// 构建消息内容
const messageContent = `*${body.title}*\n\n${body.content}\n[查看详情](${body.url})`;
// Telegram API URL
const url = `https://api.telegram.org/bot${this.botToken}/sendMessage`;
// 发送 HTTP 请求
await this.http.request({
url: url,
method: 'POST',
data: {
chat_id: this.chatId,
text: messageContent,
parse_mode: 'MarkdownV2', // 或使用 'HTML' 取决于需要的格式
},
});
}
}