ErikdeVries.com

Pagina’s


Blog categoriëen


Bouw je eigen Telegram bot

Erik de VriesErik de Vries

Hoewel Telegram in Nederland lang niet zo veel gebruikt wordt als concurrenten zoals WhatsApp biedt het enkele leuke extra’s. Eén daarvan is de mogelijkheid om eenvoudig en via officiële wegen een bot te ontwikkelen. Tijdens enkele verloren uurtjes heb ik de mogelijkheden bekeken en een simpele bot in elkaar gezet. In dit blog leg ik uit hoe ik dat deed.

Wat kan je met een bot?

Een bot is in principe een gebruiker zoals elk ander, met het grote verschil dat er geen mens maar een machine achter zit. Een bot accepteert commando’s en zal daar een actie aan koppelen. Enkele populaire bots zijn de IMDB Bot (zoek een film en plaats uitgebreide details in de chat), Gif Bot (zoek op een animated gif en toon die in de chat) of YouTube Bot (zoek een video en toon die in de chat). De mogelijkheden zijn vrijwel onbeperkt.

Mijn doel

Mijn doel was simpel, het onderzoeken van de mogelijkheden om vervolgens een simpele bot te bouwen. Voor de bot had ik enkele ideeën, één daarvan was het kunnen opvragen van een actueel beeld van een IP webcam. Denk hierbij aan een webcam die je thuis hebt hangen (je kan even snel checken of er iets aan de hand is) of zoals in onderstaande screenshot van een parkeerterrein (of er nog vrije plaatsen zijn).

Telegram IP webcam bot

Aan de slag

Het lezen van de informatie pagina van Telegram is een must voordat je verder gaat. Ze leggen hier netjes uit hoe je een bot aanmaakt (dat doe je via een bot genaamd the BotFather) en welke frameworks je kan inzetten om de daadwerkelijke bot te bouwen.

Mijn keuze voor een framework viel op Telepot, een Python framework welke actief ontwikkeld wordt en veel van de recente bot mogelijkheden ondersteunt. Bijkomend voordeel is dat Python een lage leercurve heeft zodat ik snel een proof-of-concept kan opzetten.

Een bot in 80 regels code

Na het doornemen van de meegeleverde voorbeeld bots (zie de “examples” directory) heb ik één van de voorbeelden gepakt en ben ik deze gaan aanpassen. Vergeet niet dat het puur om een proof-of-concept gaat, het hoeft dus geen high-end code te zijn.

In de meest basale vorm bestaat een bot uit de volgende code. Je stelt de API token in die je van the BotFather hebt ontvangen, vervolgens geef je aan dat de functie “handle” moet worden aangeroepen om berichten af te handelen. In de handle functie vraag je vervolgens het chat_id (nodig om vanuit de bot te reageren) en het commando op. In onderstaand voorbeeld zal de bot de reactie “Hallo!” terug sturen als je de bot het commando “/camera” stuurt.

import telepot

def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)
    command = msg['text']

    if command == '/camera':
        bot.sendMessage(chat_id, 'Hallo!')

bot = telepot.Bot('[TOKEN]')
bot.message_loop(handle)
print 'I am listening ...'

while 1:
    time.sleep(10)

Zoals je ziet is de opzet uitermate simpel. Aan de hand van de Telegram Bot API en de Telepot library kan je nu nieuwe features toevoegen. De eerste stap voor mijn bot was om een afbeelding uit een IP webcam te trekken en die terug te sturen naar de gebruiker. Mijn Foscam webcam biedt out-of-the-box een url waarop je een jpeg afbeelding kan opvragen. De bot hoeft deze slechts te downloaden en terug te sturen, in de meest eenvoudige vorm kan dat als volgt:

import urllib

download = urllib.urlretrieve('[URL]', '/cam.jpg')
f = open(download[0], 'rb')
bot.sendPhoto(chat_id, f)

Mijn missie was voltooid, ik weet nu hoe je een simpele bot aanmaakt en laat reageren op commando’s. Aangezien ik deze bot ook daadwerkelijk wilde gaan gebruiken heb ik nog enkele zaken toegevoegd, te weten:

Uiteindelijk had ik in slechts 80 regels code een volwaardige bot draaien.

Conclusie

Het verbaasde mij hoe eenvoudig het is om een functionele bot op te zetten. In slechts een paar uur richt je een bruikbare bot in (hoewel die op genoeg onderdelen te verbeteren is). Mocht je een fervent Telegram gebruiker zijn (of als bedrijf Telegram gebruiken) dan zie ik genoeg redenen om eens naar de mogelijkheden van een bot te kijken.

Ik kan niet meer dan duimen dat ook WhatsApp deze mogelijkheden gaat bieden!

Zoals te verwachten is mijn naam Erik de Vries. Op 16 maart 1981 ben ik in Amersfoort geboren, waar ik nog steeds woon. In 2010 heb ik de studie Human Media Interaction aan de Universiteit Twente afgerond, waarmee een eind is gekomen aan een lange periode van “school” gaan. Tegenwoordig werk ik bij Enrise waar ik samen met collega’s hoogwaardige internettoepassingen zoals apps, API’s, zoeksystemen, sites, shops & portals ontwikkel. Tevens heb ik een eenmanszaak waarin ik internetdiensten ontwikkel.

Reacties 0
Er zijn nog geen reacties geplaatst.