MỚI: Helius mua lại Light Protocol
Tạo bot Telegram cho Solana với chưa đến 100 dòng mã
Blog/Phát triển

Tạo bot Telegram cho Solana với chưa đến 100 dòng mã

Kỹ sư tích hợpHet Dagli trên XHet Dagli trên LinkedIn
Đọc trong 4 phút

Bạn muốn cập nhật các sự kiện Solana theo thời gian thực? Hướng dẫn này sẽ chỉ cho bạn cách tạo một bot Telegram có thể theo dõi hoạt động on-chain. Chúng ta sẽ dùng công cụ theo dõi giao dịch NFT làm ví dụ, nhưng mẫu được xây dựng có thể dễ dàng điều chỉnh cho các trường hợp sử dụng khác.

Bot mẫu của chúng ta sẽ có giao diện như sau:

Mẫu này kết hợp webhook Helius để nhận dữ liệu Solana theo thời gian thực với Cloudflare Workers để lưu trữ serverless. Dù bạn đang theo dõi giao dịch NFT, giám sát các giao thức DeFi hay quan sát những ví cụ thể, thiết lập này đều cung cấp một nền tảng vững chắc.

Thiết lập dự án

Hãy thiết lập và khởi chạy dự án:

1. Sao chép kho lưu trữ

Mã
git clone https://github.com/helius-labs/cloudfare-telegram-template.git

cd cloudfare-telegram-template

2. Cài đặt các phần phụ thuộc

Mã
npm install

3. Cấu hình biến môi trường

Mở wrangler.toml và điền các khóa sau:

TELEGRAM_BOT_TOKEN

  1. Mở Telegram và tìm @BotFather.
  2. Bắt đầu trò chuyện với BotFather và gửi lệnh /newbot. 
  3. Làm theo hướng dẫn để chọn tên và tên người dùng cho bot. 
  4. Sau khi bot được tạo, BotFather sẽ cung cấp cho bạn một token. Đây là TELEGRAM_BOT_TOKEN của bạn. 

TELEGRAM_CHAT_ID

  1. Tạo một kênh và thêm bot của bạn làm quản trị viên.
  2. Gửi một tin nhắn đến kênh.
  3. Truy cập: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  4. Tìm trường "chat":{"id": trong phản hồi. Đây là TELEGRAM_CHAT_ID của bạn.
  5. Xem video này để được hướng dẫn từng bước:

HELIUS_API_KEY Khóa API Helius của bạn (lấy tại Helius)

AUTH_TOKEN Mở bash và tạo một AUTH_TOKEN duy nhất:

Mã
openssl rand -base64 32

4. Triển khai lên Cloudflare

Mã
npm run deploy

Sau khi chạy lệnh này, bạn sẽ thấy URL triển khai trong đầu ra của bảng điều khiển. Hãy lưu lại URL này vì bạn sẽ cần dùng ở bước tiếp theo.

5. Tạo webhook

Dùng URL triển khai ở bước trước để tạo webhook:

Mã
curl -X POST https://your-worker-url.workers.dev/create-webhook

Bạn sẽ nhận được phản hồi thành công sau khi chạy lệnh này.

Bạn có thể xem webhook mới vừa thiết lập trên bảng điều khiển Helius.

6. Chỉnh sửa webhook

Sau khi tạo webhook, bạn có thể tùy chỉnh thêm trong bảng điều khiển Helius: 

  1. Truy cập mục webhook trong bảng điều khiển
  2. Webhook mới tạo sẽ xuất hiện trong danh sách. 
  3. Nhấp vào webhook để chỉnh sửa các thiết lập.
  4. Tại đây, bạn có thể thay đổi nhiều tham số như:
    • Loại giao dịch muốn theo dõi
    • Địa chỉ ví cụ thể cần giám sát
    • Mạng (mainnet, devnet)

Phân tích mã

Trước tiên, hãy xem các lệnh import và định nghĩa kiểu:

Mã
import { Hono } from 'hono';

type Env = {
  HELIUS_API_KEY: string;
  TELEGRAM_BOT_TOKEN: string;
  TELEGRAM_CHAT_ID: string;
  AUTH_TOKEN: string;
};

‍Chúng ta sử dụng Hono, một framework web nhẹ dành cho Cloudflare Workers. Kiểu Env xác định các biến môi trường cho phần tích hợp Helius và Telegram.

Tiếp theo, chúng ta thiết lập ứng dụng Hono:‍

Mã
const app = new Hono<{ Bindings: Env }>();

app.get('/', (c) => c.text('Solana Action Bot is running!'));

Đoạn mã này tạo ứng dụng và thiết lập một điểm cuối kiểm tra tình trạng đơn giản.

Bây giờ, hãy tạo webhook:

Mã
app.post('/create-webhook', async (c) => {
  const webhookURL = `${new URL(c.req.url).origin}/webhook`;
  console.log('Setting up webhook with URL:', webhookURL);

  const response = await fetch(
    `https://api.helius.xyz/v0/webhooks?api-key=${c.env.HELIUS_API_KEY}`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        webhookURL: webhookURL,
        transactionTypes: ["NFT_SALE"],
        accountAddresses: ["M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K"], // Magic Eden v2 program
        webhookType: "enhanced",
        authHeader: c.env.AUTH_TOKEN
      }),
    }
  );
  const data = await response.json();
  console.log('Helius webhook setup response:', data);
  return c.json({ success: true, webhook: data, webhookURL: webhookURL });
});

