신규: Helius가 Light Protocol을 인수했습니다
100줄 미만의 코드로 Solana Telegram 봇 만들기
블로그/개발

100줄 미만의 코드로 Solana Telegram 봇 만들기

통합 엔지니어X의 Het DagliLinkedIn의 Het Dagli
읽는 데 4분

Solana 이벤트를 실시간으로 확인하고 싶으신가요? 이 가이드에서는 온체인 활동을 추적하는 Telegram 봇을 만드는 방법을 알아봅니다. NFT 판매 추적기를 예로 사용하지만, 여기서 만드는 템플릿은 다른 사용 사례에도 쉽게 적용할 수 있습니다.

예제 봇은 다음과 같은 모습입니다.

이 템플릿은 실시간 Solana 데이터를 위한 Helius webhooks와 서버리스 호스팅을 위한 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. 다음 URL을 방문합니다: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  4. 응답에서 "chat":{"id": 필드를 찾습니다. 이것이 TELEGRAM_CHAT_ID입니다.
  5. 단계별 안내는 다음 동영상에서 확인하세요.

HELIUS_API_KEY Helius API 키(Helius에서 발급)

AUTH_TOKEN bash를 열고 고유한 AUTH_TOKEN을 생성합니다.

코드
openssl rand -base64 32

4. Cloudflare에 배포

코드
npm run deploy

이 명령어를 실행하면 콘솔 출력에 배포 URL이 표시됩니다. 다음 단계에서 필요하므로 이 URL을 기록해 두세요.

5. webhook 생성

이전 단계의 배포 URL을 사용해 webhook을 생성합니다.

코드
curl -X POST https://your-worker-url.workers.dev/create-webhook

이 명령어를 실행하면 성공 응답을 받습니다.

Helius 대시보드에서 설정한 새 webhook을 확인할 수 있습니다.

6. webhook 편집

webhook을 생성한 후 Helius 대시보드에서 추가로 맞춤 설정할 수 있습니다. 

  1. 대시보드의 webhooks 섹션으로 이동합니다.
  2. 목록에 새로 생성한 webhook이 표시됩니다. 
  3. webhook을 클릭해 설정을 편집합니다.
  4. 여기에서 다음과 같은 다양한 매개변수를 변경할 수 있습니다.
    • 추적할 트랜잭션 유형
    • 모니터링할 특정 지갑 주소
    • 네트워크(mainnet, devnet)

코드 살펴보기

먼저 import와 타입 정의를 살펴보겠습니다.

코드
import { Hono } from 'hono';

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

‍Cloudflare Workers용 경량 웹 프레임워크인 Hono를 사용합니다. Env 타입은 Helius와 Telegram 통합을 위한 환경 변수를 정의합니다.

다음으로 Hono 앱을 설정합니다.‍

코드
const app = new Hono<{ Bindings: Env }>();

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

이 코드는 앱을 생성하고 간단한 상태 확인 엔드포인트를 설정합니다.

이제 webhook을 생성하겠습니다.

코드
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 webhook을 설정합니다. 이 예제에서는 Magic Eden v2 프로그램의 NFT 판매를 추적하지만, 필요에 맞게 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 채팅으로 전송합니다.

마지막으로 수신되는 webhook 데이터를 처리하겠습니다.

코드
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. 다양한 이벤트를 추적하도록 webhook 생성 시 transactionTypes을 변경합니다.
  2. 특정 프로그램이나 지갑을 모니터링하도록 accountAddresses을 변경합니다.
  3. 데이터 요구 사항에 맞게 /webhook 엔드포인트의 메시지 형식을 조정합니다.
  4. 수신 데이터를 필터링하거나 처리하는 추가 로직을 구현합니다.‍

추적할 수 있는 모든 데이터와 이벤트는 Helius webhooks 문서에서 확인하세요. 단, 명시적으로 정의된 이벤트에만 한정할 필요는 없습니다. Helius webhooks는 활용도가 매우 높으며, 문서에서 직접 파싱하거나 언급하지 않은 활동을 포함해 광범위한 온체인 활동을 추적할 수 있습니다.

추적할 수 있는 이벤트의 예는 다음과 같습니다.

  • 특정 SPL 토큰의 토큰 전송
  • 새로운 프로그램 배포
  • Raydium 풀 생성 또는 유동성 추가
  • 거버넌스 제안 생성 또는 투표
  • Metaplex candy machine 출시
  • Serum 마켓 생성

이 템플릿을 활용하면 DeFi 프로토콜 이벤트부터 지갑 활동 추적까지, 다양한 Solana 모니터링 작업을 위한 Telegram 봇을 만들 수 있습니다.

끝까지 읽어주셔서 감사합니다! 이 가이드가 나만의 Solana Telegram 봇을 만드는 데 도움이 되었기를 바랍니다. Solana의 새로운 소식을 놓치지 않도록 뉴스레터를 구독하세요. 더 자세히 알아볼 준비가 되셨나요? 지금 Helius 블로그의 최신 글을 살펴보고 Solana 여정을 이어가세요.

추가 자료

  1. Helius 문서
  2. Cloudflare Workers 문서
  3. Telegram Bot API
  4. Hono 문서

Helius 구독하기

최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요

확대 이미지