
100줄 미만의 코드로 Solana Telegram 봇 만들기
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-template2. 종속성 설치
npm install3. 환경 변수 구성
wrangler.toml을 열고 다음 키를 입력하세요.
TELEGRAM_BOT_TOKEN
- Telegram을 열고 @BotFather를 검색합니다.
- BotFather와 채팅을 시작하고
/newbot명령어를 전송합니다. - 안내에 따라 봇의 이름과 사용자 이름을 선택합니다.
- 생성이 완료되면 BotFather가 토큰을 제공합니다. 이것이
TELEGRAM_BOT_TOKEN입니다.
TELEGRAM_CHAT_ID
- 채널을 만들고 봇을 관리자로 추가합니다.
- 채널에 메시지를 보냅니다.
- 다음 URL을 방문합니다: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
- 응답에서
"chat":{"id":필드를 찾습니다. 이것이TELEGRAM_CHAT_ID입니다. - 단계별 안내는 다음 동영상에서 확인하세요.
HELIUS_API_KEY
Helius API 키(Helius에서 발급)
AUTH_TOKEN
bash를 열고 고유한 AUTH_TOKEN을 생성합니다.
openssl rand -base64 32이 값들을 Github에 커밋하지 마세요.
4. Cloudflare에 배포
npm run deploy이 명령어를 실행하면 콘솔 출력에 배포 URL이 표시됩니다. 다음 단계에서 필요하므로 이 URL을 기록해 두세요.
5. webhook 생성
이전 단계의 배포 URL을 사용해 webhook을 생성합니다.
curl -X POST https://your-worker-url.workers.dev/create-webhook"your-worker-url"을 실제 worker URL로 바꾸세요.
이 명령어를 실행하면 성공 응답을 받습니다.
Helius 대시보드에서 설정한 새 webhook을 확인할 수 있습니다.
새 webhook이 완전히 가동되어 작동하기까지 2~3분이 걸릴 수 있습니다.
6. webhook 편집
webhook을 생성한 후 Helius 대시보드에서 추가로 맞춤 설정할 수 있습니다.
- 대시보드의 webhooks 섹션으로 이동합니다.
- 목록에 새로 생성한 webhook이 표시됩니다.
- webhook을 클릭해 설정을 편집합니다.
- 여기에서 다음과 같은 다양한 매개변수를 변경할 수 있습니다.
- 추적할 트랜잭션 유형
- 모니터링할 특정 지갑 주소
- 네트워크(mainnet, devnet)
"Webhook URL" 필드는 변경하지 마세요. 계속 Cloudflare Worker의 /webhook 엔드포인트(https://your-worker- url.workers.dev/webhook)를 가리켜야 합니다.
코드 살펴보기
먼저 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 판매에 초점을 맞추지만, 다양한 사용 사례에 맞게 템플릿을 쉽게 조정할 수 있습니다.
- 다양한 이벤트를 추적하도록 webhook 생성 시
transactionTypes을 변경합니다. - 특정 프로그램이나 지갑을 모니터링하도록
accountAddresses을 변경합니다. - 데이터 요구 사항에 맞게
/webhook엔드포인트의 메시지 형식을 조정합니다. - 수신 데이터를 필터링하거나 처리하는 추가 로직을 구현합니다.
추적할 수 있는 모든 데이터와 이벤트는 Helius webhooks 문서에서 확인하세요. 단, 명시적으로 정의된 이벤트에만 한정할 필요는 없습니다. Helius webhooks는 활용도가 매우 높으며, 문서에서 직접 파싱하거나 언급하지 않은 활동을 포함해 광범위한 온체인 활동을 추적할 수 있습니다.
추적할 수 있는 이벤트의 예는 다음과 같습니다.
- 특정 SPL 토큰의 토큰 전송
- 새로운 프로그램 배포
- Raydium 풀 생성 또는 유동성 추가
- 거버넌스 제안 생성 또는 투표
- Metaplex candy machine 출시
- Serum 마켓 생성
이 템플릿을 활용하면 DeFi 프로토콜 이벤트부터 지갑 활동 추적까지, 다양한 Solana 모니터링 작업을 위한 Telegram 봇을 만들 수 있습니다.
끝까지 읽어주셔서 감사합니다! 이 가이드가 나만의 Solana Telegram 봇을 만드는 데 도움이 되었기를 바랍니다. Solana의 새로운 소식을 놓치지 않도록 뉴스레터를 구독하세요. 더 자세히 알아볼 준비가 되셨나요? 지금 Helius 블로그의 최신 글을 살펴보고 Solana 여정을 이어가세요.
추가 자료
관련 아티클
Helius 구독하기
최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요


