Oma Telegram bot PHP -kielellä

Sain ajatuksen rakentaa ikioma Telegram Bot PHP:lla, ihan vain oppimismielessä, kesän verryttelykoodauksena 😉 . Se olikin kohtuullisen helppoa, sillä osaan jotenkin PHP:n alkeet ja internet on pullollaan esimerkkejä. Olen käyttänyt Telegram Messengeriä tähän asti pääasiassa yhteydenpitoon Ingress -peliyhteisön jäsenten kanssa. Telegramin käytön yhteydessä olen oppinut käyttämään toisten tekemiä botteja, ne ovat näppäriä ja hauskojakin apureita. Nyt opettelin tekemään oman Telegram botin.
(Mikä on bot eli botti?)

Mikä on Telegram?

Telegram Messenger eli lyhyesti TG, on Whatsappin kaltainen pikaviestinsovellus, mutta ilman Facebookin seuranta- / vakoilukytkentöjä 😉 Sitä käytetään joko maksuttomilla mobiilisovelluksilla ( Android, iOS, WP), tietokonesovelluksilla (Windows, Mac, Linux) tai selaimella webissä (Chrome -sovellus). Sovellusta käyttöönotettaessa luodaan oma käyttäjätunnus.

Telegram Botin luominen

Käyn seuraavaksi läpi botin tekemisen vaiheet.
Omien TG -tunnuksien myötä siirrytään ko. palveluun jollain TG -sovelluksella ja etsitään palvelusta käyttäjää @BotFather (bot itsekin).
Annetaan @BotFather’ille viestikentässä komento /help
se listaa kaikki komennot, joita voi käyttää oman botin luomisessa ja interaktiossa @BotFather’in kanssa.

Oman botin luomisen aloitus komennolla /newbot ja seurataan @BotFather’in ohjeita.

Oma bot luodaan ”keskustelussa” @BotFather’in kanssa

Telegram botin luominen on myös opastettu englanniksi selkeästi TG:n sivuilla https://core.telegram.org/bots#6-botfather . Botin luomisen yhteydessä saadaan botille oma token, pieni tunnuskoodi, jota tarvitaan botin ohjelmoinnissa myöhemmin, se siis talteen!

Omat komennot botille

Omalle botille voi määrittää @BotFather’in avulla komentoja, joihin sitten omassa PHP:ssa reagoidaan. Tässä tarvitaan apuna siis web -sivustoa, jossa PHP -koodi, tuo itse tehty botin toimintalogiikka asustaa. Sivustolla tulee olla SSL -suojaus, muuten kaikki Telegran APIn toiminnallisuudet eivät ole käytössä. Ohjelmointirajapintaan voi tutustua täällä https://core.telegram.org/bots/api

Botin tottelemat komennot määritetään @BotFather’ille keskustellen samaan tapaan kuin itse botin luominenkin. Aloitus komennolla /setcommands , jonka jälkeen määritetään omat komennot. Määrittämisen jälkeen ne näkyvät oman botin kanssa keskustellessa kirjoittamalla kauttaviiva [ / ] viestikenttään tai painamalla kauttaviivapainiketta.

Kauttaviiva viestikenttään tai kauttaviivapainike

Vielä nuo omalle botille itse tehdyt komennot eivät varsinaisesti tee mitään, sitä varten tarvitaan sitä PHP -koodia, jossa tehtyjen komentojen toiminnallisuus määritetään. Löysin Youtubesta hyvän tutoriaalin, jonka pohjalta itse valmistin oman bottini keskustelukoodin, kaikki kunnia siis Patrick Lemken v. 2015 tekemille videoille, jotka löytyvät Youtubesta täältä.

PHP -koodin on siis oltava palvelimella avoimessa internetissä, esim.:

https://munserveri.fi/kansio/munbottikoodini.php

Tässä minun palvelimellani asuva esimerkkibotin PHP -koodini:

<?php

$botToken = "SAAMASI_BOT_TOKEN_TULEE_TÄHÄN";
# tänne laitetaan siis botin luomisessa saatu token

$tgApi = "https://api.telegram.org/bot".$botToken;
# tässä osoite TG APIin ja sen perään konkatenoitu token

$update = file_get_contents('php://input');
# noudetaan viestit, ne tulevat palvelusta JSON -formaatissa
# tallennetaan palautuva data muuttujaan 

$updateArray = json_decode($update, TRUE);
# muunnetaan APIlta saatu JSON -muotoinen data Arrayksi

# https://api.telegram.org/botSAAMASI_BOT_TOKEN_TULEE_TÄHÄN/getupdates
# palautuvan datan rakennetta voi tutkia yo. komennon avulla selaimessa

$chatId = $updateArray["message"]["chat"]["id"];
# tallennetaan id, jotta botti osaa vastata oikealle kohteelle

$message = $updateArray["message"]["text"];
# napataan arraysta haluttu tieto eli viesti, jonka käyttäjä lähetti TG:llä 


# alla komentoihin vastaaminen, komennot määritetään siis TG:ssä @BotFather'in kanssa
switch($message)  {
    case "/elamantarkoitus":
        sendMessage($chatId, "Olisiko se 42?");
    break;
    case "/moi":
        sendMessage($chatId, "Moido!");
    break;
    default:
        # kaikki muut tilanteet paitsi nuo caset
        sendMessage($chatId, "Hei, olen botti ja tottelen vain / kauttaviivalla alkavia komentoja!");
}

function sendMessage ($chatId, $message) {
	$url = $GLOBALS['tgApi']."/sendmessage?chat_id=".$chatId."&text=".urlencode($message);
    file_get_contents($url);
    # tämä on viestin lähettämisen funktio
}

#  webhook pitää laittaa päälle osoittamaan tämän PHP:n sijaintiin palvelimella

?>

Jotta botti ”toimisi” eli jatkuvasti kuuntelisi sille mahdollisesti syötettyjä komentoja, on vielä asetettava ns. Webhook. Webhookin avulla Telegram -palvelu osaa välittää käytetyt komennot itse tehtyyn PHP -koodiin palvelimella. Webhookin asettaminen tapahtuu selaimen avulla näin: kirjoitetaan alla oleva komento selaimen osoitekenttään ja suoritetaan, muistetaan tietty laittaa se oma token ja oman PHP:n sijainti tuohon ritirampsuun.

https://api.telegram.org/botSAAMASI_BOT_TOKEN_TULEE_TÄHÄN/setwebhook?url=https://munserveri.fi/kansio/munbottikoodini.php

Saat palvelusta selainikkunassa hyväksynnän, botti on toiminnassa.

{"ok":true,"result":true,"description":"Webhook was set"}

Bottia vaan testaamaan seuraavaksi.

Oma Telegram Bot

Jatkokehittelyä

Mitä botin voi laittaa tekemään / vastaamaan tehtyihin komentoihin? Periaatteessa vaikka mitä, kannattaa tutustua aiemmin mainittuun TG:n ohjelmointirajapintaan.

Itselläni on ajatuksena etälukea kotona olevia Ruuvitag -antureita, mutta siitä kirjoitankin toisella kertaa.

Botin rakentelussa voi käyttää myös valmiita kirjastoja kuten esimerkiksi Githubista löytyvä PHP Telegram Bot, https://github.com/php-telegram-bot. Ehkä tutustun tuohonkin jossain vaiheessa.

Jätä kommentti

This site uses Akismet to reduce spam. Learn how your comment data is processed.