НОВОЕ: Helius приобретает Light Protocol
Создайте Telegram-бота для Solana менее чем в 100 строках кода
Блог/Разработка

Создайте Telegram-бота для Solana менее чем в 100 строках кода

Инженер по интеграциямHet Dagli в XHet Dagli в LinkedIn
Чтение: 4 мин

Хотите отслеживать события Solana в реальном времени? В этом руководстве мы покажем, как создать Telegram-бота для мониторинга ончейн-активности. В качестве примера мы используем трекер продаж NFT, но создаваемый шаблон легко адаптировать к другим сценариям.

Вот как будет выглядеть наш пример бота:

Этот шаблон объединяет вебхуки Helius для получения данных Solana в реальном времени и Cloudflare Workers для бессерверного хостинга. Такое решение станет надежной основой для отслеживания продаж NFT, мониторинга протоколов DeFi или наблюдения за определенными кошельками.

Настройка проекта

Подготовим проект к запуску:

1. Клонируйте репозиторий

Код
git clone https://github.com/helius-labs/cloudfare-telegram-template.git

cd cloudfare-telegram-template

2. Установите зависимости

Код
npm install

3. Настройте переменные окружения

Откройте wrangler.toml и заполните следующие ключи:

TELEGRAM_BOT_TOKEN

  1. Откройте Telegram и найдите @BotFather.
  2. Начните чат с BotFather и отправьте команду /newbot. 
  3. Следуйте инструкциям, чтобы выбрать имя и имя пользователя для бота. 
  4. После создания BotFather выдаст вам токен. Это ваш TELEGRAM_BOT_TOKEN. 

TELEGRAM_CHAT_ID

  1. Создайте канал и добавьте бота в качестве администратора.
  2. Отправьте сообщение в канал.
  3. Перейдите по адресу: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  4. Найдите в ответе поле "chat":{"id":. Это ваш TELEGRAM_CHAT_ID.
  5. Посмотрите пошаговую инструкцию в этом видео:

HELIUS_API_KEY Ваш ключ API Helius (получите его в Helius)

AUTH_TOKEN Откройте bash и сгенерируйте уникальное значение AUTH_TOKEN:

Код
openssl rand -base64 32

4. Разверните проект в Cloudflare

Код
npm run deploy

После выполнения этой команды URL развернутого проекта появится в выводе консоли. Сохраните его: он понадобится на следующем шаге.

5. Создайте вебхук

Используйте URL развернутого проекта из предыдущего шага, чтобы создать вебхук:

Код
curl -X POST https://your-worker-url.workers.dev/create-webhook

После выполнения этой команды вы получите ответ об успешном создании.

Созданный вебхук можно посмотреть в панели управления Helius.

6. Измените вебхук

После создания вебхука вы можете дополнительно настроить его в панели управления Helius: 

  1. Перейдите в раздел вебхуков в панели управления
  2. Новый вебхук должен появиться в списке. 
  3. Нажмите на вебхук, чтобы изменить его настройки.
  4. Здесь можно изменить различные параметры, в том числе:
    • Типы транзакций, которые вы хотите отслеживать
    • Адреса определенных кошельков для мониторинга
    • Сеть (mainnet, devnet)

Разбор кода

Сначала рассмотрим импорты и определения типов:

Код
import { Hono } from 'hono';

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

‍Мы используем Hono — легковесный веб-фреймворк для Cloudflare Workers. Тип Env определяет переменные окружения для интеграций с Helius и Telegram.

Затем настроим приложение Hono:‍

Код
const app = new Hono<{ Bindings: Env }>();

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

Этот код создает приложение и настраивает простую конечную точку для проверки работоспособности.

Теперь создадим вебхук:

Код
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 });
});

Эта конечная точка настраивает вебхук Helius. В этом примере мы отслеживаем продажи NFT из программы Magic Eden v2, но вы можете изменить transactionTypes и accountAddresses в соответствии со своими задачами.‍

Вот как мы отправляем сообщения в Telegram:

Код
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();
}

Эта функция форматирует сообщение и отправляет его в наш чат Telegram.

Наконец, обработаем входящие данные вебхука:

Код
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');
});

‍Здесь мы обрабатываем данные от Helius и отправляем отформатированные сообщения в Telegram. Вы можете адаптировать эту часть к своему сценарию, чтобы обрабатывать разные типы транзакций или извлекать другую информацию.

Варианты настройки

Хотя наш пример посвящен продажам NFT, этот шаблон легко адаптировать к различным сценариям:

  1. Измените transactionTypes при создании вебхука, чтобы отслеживать другие события
  2. Измените accountAddresses, чтобы отслеживать определенные программы или кошельки
  3. Настройте форматирование сообщений в конечной точке /webhook в соответствии с требованиями к данным
  4. Добавьте логику для фильтрации или обработки входящих данных‍

Изучите документацию по вебхукам Helius, чтобы узнать обо всех доступных для отслеживания данных и событиях. Но не ограничивайтесь только явно определенными событиями. Вебхуки Helius очень гибкие и позволяют отслеживать множество видов ончейн-активности, даже если они напрямую не разбираются или не упоминаются в нашей документации.

Вот несколько примеров событий, которые можно отслеживать:

  • Переводы определенных SPL-токенов
  • Развертывание новых программ
  • Создание пулов Raydium или добавление ликвидности
  • Создание предложений по управлению или голосование по ним
  • Запуски Metaplex candy machine
  • Создание рынков Serum

С помощью этого шаблона можно создавать Telegram-ботов для самых разных задач мониторинга Solana: от событий протоколов DeFi до отслеживания активности кошельков и многого другого.

Спасибо, что дочитали до конца! Надеемся, это руководство помогло вам начать создавать собственного Telegram-бота для Solana. Подпишитесь на нашу рассылку, чтобы не пропускать новости Solana. Хотите узнать больше? Изучите последние статьи в блоге Helius и продолжите знакомство с Solana уже сегодня.

Дополнительные ресурсы

  1. Документация Helius
  2. Документация Cloudflare Workers
  3. API Telegram Bot
  4. Документация Hono

Подпишитесь на Helius

Следите за новостями разработки на Solana и получайте уведомления о наших публикациях

Увеличенное изображение