Điểm cuối này thiết lập webhook Helius. Trong ví dụ này, chúng ta theo dõi các giao dịch NFT từ chương trình Magic Eden v2, nhưng bạn có thể thay đổi transactionTypes và accountAddresses cho phù hợp với nhu cầu.‍

Sau đây là cách gửi tin nhắn đến Telegram:

Mã
async function sendTelegramMessage(message: string, env: Env) {
  const url = `https://api.telegram.org/bot${env.TELEGRAM_BOT_TOKEN}/sendMessage`;
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      chat_id: env.TELEGRAM_CHAT_ID,
      text: message,
      parse_mode: 'Markdown',
    }),
  });
  return response.json();
}

Hàm này định dạng tin nhắn và gửi đến cuộc trò chuyện Telegram.

Cuối cùng, hãy xử lý dữ liệu webhook gửi đến:

Mã
app.post('/webhook', async (c) => {

  const authToken = c.req.header('Authorization');
  if (authToken !== c.env.AUTH_TOKEN) {
    return c.text('Unauthorized', 401);
  }

  let data;
  try {
    data = await c.req.json();
    console.log('Received webhook data:', JSON.stringify(data, null, 2));
  } catch (error) {
    console.error('Error parsing webhook data:', error);
    return c.text('Error processing webhook', 400);
  }

  if (!Array.isArray(data) || data.length === 0) {
    console.log('No transactions in webhook data');
    return c.text('No transactions to process', 200);
  }

  for (const transaction of data) {
    if (transaction.type === 'NFT_SALE') {
      const { amount, buyer, seller, signature, nfts } = transaction.events.nft;
      const message = `🎉 *NFT Sale*\n\n` +
        `*Price*: ${amount / 1e9} SOL\n` +
        `*Buyer*: \`${buyer}\`\n` +
        `*Seller*: \`${seller}\`\n` +
        `*Signature*: [View on Solana Explorer](https://explorer.solana.com/tx/${signature})`;

      try {
        const result = await sendTelegramMessage(message, c.env);
        console.log('Telegram message sent:', result);
      } catch (error) {
        console.error('Error sending Telegram message:', error);
      }
    }
  }

  return c.text('Webhook processed');
});

‍Đây là nơi chúng ta xử lý dữ liệu từ Helius và gửi tin nhắn đã định dạng đến Telegram. Tùy theo trường hợp sử dụng, bạn có thể tùy chỉnh phần này để xử lý các loại giao dịch khác nhau hoặc trích xuất thông tin khác.

Các tùy chọn tùy chỉnh

Mặc dù ví dụ tập trung vào giao dịch NFT, bạn có thể dễ dàng điều chỉnh mẫu này cho nhiều trường hợp sử dụng:

  1. Sửa transactionTypes khi tạo webhook để theo dõi các sự kiện khác
  2. Thay đổi accountAddresses để giám sát các chương trình hoặc ví cụ thể
  3. Điều chỉnh định dạng tin nhắn trong điểm cuối /webhook cho phù hợp với nhu cầu dữ liệu
  4. Triển khai thêm logic để lọc hoặc xử lý dữ liệu gửi đến‍

Khám phá tài liệu webhook Helius để tìm hiểu đầy đủ các loại dữ liệu và sự kiện có thể theo dõi. Tuy nhiên, đừng chỉ giới hạn ở những sự kiện được xác định rõ ràng! Webhook Helius cực kỳ linh hoạt và có thể theo dõi nhiều loại hoạt động on-chain, kể cả những hoạt động chưa được phân tích trực tiếp hoặc đề cập trong tài liệu.

Sau đây là một số ví dụ về sự kiện bạn có thể theo dõi:

  • Hoạt động chuyển token của các SPL token cụ thể
  • Các lần triển khai chương trình mới
  • Hoạt động tạo pool Raydium hoặc bổ sung thanh khoản
  • Hoạt động tạo đề xuất quản trị hoặc bỏ phiếu
  • Các đợt ra mắt candy machine của Metaplex
  • Hoạt động tạo thị trường Serum

Bằng cách tận dụng mẫu này, bạn có thể tạo bot Telegram cho nhiều tác vụ giám sát Solana, từ sự kiện của giao thức DeFi đến theo dõi hoạt động ví và hơn thế nữa.

Nếu đã đọc đến đây, cảm ơn bạn! Chúng tôi hy vọng hướng dẫn này đã giúp bạn bắt đầu tạo bot Telegram cho Solana của riêng mình. Hãy đăng ký nhận bản tin để không bỏ lỡ bất kỳ thông tin cập nhật nào về những điểm mới trên Solana. Sẵn sàng tìm hiểu sâu hơn? Khám phá các bài viết mới nhất trên blog Helius và tiếp tục hành trình Solana ngay hôm nay.

Tài nguyên bổ sung

  1. Tài liệu Helius
  2. Tài liệu Cloudflare Workers
  3. API bot Telegram
  4. Tài liệu Hono

Đăng ký nhận tin từ Helius

Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài

Hình ảnh phóng to