
用不到 100 行代码创建 Solana Telegram 机器人
想实时掌握 Solana 事件?本指南将向你展示如何创建一个可跟踪链上活动的 Telegram 机器人。我们将以 NFT 销售跟踪器为例,但你可以轻松调整这个模板,将其用于其他场景。
我们的示例机器人将如下所示:
此模板结合了用于获取实时 Solana 数据的 Helius webhook 和提供无服务器托管的 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。
运行此命令后,你将收到成功响应。
你可以在 Helius 控制面板中查看新建的 webhook。
新的 webhook 可能需要 2–3 分钟才能完全启动并开始运行。
6. 编辑 webhook
创建 webhook 后,你可以在 Helius 控制面板中进一步自定义它:
- 前往控制面板中的 webhook 部分
- 你应该会在列表中看到新创建的 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;
};
我们使用的是 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 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 webhook 文档,了解所有可跟踪的数据和事件。但不要将自己局限于明确定义的事件!Helius webhook 非常灵活,可以跟踪大量链上活动,包括文档中未直接解析或提及的活动。
以下是一些你可以跟踪的事件示例:
- 特定 SPL 代币的转账
- 新程序部署
- Raydium 池创建或流动性添加
- 治理提案创建或投票
- Metaplex candy machine 发布
- Serum 市场创建
利用此模板,你可以创建用于执行各种 Solana 监控任务的 Telegram 机器人,涵盖 DeFi 协议事件、钱包活动跟踪等众多场景。
感谢你阅读到这里!希望本指南能帮助你开始创建自己的 Solana Telegram 机器人。欢迎订阅我们的新闻简报,及时了解 Solana 的最新动态。准备好深入探索了吗?立即查看 Helius 博客上的最新文章,继续你的 Solana 之旅。
其他资源
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


