Enviar por Telegram textos en HTML o Markdown

Se pueden enviar textos con formato HTML o Markdown, pero con muchas limitaciones.

La API de telegram nos indica que los Bots admiten el formato básico de los mensajes. Puede utilizar texto en negrita, cursiva, subrayado y tachado, así como enlaces en línea y código preformateado en los mensajes de sus bots. Los clientes de Telegram los renderizarán en consecuencia. Puede utilizar formato de estilo Markdown o HTML.

Las etiquetas soportadas actualmente son:

<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<u>underline</u>, <ins>underline</ins>
<s>strikethrough</s>, <strike>strikethrough</strike>, <del>strikethrough</del>
<b>bold <i>italic bold <s>italic bold strikethrough</s> <u>underline italic bold</u></i> bold</b>
<a href="http://www.example.com/">inline URL</a>
<a href="tg://user?id=123456789">inline mention of a user</a>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>
<pre><code class="language-python">pre-formatted fixed-width code block written in the Python programming language</code></pre>

Este código Python envía un mensaje a un bot de telegram con etiquetas HTML soportadas actualmente por la Api.

import requests
import json
import datetime
import funciones_telegram as ft

url = "https://api.openweathermap.org/data/2.5/weather"

querystring = {"lat":"41.383745","lon":"2.046644","appid":"90eda4c96ac3f30dfa32f0b8bedf2956f9","units":"metric","lang":"38"}

headers = {
    'Cache-Control': 'no-cache'
    }

response = requests.request("GET", url, headers=headers, params=querystring)

data = json.loads(response.content)

hora_UTC = datetime.datetime.fromtimestamp(data['dt'])
amanecer = datetime.datetime.fromtimestamp(data['sys']["sunrise"])
atardecer = datetime.datetime.fromtimestamp(data['sys']["sunset"])

Latitud = str(data['coord']['lat'])
Longitud = str(data['coord']['lon'])
Nubes = data['weather'][0]['main']
Descripcion = data['weather'][0]['description']
Temperatura = str(data['main']['temp'])
Sensacion_termica = str(data['main']['feels_like'])
Temperatura_minima = str(data['main']['temp_min'])
Temperatura_maxima = str(data['main']['temp_max'])
Presion_atmosferica = str(data['main']['pressure'])
Humedad = str(data['main']['humidity'])
Visibilidad = str(data['visibility'])
Velocidad_viento = str(data['wind']['speed'])
Direccion_viento = str(data['wind']['deg'])
Abundancia_nubes = str(data['clouds']['all']) + ' %'
Hora_datos = hora_UTC.strftime('%d-%m-%Y %H:%M:%S')
Codigo_pais = data['sys']['country']
Hora_amanecer = amanecer.strftime('%H:%M:%S')
Hora_atardecer = atardecer.strftime('%H:%M:%S')
Poblacion = data['name']
Codigo_poblacion = str(data['id'])

m = '<b>Condiciones climatologicas</b>' + '\n'
m += '<b>Latitud: </b>' + Latitud + '\n'
m += '<b>Longitud: </b>' + Longitud + '\n'
m += '<b>Nubes: </b>' + Nubes + '\n'
m += '<b>Descripción: </b>' + Descripcion + '\n'
m += '<b>Temperatura: </b>' + Temperatura + '\n'
m += '<b>Sensación termica: </b>' + Sensacion_termica + '\n'
m += '<b>Temperatura minima: </b>' + Temperatura_minima + '\n'
m += '<b>Temperatura máxima: </b>' + Temperatura_maxima + '\n'
m += '<b>Presión atmosferica: </b>' + Presion_atmosferica + '\n'
m += '<b>Humedad: </b>' + Humedad + '\n'
m += '<b>Visibilidad: </b>' + Visibilidad + '\n'
m += '<b>Velocidad del viento: </b>' + Velocidad_viento + '\n'
m += '<b>Dirección del viento: </b>' + Direccion_viento + '\n'
m += '<b>Abundancia de nubes: </b>' + Abundancia_nubes + '\n'
m += '<b>Hora cálculo datos: </b>' + Hora_datos + '\n'
m += '<b>Código país: </b>' + Codigo_pais + '\n'
m += '<b>Hora amanecer: </b>' + Hora_amanecer + '\n'
m += '<b>Hora atardecer: </b>' + Hora_atardecer + '\n'
m += '<b>Población: </b>' + Poblacion + '\n'
m += '<b>Código población: </b>' + Codigo_poblacion + '\n'


ft.aviso_mensaje_html(m)

Este código llama a la Api de Open Weather Map y devuelve información meteorologica de las coordenadas enviadas.

Y la función que realiza en envío al bot de telegram:

def aviso_mensaje_html(Mensaje):
    r =requests.post('https://api.telegram.org/bot9987543:CCH0rnTYm3dEp3ryCWTMVXXkxcGemycBgxg/sendMessage',
              data={'chat_id': chat_id, 'text': Mensaje, 'parse_mode' : 'HTML'})
    print(r.text)

Para mensajes en HTML, “parse_mode” debe ser “HTML” y “Markdown” para formatos de texto en Markdown.

En la Api de telegram podrás encontrar más información de los formatos y etiquetas soportados actualmente, enlace.

Share

Generar Informe Y Enviar Mediante Telegram

Con Python podemos crear un script sencillo que nos permite generar un informe y enviar dicho informe a un bot de telegram.

Las posibilidades son inmensas. Se pueden generar diferentes tipos de informes con diferentes herramientas o aplicaciones,  así como generar consultar a bases de datos y devolver dichos resultados o cualquier otra cosa que se nos ocurra.

Con el siguiente script genero un informe con la aplicación HDSentinel, la cual me da una información muy detallada del estado de mi unidad SSD.

