Explicamos cómo leer los mensajes que se le envían a un bot de Telegram desde una aplicación desarrollada con Visual Studio Community C#. Incluimos el código fuente en C# de la aplicación completa.

Requisitos para poder leer mensajes de Telegram enviados a bot usando C#

En primer lugar necesitaremos disponer de la App de mensajería Telegram, o bien instalada en un smartphone o bien en su versión de escritorio en un PC o bien la versión web.

Necesitaremos también disponer de un bot de Telegram creado y activo, y saber cuál es su token de seguridad. Todo esto está explicado paso a paso en el siguiente artículo:

Para el desarrollo de la aplicación usaremos el IDE Microsoft Visual Studio Community, que es gratuito. Y como lenguaje de programación usaremos C# o C Sharp. Por lo tanto necesitaremos disponer de este IDE de desarrollo. En el siguiente enlace explicamos cómo descargarlo e instalarlo:

Para la conexión con el API de Telegram usaremos dos librerías (DLL), que hay que agregar en las referencias del proyecto. En el siguiente enlace explicamos cómo instalar estas librerías usando NuGet en Visual Studio .NET:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Abriremos Visual Studio .Net y crearemos un nuevo proyecto (aplicación de consola). Para ello pulsaremos en «Archivo» – «Nuevo» – «Proyecto…»:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Seleccionaremos «Visual C#» – «Escritorio de Windows» y elegiremos «Aplicación de consola (.NET Framework)». Introduciremos el nombre para la aplicación, por ejemplo «LeerMensajesBotTelegram», la ubicación y el Framework a usar, en nuestro caso «.NET Framework 4.6.1»:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Para evitar errores de compilación es conveniente copiar a la carpeta Debug de nuestro proyecto (donde se creará el fichero .exe de la aplicación) los ficheros DLL y XML necesarios que, o bien podemos descargar o bien instalar con NuGet, como hemos indicado anteriormente:

  • Telegram.Bot.dll
  • Newtonsoft.Json.dll

Ambos ficheros y el resto necesarios se incluyen en la descarga de la aplicación completa de ejemplo, por lo que también nos servirán para compilar y ejecutar nuestra aplicación:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Agregaremos la referencia a estos dos ficheros DLL desde nuestro proyecto Visual C#. Para ello accederemos al menú «Proyecto» – «Agregar referencia»:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Pulsaremos en «Examinar» y seleccionaremos los ficheros DLL Telegram.Bot.dll y Newtonsoft.Json.dll (desde la ubicación donde los tengamos alojados):

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Y pulsaremos «Aceptar»:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Si se han agregado correctamente nos aparecerán como referencias del proyecto:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

A partir de ahora podremos escribir la aplicación C# que escuchará y leerá los mensajes que se envíen al bot de Telegram (o bien con /xxx si se ha marcado la opción de seguridad correspondiente, o bien si se nombra al bot con @nombre_bot o bien todos los mensajes de los grupos a los que esté unido si así se ha indicado en la configuración, opción /setprivacy del bot).

Se trata de una aplicación de consola, que no tiene modo gráfico y por lo tanto no dispone de formularios ni de componentes visuales. Será únicamente una ventana de MS-DOS que estará escuchando los mensajes que se envíen al bot de Telegram que coincida con el token de seguridad indicado.

Añadiremos los using necesarios en la parte superior:

using System;
using System.Linq;
using Telegram.Bot;
using Telegram.Bot.Args;
using Telegram.Bot.Types.Enums;

En la clase definiremos una variable de tipo TelegramBotClient con el token de seguridad obtenido al crear el bot (en XXX:XXX):

private static readonly TelegramBotClient miBotTelegram =
    new TelegramBotClient("XXX:XXX");

Estableceremos el código para el inicio del programa (main):

public static void Main(string[] args)
{
  //Escuchamos los mensajes enviados en los grupos donde esté el bot
  var me = miBotTelegram.GetMeAsync().Result;
  Console.Title = "Conectado a bot de Telegram " + me.Username;

  //Asignamos los eventos de lectura de mensajes y captura de errores
  miBotTelegram.OnMessage += EventoBotTelegramLeerMensajes;            
  miBotTelegram.OnReceiveError += EventoBotTelegramErrorRecibido;

  //Iniciamos la lectura de mensajes
  miBotTelegram.StartReceiving(Array.Empty<UpdateType>());
  Console.WriteLine($"Escuchando mensajes de @{me.Username}");

  //Si se pulsa INTRO en la consola se detiene la escucha de mensajes
  Console.ReadLine();
  miBotTelegram.StopReceiving();
}

Y añadimos el evento de escucha de mensajes:

