Use Webhook to send notification to Telegram messenger

1. 创建 Telegram Bot

首先,你需要创建一个 Telegram Bot 并获取 API Token:

  1. 打开 Telegram,搜索“BotFather”。

  2. 向 BotFather 发送 /newbot 命令。

  3. 按照提示输入机器人名称和用户名。

  4. 创建完成后,BotFather 会给你一个 API Token。请将其保存。

2. 获取你的 Telegram Chat ID

要将消息发送到特定的 Telegram 聊天,你需要知道聊天 ID。可以通过以下步骤获取:

  1. 向你的 Telegram Bot 发送任意消息(比如 “Hello”)。

  2. 打开浏览器,访问以下 URL:

https://api.telegram.org/bot<YourBotToken>/getUpdates
  1. 替换 <YourBotToken> 为你在步骤 1 中获得的 API Token。

  2. 你将看到返回的数据中包含一个 chat 对象,其中 id 字段就是你的 Chat ID。

3. 创建 Cloudflare Worker

接下来,创建一个 Cloudflare Worker 来接收 Cloudflare 的通知并转发到 Telegram。

  1. 登录 Cloudflare Dashboard。

  2. 选择你要设置 Worker 的域名。

  3. 进入 Workers 页,点击 Create a Worker

  4. 在 Worker 编辑器中,编写以下代码来转发通知到 Telegram:

```javascript
// Telegram Bot Token 和 Chat ID
const TELEGRAM_TOKEN = '<YourBotToken>';
const CHAT_ID = '<YourChatID>';

// 发送消息到 Telegram
async function sendMessageToTelegram(message) {
  const url = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`;

  const payload = {
    chat_id: CHAT_ID,
    text: message,
    parse_mode: "Markdown"  // 使用 Markdown 格式,也可以改为HTML
  };

  const response = await fetch(url, {
    method: 'POST',
    body: JSON.stringify(payload),
    headers: {
      'Content-Type': 'application/json',
    },
  });

  return response;
}

// Cloudflare Worker 主函数
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  if (request.method === 'POST') {
    try {
      // 获取 Cloudflare 的 Webhook 通知数据
      const data = await request.json();
      
      // 自定义消息格式,你可以根据需要解析 Cloudflare 的通知内容
      const message = `Cloudflare Notification:\n${JSON.stringify(data, null, 2)}`;

      // 将通知转发到 Telegram
      await sendMessageToTelegram(message);

      return new Response('Notification sent to Telegram', { status: 200 });
    } catch (err) {
      return new Response('Error processing notification', { status: 500 });
    }
  }

  // 如果不是 POST 请求,返回 405 方法不允许
  return new Response('Method Not Allowed', { status: 405 });
}

注意:

  • 替换 '<YourBotToken>''<YourChatID>' 为你自己的 Telegram Bot Token 和 Chat ID。

  • body 中的内容是从 Cloudflare 收到的 Webhook 数据。你可以根据实际的通知格式来调整消息内容。

4. 设置 Cloudflare Webhook

现在,你需要配置 Cloudflare 将 Webhook 发送到你的 Worker:

  1. 进入 Cloudflare 的 Notifications 页面(Cloudflare Dashboard > Alerts & Notifications)。

  2. Webhook URL 字段中输入你创建的 Worker URL。Worker URL 格式如下:

    phpCopy codehttps://<your-worker-subdomain>.<your-worker-domain>.workers.dev

    你可以从 Worker 页面获得这个 URL。

  3. 配置 Webhook 通知类型,比如选择 “Security Events” 或 “Traffic Alerts” 等,根据需要设置。

5. 测试和验证

配置完成后,Cloudflare 会将通知发送到你设置的 Worker,Worker 会将通知转发到 Telegram。你可以通过触发 Cloudflare 的通知事件来测试是否能够成功收到消息。

额外注意事项

  • 如果你想在 Telegram 中显示更友好的格式,可以使用 Telegram 的 Markdown 或 HTML 格式化功能。例如,使用 parse_mode: "Markdown" 来格式化文本。

  • 你可以在 Worker 中加入额外的逻辑,例如过滤特定类型的通知、格式化消息内容等。

通过这种方式,你可以方便地将 Cloudflare 通知通过 Webhook 转发到 Telegram。

Last updated