Maak je eigen telegram bot

Bij DJO gebruiken we ‘Telegram’ als chat-app. Deze app heeft een aantal voordelen boven bijvoorbeeld whatsapp, namelijk:

  • Je kunt in een groep zitten zonder dat iedereen je telefoonnummer kan zien
  • Je kunt ook zonder telefoon op telegram (met een @usernaam)
  • Telegram is een ‘open’ netwerk met een publieke API

Van dit laatste punt gaan we in dit artikel dankbaar gebruik maken. Telegram heeft een API (Application Programming Interface) waarmee het mogelijk is om vanuit je eigen programma met het telegram netwerk te communiceren. Je kunt dus een programmaatje maken dat telegram berichten ontvangt en verstuurt. Een dergelijk programma noemen ze een ‘Bot’, kort voor ‘Robot’. In dit artikel leg ik uit hoe je zelf een Telegram Robot kunt maken.

Wat kun je met een telegram robot?

Alles wat een mens op telegram kan, kan een robot ook. Je kunt hem bijvoorbeeld lid maken van een groep, hij kan plaatjes, gifs, chats, etc. ontvangen en versturen. Het leuke van een bot is dat hij op internet van alles kan ophalen of doorzoeken. Je zou bijvoorbeeld een ‘Google bot’ kunnen maken, die alles wat je hem stuurt op google opzoekt en dan het eerste resultaat terugstuurt. We hebben, zoals je misschien al weet, ook een DJO Telegram Bot. Deze stuurt een berichtje in de DJO chat zodra er een nieuw project- of nieuwsartikel is geplaatst op de website. Handig toch?

Om te zien wat je allemaal nog meer met een bot kunt doen, zie deze link:

https://core.telegram.org/bots

Hoe maak je zelf een telegram bot?

Er is op telegram een bot genaamd @BotFather waarmee je zelf een nieuwe bot kunt aanmaken. Je vraagt aan @BotFather om een nieuwe bot te maken met het /newbot commando. Hij vraagt je dan hoe de bot moet heten en om een omschrijving. Daarna krijg je een ‘Bot Token’ (lange lijst tekens) waarmee je je bot kunt aanspreken via de Bot API. Dit token heb je nodig om in je programma te verwerken.

Je eerste bot maken

Een telegram bot kun je in principe in elke programmeertaal maken die je maar wilt. Voor een aantal programmeertalen zijn al libraries gemaakt die het een stuk makkelijker maken om een bot te bouwen. In dit voorbeeld gebruik ik Python, omdat dat een vrij makkelijk te leren taal is en ik het een fijne programmeertaal vind. Kun je nog geen python programmeren, kijk dan hier en hier op onze site om er meer over te leren.

Om een python bot te maken is er een heel mooie module beschikbaar op internet:

https://python-telegram-bot.org/

Hiermee is het erg makkelijk om je eerste bot te maken (als je tenminste een beetje python kent). Op de site is een goede tutorial te vinden die je ook kunt volgen. Om een snelle start te maken, hier een stukje code waarmee je kunt beginnen:


from telegram.ext import Updater, CommandHandler

def hello(bot, update):
  update.message.reply_text('Hello {}'.format(update.message.from_user.first_name))

updater = Updater('YOUR TOKEN HERE')
updater.dispatcher.add_handler(CommandHandler('hello', hello))

updater.start_polling()
updater.idle()

Bij ‘YOUR TOKEN HERE’ vul je het token in dat je van @BotFather hebt gekregen. Daarna bewaar je deze code in een bot.py (of hoe je hem ook wilt noemen), en start je het programma op. Als je nu met je bot chat, kun je het commando ‘/hello’ geven. De bot zal dan antwoorden met ‘Hello <jouw naam>’.

De code werkt als volgt:

  1.  Er wordt een functie gemaakt die aangeroepen gaat worden als er een commando wordt gestuurd naar de bot (def hello)
  2. Er wordt een instance van ‘updater’ gemaakt: dit is de class die met het Telegram netwerk praat, en waarmee je eigenlijk alles met telegram kunt uitvoeren
  3. Er wordt een ‘Handler’ toegevoegd van het type ‘CommandHandler’, die reageert op het ‘hello’ commando. Hieraan wordt de functie ‘hello’ gekoppeld die we ervoor hadden gemaakt.
  4. De start_polling() en idle() calls zijn om de updater te laten verbinden met telegram en te laten wachten op berichten of commando’s.

Elke ‘handler’ functie (hello in ons geval) krijgt altijd 2 parameters mee: bot en update. In bot zit een referentie naar ‘jouw’ bot. In update zit het bericht waarop deze handler is getriggered. Je kunt dat bericht dus helemaal bekijken en er allerlei zaken van opvragen. In dit geval wordt van de ‘from_user’ (de afzender) de ‘first_name’ (voornaam) opgevraagd en weer in het antwoord bericht terug gestuurd. Naast update.message.reply_text(), kun je ook reply_html() (voor HTML), of reply_document() (voor een link of ander document) gebruiken.

Als je het programmaatje start zie je als het goed is niets. Dat is goed, want dat betekent dat de bot nu actief is. Probeer maar eens het /hello commando naar je bot te sturen. Als het goed is zegt hij hallo terug!

Reageren op ‘gewone’ chats

Je bot zal nu alleen nog op het ‘hello’ commando reageren. Laten we de code wat uitbreiden zodat hij ook op ‘gewone’ chats gaat reageren:


from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

def hello(bot, update):
  update.message.reply_text('Hello {}'.format(update.message.from_user.first_name))

def bericht(bot, update):
  print("Iemand stuurde: {}".format(update.message.text))
  update.message.reply_text("Ik ontving: " + update.message.text)

updater = Updater('YOUR TOKEN HERE')
updater.dispatcher.add_handler(CommandHandler('hello', hello))
updater.dispatcher.add_handler(MessageHandler(Filters.text, bericht))

updater.start_polling()
updater.idle()

Als je deze code draait, en je stuurt een berichtje naar je bot, dan zal hij je berichtje weer terugsturen met 'Ik ontving:' ervoor!

Hoe nu verder?

Ik hoop dat je de beginselen nu een beetje snapt. Verzin een leuke functie voor je telegram bot, en maak er iets moois van! Houd wel in gedachten dat een Telegram Bot door iedereen op internet aangesproken kan worden, ook mensen die je niet kent.. Zorg er dus voor dat je bot nooit privé gegevens deelt!