
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
- チャンネルを作成し、ボットを管理者として追加します。
- チャンネルにメッセージを送信します。
- 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に置き換えてください。
このコマンドを実行すると、成功レスポンスが返されます。
設定した新しいwebhookを確認するには、Heliusダッシュボードを開きます。
新しい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 { Hono } from 'hono';
type Env = {
HELIUS_API_KEY: string;
TELEGRAM_BOT_TOKEN: string;
TELEGRAM_CHAT_ID: string;
AUTH_TOKEN: string;
};
ここでは、Cloudflare Workers向けの軽量Webフレームワークである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キャンディマシンのローンチ
- Serumマーケットの作成
このテンプレートを活用すれば、DeFiプロトコルのイベントやウォレットアクティビティの追跡をはじめ、Solanaを監視するさまざまなTelegramボットを作成できます。
ここまでお読みいただき、ありがとうございます。このガイドが、独自のSolana Telegramボットを作成する第一歩になれば幸いです。Solanaの最新情報を見逃さないよう、ぜひニュースレターにご登録ください。さらに詳しく知りたい場合は、Heliusブログの最新記事をご覧になり、今すぐSolanaの旅を続けましょう。
その他のリソース
関連記事
Heliusを購読
Solana開発の最新情報や新しい記事の公開通知を受け取れます