//Evento que lee los mensajes de los grupos donde esté el bot de Telegram        
private static async void EventoBotTelegramLeerMensajes(object sender,
    MessageEventArgs eventoArgumentosMensajeRecibido)
{
  var mensaje = eventoArgumentosMensajeRecibido.Message;

  if (mensaje == null || mensaje.Type != MessageType.Text) 
    return;

  Console.WriteLine($"Mensaje de @{mensaje.Chat.Username}:" + mensaje.Text);

  switch (mensaje.Text.Split(' ').First())
  {
    //Según el mensaje leído podremos hacer cualquier tarea
    case "/hola":
      await miBotTelegram.SendTextMessageAsync(mensaje.Chat.Id,
          $"Hola {mensaje.Chat.Username} ¿qué tal?");
      break;
    default:
      break;
  }
}

private static void EventoBotTelegramErrorRecibido(object sender,
    ReceiveErrorEventArgs eventoArgumentosErrorRecibidos)
{
  Console.WriteLine("Error recibido: {0} — {1}",
      eventoArgumentosErrorRecibidos.ApiRequestException.ErrorCode,
      eventoArgumentosErrorRecibidos.ApiRequestException.Message);
}

Una vez añadido el código podremos compilar la aplicación y comprobar que funciona correctamente:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Se abrirá una ventana de MS-DOS y si el token se ha establecido correctamente mostrará el mensaje:

Escuchando mensajes de @Nombre_Bot_Telegram

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

La aplicación permanece abierta y escuchando mensajes, si ahora accedemos a Telegram e introducimos /hola en el bot nos deberá responder un «Hola nombre_usuario ¿qué tal?»:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Si mostramos la ventana de la aplicación veremos que va capturando todos los mensajes que se envíen al bot con /xxx o bien todos los mensajes si la opción de setprivacy está a true:

Desarrollar aplicación de escritorio Windows que lea mensajes enviados a Bot de Telegram con C#

Anexo

Descarga de la aplicación completa y las DLL necesarias en C#

Código fuente completo de la aplicación en C# que escucha y lee los mensajes enviados a un bot de Telegram

using System.Linq;
using Telegram.Bot;
using Telegram.Bot.Args;
using Telegram.Bot.Types.Enums;

namespace LeerMensajesBotTelegram
{
    class Program
    {
        //Conectamos con el bot de Telegram usando el token recibido al crearlo
        private static readonly TelegramBotClient miBotTelegram =
            new TelegramBotClient("xxx:xxx-xxx");
        public static string nombreBot;

        public static void Main(string[] args)
        {
            //Escuchamos los mensajes enviados en los grupos donde esté el bot
            var me = miBotTelegram.GetMeAsync().Result;
            nombreBot = me.Username;
            Console.Title = $"Conectado a bot de Telegram @{nombreBot}...";

            //Asignamos los eventos de lectura de mensajes y captura de errores
            miBotTelegram.OnMessage += EventoBotTelegramLeerMensajes;            
            miBotTelegram.OnReceiveError += EventoBotTelegramErrorRecibido;

            //Iniciamos la lectura de mensajes
            miBotTelegram.StartReceiving(Array.Empty<updatetype>());
            Console.WriteLine($"Escuchando mensajes de @{nombreBot}...");

            //Si se pulsa INTRO en la consola se detiene la escucha de mensajes
            Console.ReadLine();
            miBotTelegram.StopReceiving();
        }

        //Evento que lee los mensajes de los grupos donde esté el bot de Telegram        
        private static async void EventoBotTelegramLeerMensajes(object sender,
            MessageEventArgs eventoArgumentosMensajeRecibido)
        {
            var mensaje = eventoArgumentosMensajeRecibido.Message;

            if (mensaje == null || mensaje.Type != MessageType.Text) 
                return;

            Console.WriteLine($"Mensaje de @{mensaje.Chat.Username}:" + mensaje.Text);

            switch (mensaje.Text.Split(' ').First())
            {
                //Según el mensaje leído podremos hacer cualquier tarea
                case "/hola":
                    await miBotTelegram.SendTextMessageAsync(mensaje.Chat.Id, 
                        $"Hola {mensaje.Chat.Username} ¿qué tal?");
                    break;
                default:
                    break;
            }
        }

        private static void EventoBotTelegramErrorRecibido(object sender,
            ReceiveErrorEventArgs eventoArgumentosErrorRecibidos)
        {
            Console.WriteLine("Error recibido: {0} — {1}",
                eventoArgumentosErrorRecibidos.ApiRequestException.ErrorCode,
                eventoArgumentosErrorRecibidos.ApiRequestException.Message);
        }
    }
}