NUEVO: Helius adquiere Light Protocol
Crea un bot de Telegram para Solana en menos de 100 líneas de código
Blog/Desarrollo

Crea un bot de Telegram para Solana en menos de 100 líneas de código

Ingeniero de integracionesHet Dagli en XHet Dagli en LinkedIn
4 min de lectura

¿Quieres mantenerte al día sobre los eventos de Solana en tiempo real? Esta guía te mostrará cómo crear un bot de Telegram capaz de monitorear actividades on-chain. Usaremos un monitor de ventas de NFT como ejemplo, pero puedes adaptar fácilmente la plantilla que crearemos a otros casos de uso.

Así 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 monitorees ventas de NFT, protocolos DeFi o billeteras específicas, esta configuración te ofrece una base sólida.

Configura tu proyecto

Pongamos tu proyecto en funcionamiento:

1. Clona el repositorio

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

cd cloudfare-telegram-template

2. Instala las dependencias

Código
npm install

3. Configura las 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 instrucciones para elegir un nombre y un nombre de 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>/getUpdates
  4. Busca el campo "chat":{"id": en la respuesta. Este es tu TELEGRAM_CHAT_ID.
  5. Mira este video para consultar una guía paso a paso:

HELIUS_API_KEY Tu clave de API de Helius (obtenla en Helius)

AUTH_TOKEN Abre Bash y genera un AUTH_TOKEN único:

Código
openssl rand -base64 32

4. Despliega en Cloudflare

Código
npm run deploy

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

5. Crea tu webhook

Usa la URL de despliegue del paso anterior para crear tu webhook:

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

Después de ejecutar este comando, recibirás una respuesta que confirma que se completó correctamente.

Puedes ver el nuevo webhook que configuraste en tu panel de Helius.

6. Edita tu webhook

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

  1. Ve a la sección de webhooks de tu panel
  2. Deberías ver el webhook que acabas de crear en la lista. 
  3. Haz clic en el webhook para editar su configuración.
  4. Aquí puedes modificar varios parámetros, como:
    • Los tipos de transacciones que quieres monitorear
    • Las direcciones de billeteras específicas que quieres monitorear
    • La red (mainnet, devnet)

Explicación del código

Primero, examinemos nuestras importaciones y definiciones de tipos:

Código
import { Hono } from 'hono';

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

‍Usamos Hono, un framework web ligero para Cloudflare Workers. El tipo Env define nuestras variables de entorno para las integraciones con Helius y Telegram.

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

Código
const app = new Hono<{ Bindings: Env }>();

app.get('/', (c) => c.text('Solana Action Bot is running!'));

Esto crea nuestra aplicación y configura un endpoint sencillo para comprobar su estado.

Ahora, creemos nuestro webhook:

Código
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 });
});

Este endpoint configura nuestro webhook de Helius. En este ejemplo, monitoreamos las ventas de NFT del programa Magic Eden v2, pero puedes modificar transactionTypes e accountAddresses según tus necesidades.‍

Así enviamos mensajes a Telegram:

Código
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 da formato a nuestro mensaje y lo envía a nuestro chat de Telegram.

Por último, procesemos los datos entrantes del webhook:

Código
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');
});

‍Aquí procesamos los datos de Helius y enviamos mensajes con formato a Telegram. Según tu caso de uso, puedes personalizar esta parte para gestionar distintos tipos de transacciones o extraer información diferente.

Opciones de personalización

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

  1. Modifica transactionTypes al crear el webhook para monitorear distintos eventos
  2. Cambia accountAddresses para monitorear programas o billeteras específicos
  3. Ajusta el formato de los mensajes en el endpoint /webhook según 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 variedad de datos y eventos que puedes monitorear. Sin embargo, no te limites solo a los eventos definidos explícitamente. Los webhooks de Helius son increíblemente versátiles y pueden monitorear una amplia variedad de actividades on-chain, incluso aquellas que no se analizan ni mencionan directamente en nuestra documentación.

Estos son algunos ejemplos de eventos que podrías monitorear:

  • Transferencias de tokens SPL específicos
  • Nuevos despliegues de programas
  • Creaciones de pools de Raydium o adiciones de liquidez
  • Creaciones de propuestas de gobernanza o votaciones
  • Lanzamientos de candy machines de Metaplex
  • Creaciones de mercados de Serum

Con esta plantilla, puedes crear bots de Telegram para una gran variedad de tareas de monitoreo en Solana, desde eventos de protocolos DeFi hasta el seguimiento de la actividad de billeteras y mucho más.

Si llegaste hasta aquí, ¡gracias! Esperamos que esta guía te haya ayudado a comenzar a crear tu propio bot de Telegram para Solana. Suscríbete a nuestro boletín para no perderte ninguna novedad sobre Solana. ¿Quieres profundizar más? Explora los artículos más recientes del blog de Helius y continúa hoy mismo tu recorrido por Solana.

Recursos adicionales

  1. Documentación de Helius
  2. Documentación de Cloudflare Workers
  3. API de bots de Telegram
  4. Documentación de Hono

Suscríbete a Helius

Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos

Imagen ampliada