
Cara menyiapkan bot Telegram Solana
Ada sekitar 400 transaksi yang terjadi setiap detik di blockchain Solana. Transaksi ini mencakup transfer token, penjualan NFT, pertukaran token, penawaran, pemungutan suara DAO, taruhan, dan banyak lagi. Namun, dengan data sebanyak itu, bagaimana Anda memantau perubahan yang penting bagi Anda? Di sinilah webhook berperan. Webhook memungkinkan Anda memantau perubahan tersebut dan terus mendapatkan informasi terbaru tentang hal-hal yang penting bagi Anda. Panduan ini akan menunjukkan cara menyiapkan bot Telegram untuk mengirimkan pembaruan on-chain langsung kepada pengguna atau channel menggunakan worker Cloudflare.
Langkah-Langkah Menyiapkan Bot Telegram
- Siapkan channel Telegram dan bot Telegram.
- Buat worker Cloudflare yang berfungsi sebagai penghubung antara webhook yang mengirimkan pembaruan dan bot Telegram.
- Buat webhook Helius.
- Ubah alamat yang dipantau webhook melalui Helius Webhook API. Langkah ini hanya diperlukan untuk memantau seluruh koleksi NFT.
Menyiapkan Bot Telegram
Bot Telegram merupakan cara yang sangat baik untuk mengotomatiskan tugas tertentu, terutama pembaruan. Berikut langkah-langkah untuk menyiapkannya.
1. Mulai Percakapan dengan BotFather
Cari 'BotFather' di bilah pencarian Telegram, lalu klik untuk memulai percakapan.
2. Buat Bot Baru
Ketik dan kirim '/newbot'. BotFather kemudian akan memandu Anda untuk memberi nama dan nama pengguna bagi bot Anda.
3. Dapatkan Token Akses
Setelah selesai, BotFather akan memberikan token akses.
Catat token ini dengan aman karena kita akan menggunakannya nanti dalam tutorial ini.
4. Buat Channel Anda
Buka menu (☰) dan pilih 'New Channel'.
Setelah menyiapkan channel, klik nama channel, pilih 'Administrators', lalu tambahkan bot Anda sebagai administrator.
5. Temukan ID Chat
Untuk mengetahui ID chat channel Anda, ikuti langkah-langkah berikut:
Kirim Pesan:
Pertama, kirim pesan ke channel yang telah Anda buat.
Gunakan Telegram API
Buka https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates di browser Anda, lalu ganti <YOUR_BOT_TOKEN> dengan token yang Anda terima dari BotFather.
Temukan ID Chat
Dalam data yang dikembalikan, Anda akan menemukan kolom bernama chat dan di dalamnya terdapat id, yaitu ID chat channel Anda.
Pastikan Anda mencatat ID chat ini dengan aman karena akan diperlukan untuk konfigurasi selanjutnya.
Membuat Worker Cloudflare
Worker Cloudflare memungkinkan Anda menerapkan kode yang di-host secara online dan berjalan secara terus-menerus agar selalu siap menerima pembaruan dari webhook Anda.
1. Masuk ke Cloudflare
Mulailah dengan masuk ke akun Cloudflare Anda. Jika belum memilikinya, Anda dapat mendaftar secara gratis.
2. Akses Bagian Workers
Dari dasbor Cloudflare, buka tab "Workers".
3. Buat Worker Baru
Klik tombol “Create a Worker”. Anda akan diarahkan ke Worker Editor.
4. Edit Kode Worker
Di editor, Anda akan melihat templat skrip. Ganti kode default dengan kode Cloudflare yang disediakan untuk bot Telegram Anda.
Temukan variabel BOT_TOKEN dan CHAT_ID di dalam kode. Keduanya merupakan placeholder yang akan digunakan untuk mengirim pesan melalui bot Anda ke chat yang benar.
5. Konfigurasikan Variabel Lingkungan
Di dasbor Cloudflare Workers, buka tab "Settings" milik worker Anda.
Di sini, Anda dapat menambahkan token bot, token chat, dan kunci Helius API sebagai variabel lingkungan. Langkah ini membantu menjauhkan data sensitif dari kode utama Anda dan menjaganya tetap aman.
Pastikan Anda memberi nama variabel lingkungan ini dengan benar agar sesuai dengan yang diharapkan dalam kode Anda (misalnya, BOT_TOKEN, CHAT_ID, dan sebagainya).
6. Terapkan Worker
Setelah memastikan kode dan variabel lingkungan telah diatur dengan benar, klik tombol “Save and Deploy”. Worker Anda akan diterapkan dan diberi URL publik yang unik.
7. Catat URL Publik
Setelah penerapan, pastikan Anda mencatat URL publik yang diberikan kepada worker Anda. URL ini akan digunakan sebagai endpoint webhook untuk bot Telegram Anda.
Kode Worker Cloudflare:
const TELEGRAM_BOT_TOKEN = BOT_TOKEN;
const TELEGRAM_CHAT_ID = CHAT_ID;
const HELIUS_API_KEY=API_KEY;
const HELIUS_RPC_URL = `https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`;
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
if (request.method === 'POST') {
const requestBody = await request.json();
console.log('Received POST request with body:', requestBody);
//THIS IS FOR NFT UPDATES (comment this section out if you are doing something else)
// Extract transaction description, timestamp, signature, and mint address
// const NFTdescription = requestBody[0].description;
// const NFTtimestamp = new Date(requestBody[0].timestamp * 1000).toLocaleString(); // Convert Unix timestamp to readable date-time
// const NFTsignature = `https://solscan.io/tx/${requestBody[0].signature}`
// const NFTmintAddress = requestBody[0].events.nft.nfts[0].mint;
// const NFTimageUrl = await getAssetImageUrl(NFTmintAddress);// Get NFT image URL
// // Construct the message
// const messageToSendNFT =
// `----NEW UPDATE---\n`+
// `Description:\n${NFTdescription}\n` +
// `Mint Address:\n${NFTmintAddress}\n` +
// `Signature:\n${NFTsignature}\n` +
// `Timestamp:\n${NFTtimestamp}`;
// await sendToTelegramNFT(messageToSendNFT, NFTimageUrl); // Send to Telegram
//THIS IS FOR TRANSFER UPDATES (comment this section out if you are doing something else)
// Extract transaction description, timestamp, signature
const Transferdescription = requestBody[0].description;
const Transfertimestamp = new Date(requestBody[0].timestamp * 1000).toLocaleString(); // Convert Unix timestamp to readable date-time
const Transfersignature = `https://xray.helius.xyz/tx/${requestBody[0].signature}`
// Construct the message
const messageToSendTransfer =
`----NEW UPDATE---\n`+
`Description:\n${Transferdescription}\n` +
`Signature:\n${Transfersignature}\n` +
`Timestamp:\n${Transfertimestamp}`;
await sendToTelegramTransfer(messageToSendTransfer); // Send to Telegram
return new Response('Logged POST request body.', {status: 200});
} else {
return new Response('Method not allowed.', {status: 405});
}
}
// This function is used to send NFT Updates to the bot
async function sendToTelegramNFT(message, imageUrl) {
const telegramUrl = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto`;
const response = await fetch(telegramUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
chat_id: TELEGRAM_CHAT_ID,
photo: imageUrl,
caption: message,
parse_mode: "HTML"
}),
});
const responseData = await response.json();
if (!response.ok) {
console.error('Failed to send photo to Telegram:', responseData);
}
}
//This function is used to send Transfer Updates to the Bot
async function sendToTelegramTransfer(message) {
const telegramUrl = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`;
const response = await fetch(telegramUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
chat_id: TELEGRAM_CHAT_ID,
text: message,
parse_mode: "HTML"
}),
});
const responseData = await response.json();
if (!response.ok) {
console.error('Failed to send message to Telegram:', responseData);
}
}
//This function gets images associated to NFTs that are features in updates.
async function getAssetImageUrl(mintAddress) {
const response = await fetch(HELIUS_RPC_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
jsonrpc: '2.0',
id: 'my-id',
method: 'getAsset',
params: {
id: mintAddress,
},
}),
});
const { result } = await response.json();
return result.content.links.image;
}Menyiapkan Webhook Helius
Webhook Helius menjembatani perubahan di blockchain Solana dengan channel Telegram Anda. Dalam contoh ini, saya akan menyiapkan webhook untuk memantau semua transaksi yang dilakukan oleh wallet tertentu.
1. Daftar
Kunjungi dashboard.helius.dev dan buat akun gratis.
2. Buat Webhook
Di dalam dasbor, pilih opsi untuk membuat webhook baru. Anda dapat memilih jenisnya: Raw, Enhanced, Discord, atau Account. Untuk pembaruan spesifik yang telah dikategorikan, sebaiknya pilih 'Enhanced'. Saat memilihnya, tentukan pembaruan yang Anda minati, misalnya NFT_SALES atau NFT_LISTING.
Daftar lengkap tersedia di sini.
3. Masukkan Tautan Worker dan Alamat Solana
Pastikan Anda memberikan tautan ke worker Cloudflare yang telah diterapkan. Cantumkan juga alamat account Solana tertentu yang ingin Anda pantau, baik berupa wallet pengguna maupun daftar mint dari sebuah koleksi.
Cara Memantau Koleksi NFT (Penyiapan Bot Penjualan)
Jika ingin memantau koleksi tertentu untuk mendapatkan pembaruan ketika sesuatu terjadi pada NFT di koleksi tersebut, Anda perlu menambahkan semua alamat mint NFT sebagai account di webhook Anda. Untuk melakukannya, Anda perlu menggunakan endpoint webhook Helius untuk mengedit webhook yang telah dibuat sebelumnya. Setelah semuanya disiapkan, Anda dapat memantau penjualan, listing, penawaran, pembakaran, dan transaksi lain apa pun yang melibatkan NFT.
Hal pertama yang Anda perlukan adalah daftar hash/mint untuk koleksi yang ingin dipantau. Anda dapat menggunakan kode berikut untuk mendapatkan daftar mint menggunakan DAS. Anda hanya perlu menambahkan kunci Helius API dan mengganti creatorAddress dengan alamat kreator terverifikasi pertama dari sebuah NFT. Anda dapat menemukan kreator terverifikasi pertama dengan membuka block explorer Solana favorit Anda, mencari metadata, lalu menemukan alamat di bagian kreator:
Kode Snapshot:
const fs = require('fs');
const url = `https://mainnet.helius-rpc.com/?api-key=`;
const getAssetsByCreator = async () => {
let page = 1;
let allMintAddresses = [];
while (true) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
jsonrpc: '2.0',
id: `my-id-page-${page}`,
method: 'getAssetsByCreator',
params: {
creatorAddress: 'GFQBHxuNcAwYwHtEpggMwbH5kwV6Ne4JowHbLVfsMC6C',
onlyVerified: true,
page: page,
limit: 1000
},
}),
});
const { result } = await response.json();
// If there are no more items, break the loop
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}else{
if (!result.items || result.items.length === 0) {
break;
}
}
// Extract mint addresses and add them to the list
const mintAddresses = result.items.map(item => item.id);
allMintAddresses.push(...mintAddresses);
// Check if there are less than 1000 results to stop further requests
if (result.items.length < 1000) {
break;
}
page++;
}
// Join the addresses by comma
const addressesString = allMintAddresses.join(',');
console.log("All Mint Addresses: ", addressesString);
fs.writeFileSync('addresses.json', JSON.stringify(allMintAddresses, null, 2));
};
getAssetsByCreator();Setelah mendapatkannya, Anda dapat menjalankan skrip dengan membuka terminal, membuka direktori tempat skrip berada, lalu menjalankan node snapshot.js. Tindakan ini akan membuat file JSON bernama addresses.json di direktori tersebut. Sebagai alternatif, Anda dapat menggunakan alat seperti alat snapshot Magic Eden untuk mendapatkan daftar hash.
Setelah memiliki daftar hash, Anda dapat memperbarui daftar account yang dipantau webhook. Untuk melakukannya, Anda perlu menggunakan endpoint webhook Helius. Saya telah menyertakan kode di bawah ini untuk mempermudah proses tersebut. Cukup buat file JavaScript baru bernama webhookUpdate.js (di direktori yang sama dengan daftar hash Anda), lalu tambahkan kode di bawah ini. Selanjutnya, Anda dapat mengedit kode untuk menyertakan kunci Helius API dan ID webhook Anda (yang dapat ditemukan di portal developer). Anda kemudian perlu mengedit isi permintaan agar sesuai dengan data yang digunakan saat membuat webhook. Jadi, jika Anda memilih untuk memantau listing dan penjualan NFT, pastikan keduanya disertakan. Jangan mengedit kolom accountAddresses karena kolom ini telah diatur untuk menggunakan daftar hash yang dibuat sebelumnya.
Setelah perubahan ini dibuat, Anda dapat menjalankan skrip dari terminal dengan node webhookUpdate.js. Setelah kode dijalankan, Anda akan menerima konfirmasi di terminal.
webhookUpdate.js:
const fs = require('fs');
const editWebhook = async () => {
try {
// Read the JSON file
const addresses = JSON.parse(fs.readFileSync('addresses.json', 'utf8'));
const response = await fetch(
"https://api.helius.xyz/v0/webhooks/?api-key=",
{
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
webhookURL: "",
transactionTypes: ["NFT_LISTING","NFT_SALE"],
accountAddresses: addresses, // Use the addresses from the file
webhookType: "enhanced"
}),
}
);
const data = await response.json();
console.log({ data });
} catch (e) {
console.error("error", e);
}
};
editWebhook();Setelah webhook diperbarui, Anda dapat kembali ke worker Cloudflare dan mengedit kode agar mengembalikan detail khusus NFT. Kode yang diperlukan sudah disertakan. Anda hanya perlu mengomentari bagian untuk mengirim pembaruan TRANSFER dan menghapus komentar pada bagian untuk mengirim pembaruan NFT.
Saat peristiwa yang Anda pantau terjadi secara on-chain, webhook akan mengirimkan pembaruan ke worker Cloudflare. Pembaruan ini akan berformat JSON dan biasanya berisi banyak informasi, seperti semua account yang terlibat, perubahan pada setiap account, dan informasi terkait jenis peristiwa. Dalam kode yang disediakan, kami mengekstrak bagian yang dianggap penting.
Jika ingin menyesuaikan pesan yang dikirim atau mengubah data yang diekstrak dari pembaruan webhook, Anda dapat mengubah variabel messageToSend. Jika ingin memantau hal lain di luar transfer dan peristiwa NFT, Anda tetap dapat melakukannya. Anda dapat mengubah kode Cloudflare agar mengirimkan seluruh requestBody[0]. Langkah ini akan meneruskan respons JSON webhook lengkap ke bot Telegram Anda sehingga Anda dapat melihat struktur responsnya. Selanjutnya, Anda dapat meninjau dan menentukan bagian mana yang ingin disertakan dalam pesan.
Dengan penyiapan ini, channel Telegram Anda menjadi pusat pembaruan real-time dari blockchain Solana berkat webhook Helius. Kami harap panduan ini bermanfaat. Jika memiliki pertanyaan atau mengalami masalah, silakan hubungi tim kami melalui Discord atau X.
Artikel Terkait
Berlangganan Helius
Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan


