Introducción

¿Quieres estar al tanto de los eventos de Solana en tiempo real? Esta guía te mostrará cómo crear un bot de Telegram que pueda rastrear las actividades en cadena. Usaremos un rastreador de ventas de NFT como ejemplo, pero la plantilla que estamos creando se puede adaptar fácilmente para otros casos de uso.

Así es como se verá nuestro bot de ejemplo:

Esta plantilla combina los webhooks de Helius para obtener datos de Solana en tiempo real con Cloudflare Workers para el alojamiento sin servidor. Ya sea que estés rastreando las ventas de NFT, monitoreando los protocolos DeFi o vigilando billeteras específicas, esta configuración proporciona una base sólida.

Configurando Tu Proyecto

Pongamos tu proyecto en marcha:

‍1. Clona el repositorio:

   git clone https://github.com/helius-labs/cloudfare-telegram-template.git

   cd cloudfare-telegram-template

2. Instala dependencias:

   npm install

3. Configura variables de entorno:

Abre wrangler.toml y completa las siguientes claves:

   - TELEGRAM_BOT_TOKEN:  

  1. Abre Telegram y busca @BotFather.

  2. Inicia un chat con BotFather y envía el comando /newbot.

  3. Sigue las indicaciones para elegir un nombre y un usuario para tu bot.

  4. Una vez creado, BotFather te dará un token. Este es tu TELEGRAM_BOT_TOKEN.

   - TELEGRAM_CHAT_ID:

  1. Crea un canal y agrega tu bot como administrador.

  2. Envía un mensaje al canal.

  3. Visita: https://api.telegram.org/bot<YOUR_BOT_TOKEN\u003e/getUpdates

  4. Encuentra el campo "chat":{"id": en la respuesta. Este es tu TELEGRAM_CHAT_ID.

      Mira este video para una guía paso a paso:

      Crea un Bot de Telegram y Obtén el ID del Chat - Guía Paso a Paso

   - HELIUS_API_KEY: Tu clave API de Helius (consíguela de Helius)

Por favor, asegúrate de no comprometer estos valores en Github.

‍4. Despliega en Cloudflare:

     npm run deploy

Después de ejecutar este comando, verás tu URL de despliegue en la salida de la consola. Toma nota de esta URL ya que la necesitarás en el siguiente paso.

‍5. Crea tu webhook:

Usa la URL de implementación del paso anterior para crear tu webhook:

     curl -X POST https://your-worker-url.workers.dev/create-webhook

     (Reemplaza your-worker-url con tu URL de trabajador real

Recibirás una respuesta de éxito después de ejecutar este comando. Puedes ver el nuevo webhook que configuraste en tu panel de Helius en: https://dashboard.helius.dev/webhooks

Nota: Puede tardar de 2 a 3 minutos en que el nuevo webhook se active y se vuelva operativo.

6. Edita tu webhook:

Después de crear tu webhook, puedes personalizarlo aún más en el panel de Helius:

  1. Ve a https://dashboard.helius.dev/webhooks

  2. Deberías ver tu nuevo webhook creado en la lista.

  3. Haz clic en el webhook para editar sus configuraciones.

  4. Aquí puedes modificar varios parámetros como:

    • Tipos de transacciones que deseas rastrear

    • Direcciones de billetera específicas para monitorear

    • Red (mainnet, devnet)

  5. Importante: Mantén el campo "Webhook URL" sin cambios. Debe seguir apuntando a tu endpoint /webhook de Cloudflare Worker (https://your-worker-url.workers.dev/webhook).

          

El Desglose del Código

Primero, examinemos nuestras importaciones y definiciones de tipo:

import { Hono } from 'hono';

type Env = {
HELIUS_API_KEY: string;
TELEGRAM_BOT_TOKEN: string;
TELEGRAM_CHAT_ID: string;
};

Estamos usando Hono, un marco web ligero para Cloudflare Workers. El tipo Env define nuestras variables de entorno para las integraciones de Helius y Telegram.

A continuación, configuramos nuestra aplicación Hono:

const app = new Hono\u003c{ Bindings: Env }\u003e();

app.get('/', (c) => c.text('¡El Bot de Acción de Solana está en funcionamiento!'));

Esto crea nuestra aplicación y establece un simple endpoint de verificación de salud.

Ahora, vamos a crear nuestro webhook:

app.post('/create-webhook', async (c) => {
const webhookURL = `${new URL(c.req.url).origin}/webhook`;
console.log('Configurando webhook con 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"], // Programa Magic Eden v2
webhookType: "enhanced"
}),
}
);
const data = await response.json();
console.log('Respuesta de configuración de webhook de Helius:', data);
return c.json({ success: true, webhook: data, webhookURL: webhookURL });
});

Este endpoint configura nuestro webhook de Helius. En este ejemplo, estamos rastreando ventas de NFT del programa Magic Eden v2, pero puedes modificar los transactionTypes y accountAddresses para adaptarlos a tus necesidades.

Así es como enviamos mensajes a 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();
}

Esta función formatea nuestro mensaje y lo envía a nuestro chat de Telegram.

Finalmente, manejemos los datos entrantes del webhook:

app.post('/webhook', async (c) => {
console.log('Endpoint del webhook alcanzado');
console.log('URL de la solicitud:', c.req.url);

let data;
try {
data = await c.req.json();
console.log('Datos de webhook recibidos:', JSON.stringify(data, null, 2));
} catch (error) {
console.error('Error al analizar los datos del webhook:', error);
return c.text('Error procesando el webhook', 400);
}

if (!Array.isArray(data) || data.length === 0) {
console.log('No hay transacciones en los datos del webhook');
return c.text('No hay transacciones para procesar', 200);
}

for (const transaction of data) {
if (transaction.type === 'NFT_SALE') {
const { amount, buyer, seller, signature, nfts } = transaction.events.nft;
const message = `🎉 Venta de NFT\n\n` +
`*Precio*: ${amount / 1e9} SOL\n` +
`*Comprador*: \`${buyer}\`\n` +
`*Vendedor*: \`${seller}\`\n` +
`*Firma*: [Ver en Solana Explorer](https://explorer.solana.com/tx/${signature})`;

try {
const result = await sendTelegramMessage(message, c.env);
console.log('Mensaje de Telegram enviado:', result);
} catch (error) {
console.error('Error al enviar el mensaje de Telegram:', error);
}
}
}

return c.text('Webhook procesado');
});

Este es el lugar donde procesamos los datos de Helius y enviamos mensajes formateados a Telegram. Según tu caso de uso, puedes personalizar esta parte para manejar diferentes tipos de transacciones o extraer diferentes información.

Opciones de Personalización

Aunque nuestro ejemplo se centra en las ventas de NFT, puedes adaptar fácilmente esta plantilla para varios casos de uso:

1. Modifica los transactionTypes en la creación del webhook para rastrear diferentes eventos

2. Cambia las accountAddresses para monitorear programas o billeteras específicas

3. Ajusta el formato del mensaje en el endpoint /webhook para que se adapte a tus necesidades de datos.

4. Implementa lógica adicional para filtrar o procesar los datos entrantes

Explora la documentación de webhooks de Helius para descubrir toda la gama de datos y eventos rastreables. Sin embargo, ¡no te limites solo a los eventos explícitamente definidos! Los webhooks de Helius son increíblemente versátiles y pueden rastrear una amplia gama de actividades en la cadena, incluso aquellas que no están directamente analizadas o mencionadas en nuestra documentación.

Aquí hay algunos ejemplos de eventos que podrías rastrear:

  • Transferencias de tokens SPL específicos

  • Nuevos despliegues de programas

  • Creaciones de pools de Raydium o adiciones de liquidez

  • Creaciones o votaciones de propuestas de gobernanza

  • Lanzamientos de máquinas de caramelos de Metaplex

  • Creaciones de mercados de Serum

  • Al aprovechar esta plantilla, puedes crear bots de Telegram para una amplia gama de tareas de monitoreo de Solana, desde eventos de protocolos DeFi hasta el seguimiento de actividades de billetera y más allá.

Si has leído hasta aquí, ¡gracias! Esperamos que esta guía te haya ayudado a comenzar a crear tu propio bot de Telegram de Solana 🤖

\u003ct-24/\u003e\u003ct-25/\u003e