Muevo el informe generado a una carpeta donde se guardan todos los informes generados.

Envío dicho informe a un bot de telegram.

El script esta programado con crontab, para ejecutarse cada 3 días, y enviar dicho informe a las 8:00 de la mañana.

La función que se encarga de generar el informe:

def Report_SSD():
    ahora = datetime.now()
    call('sudo /HDSentinel/hdsentinel-018-arm  -html -r', shell = True)
    call('sudo mv /home/pi/report.html /home/pi/web/ssd/' + str(ahora.date()) + '_report.html', shell = True)
    archivo = "/home/pi/web/ssd/" + str(ahora.date()) + "_report.html"
    te.envio_archivo(archivo)
    return "Se ha generado el archivo report.html"

La función call ejecuta un comando de la terminal.

La función que envía al bot de telegram el informe generado:

def envio_archivo(archivo):
    """
    headers = {'content-type': "multipart/form-data",}
    r = requests.post('https://api.telegram.org/bot999999999:CAH0ppand3dEp7rfCWRtslxVvePycYmBgMk/sendDocument',
              data={'chat_id': chat_id, 'document': open(archivo, 'rb')}, headers = headers)
    print(r.text)
    """
    command = 'curl -s -X POST https://api.telegram.org/bot' + botToken + '/sendDocument -F chat_id=' + chat_id + " -F document=@" + archivo + " -F caption=Documento"
    r = call(command.split(' '))
    print(r)
    return

El bot “bot999999999:CAH0ppand3dEp7rfCWRtslxVvePycYmBgMk“, ovbiamente es inventado, aquí debes poner tu token de acceso al bot de telegram.

La variable chat_id, debe ser declarada o sustituida por tu “chat_id

Ha esta función se le envia como parametro el archivo generado en la función anterior.

archivo = "/home/pi/web/ssd/" + str(ahora.date()) + "_report.html"
te.envio_archivo(archivo)

Tan solo queda programar crontab para que realice el trabajo.

crontab -e

Con la linea anterior editamos el archivo crontab, deberemos añadir una linea similar a la siguiente, deberas cambiar los parametros para adaptarlos a tus necesidades.

00 08 */3 * *  /usr/bin/python /home/pi/Python/tareas/notifica.py
  • 00 – Son los minutos.
  • 08 – Es la hora.
  • */3 – Especifica los días, con /3. Se ejecutara cada 3 días, los días 1,4,7,10,13,16,19,22,25,28,31. Los meses con 31 días, el script se ejecutara el día 31 y el día 1. Si el script quieres que se ejecute cada dia 15 del mes, cambias */3, por 15.
  • /usr/bin/python – Hace referencia a la ruta donde se encuentra python.
  • /home/pi/Python/tareas/notifica.py – Es la ruta donde se encuentra nuestro script, el que vamos a ejecutar.

En este post puedes encontrar información para configurar un bot de telegram.

Share

CREAR UN BOT EN TELEGRAM

Telegram es una aplicación de mensajería similar a WhatsApp, Line o Viber, pero mucho más segura y con muchas más funciones. Son aplicaciones que nos permiten enviar mensajes de texto, documentos, sticks, audio, imágenes o vídeos, cada una con su estilo y peculiaridades diferentes. Los creadores de Telegram se esfuerzan en dar un toque especial a su aplicación, incluyendo constantemente novedades y nuevas funcionalidades.

Desde hace un tiempo, Telegram permite crear Bots para el envió de mensajes de texto, imágenes o vídeo a todos los usuarios que añadan el chat del Bot especifico.

Para crear un nuevo Bot debemos abrir nuestra aplicación de Telegram, ya sea en un dispositivo móvil; tableta o teléfono, o en el ordenador, a través de un navegador web como puede ser Chrome, en el siguiente enlace: https://web.telegram.org, o directamente en la aplicación de escritorio.

Deberemos buscar el creador de Bots, @BotFather, y desde él lo único que necesitamos es escribir /newbot e ir siguiendo las indicaciones para obtener el token de acceso para la API de Telegram de nuestro bot.

En primer lugar escribiremos el nombre de nuestro nuevo Bot y después el apodo que queremos asignarle, el cual debe acabar en bot. También podemos asignar una imagen a nuestro Bot utilizando el comando /setuserpic, todo ello siempre desde el Bot principal padre@BotFather. Para obtener la lista de comandos podemos usar /help, con los que podremos realizar diferentes tareas.

  • /newbot – Crear un nuevo Bot
  • /token – Generar un token de autorización
  • /revoke – Revocar el token de acceso al Bot
  • /setname – Cambiar el nombre del Bot
  • /setdescription – Cambiar la descripción del Bot
  • /setabouttext – Cambiar información sobre el Bot
  • /setuserpic – Cambiar la foto de perfil del Bot
  • /setcommands – Cambiar la lista de comandos del Bot
  • /setjoingroups – Añadir Bot para grupos
  • /setprivacy – Configuración de mensajes privados
  • /deletebot – Borrar Bot
  • /cancel – Cancelar la operación actual

Al crear un nuevo Bot, el sistema nos enviara el token o código de seguridad necesario para interactuar con nuestro Bot, deberemos guardar este código para utilizarlo en las aplicaciones que gestionan el Bot creado.

Con el comando /getUpdate, podemos obtener nuestro Chat ID, necesario para realizar el envio de mensajes a nuestro Bot.

Para que un usuario pueda activar el Bot en su aplicación de Telegram, tan solo debemos de enviarle un mensaje con el siguiente enlace: http://telegram.me/nombreBot donde nombreBot será el nombre que hemos asignado a nuestro Bot.

Share