不到100行代码中创建一个Solana Telegram机器人
想实时了解Solana上的动态吗?本指南将向您展示如何创建一个Telegram机器人来追踪链上活动。我们将使用一个NFT销售追踪器作为示例,但我们构建的模板可以轻松适配于其他用途。
简介
想实时了解Solana上的动态吗?本指南将向您展示如何创建一个Telegram机器人来追踪链上活动。我们将使用一个NFT销售追踪器作为示例,但我们构建的模板可以轻松适配于其他用途。
以下是我们示例机器人的样子:
该模板结合了Helius Webhooks来获取实时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:
打开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
。查看视频教程:
“创建Telegram机器人并获取聊天ID - 分步指南” - HELIUS_API_KEY:
从Helius获取您的API密钥。
请确保不要将这些值提交到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:
https://dashboard.helius.dev/webhooks
注意:新Webhook可能需要2-3分钟才能完全启动并投入运行。
6、编辑Webhook:
创建Webhook后,您可以在Helius仪表板中进一步自定义:
- 访问:https://dashboard.helius.dev/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;
};
我们使用了Hono,这是一个适用于Cloudflare Workers的轻量级Web框架。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程序
webhookType: "enhanced"
}),
}
);
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) => {
console.log('Webhook endpoint hit');
console.log('Request URL:', c.req.url);
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市场的创建
通过利用此模板,您可以为多种Solana监控任务创建Telegram机器人,从DeFi协议事件到钱包活动跟踪,甚至更多。
感谢您阅读到这里!我们希望本指南能帮助您开始创建自己的Solana Telegram机器人。请订阅我们的新闻通讯,以确保不会错过Solana上的最新动态。想深入了解更多内容?立即浏览Helius博客上的最新文章,继续您的Solana之旅吧!