Ako som Messenger bota vyrobil

V jednu hnusnú jesennú nedeľu som ráno pozeral postrehy z posledného „podujatia“ Google, kde predstavili nové telefóny ktorých ťahúňom bola umelá inteligencia.. ako inak nedostupná v našom jazyku. A tak ma napadlo, že už dlhšiu dobu som plánoval vyskúšať vytvoriť chatovacieho bota pre Messenger. Facebook dávnejšie predstavil túto možnosť.

A tak som sadol za počítač otvoril Google a napísal dané kľúčové výrazy ktoré ma smerovali k pár tutorialom. Začal som týmto kde som pochopil čo a ako a ako vôbec Facebook s vami komunikuje.

Princíp je jednoduchý avšak realizácia je občas obtiažna. Tento post nie je tutorial preto vám nebudem krok po kroku vysvetľovať čo treba urobiť ale aspoň približne spomeniem čo všetko ma na tejto ceste čakalo a čo bolo treba riešiť.

Kroky v tutorialy hovorili jednoznačne – potrebujem facebook stránku na ktorú budú ľudia písať svoje správy. Tak som si ju založil. Nebolo tam treba riešiť nič konkrétne iba som jej dal meno a fotku a išiel som ďalej.

Ďalším krokom bola Facebook aplikácia. Treba nabehnúť na tento web a tam si založiť novú Facebook App.

Po vytvorení aplikácie nasleduje pridanie „Produktu“ ktorý bude daná aplikácia obsluhovať a tým bola Messenger platform. Po pridaní nakonfigurujeme daný „produkt“ tým, že si vytvoríme token pre našu Facebook stránku ktorá bude bránou pre komunikáciu s našim botom. Tento token je zakaždým pri výbere stránky iný preto sa nečudujte keď sa všetko vráti do pôvodného stavu, token bude do znovugenerovania rovnaký.

Ďalej si nastavíme Webhook. A to je tá kľúčová záležitosť. Tu dáme link na náš server ktorý bude správy spracovávať. Pozor! Link musí byť HTTPS pretože inak s ním Facebook komunikovať nebude. Link môže smerovať ako na priečinok – takže index.php tak na konkrétny súbor na serveri. Tu bude Facebook posielať JSON POST requesty. Dôležité je pri potvrdzovaní Webhooku vytvoriť cieľový súbor ktorý vráti Facebooku to „čo chce počuť“. Kód vyzerá nasledovne, kde do $access_token dosadíme náš token pre daný web a do $verify_tokenu dosadíme zvolený text pri nastavovaní Webhooku:

$access_token = "token";
$verify_token = "verify_token";
$hub_verify_token = null;
 
if(isset($_REQUEST['hub_challenge'])) {
    $challenge = $_REQUEST['hub_challenge'];
    $hub_verify_token = $_REQUEST['hub_verify_token'];
}
if ($hub_verify_token === $verify_token) {
    die($challenge);
}

Následne sa tutorial ktorý som vyššie spomenul venuje tvorení bota s pomocou nástroju nGrok ktorý pokiaľ nemáte vlastný HTTPS server môžete pre test využiť.

Potrebujeme subscribe!

Nie nejdeme žebrať o odbery ako youtuberi ale tu začína pravá sranda kde budeme potrebovať šikovného pomocníka – cURL. Ja som využil svoj linuxový server cez ktorý som posielal cURL príkazy.

curl -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=vas_token"
Ak sa nám vráti success true vyhrali sme a teraz bude Facebook odosielať správy na náš server.

Tu! Nájdeme kúsok príkladového kódu pre nášho bota. Tento kód je samozrejme ten na ktorý Facebook bude posielať svoje POST requesty a link na tento súbor sme si definovali vo Webhooku.

Tu! Nájdeme pekný video návod ktorý nám všetky tieto teoretické kroky ukáže v praxi, a to sa hodí.

Keď už náš bot pracuje

Keď už náš bot pracuje prichádza otázka čo všetko sa dá vytvoriť.
Možno by sme chceli znova informácie o človeku ktorý s botom komunikuje: to uskutočníme jednoducho jediné čo potrebujeme je náš token a ID profilu ktorý s botom komunikuje, a potom využijeme nášho múdreho cURLa alebo jednoduchý file_get_contents() z PHP.

$pid = (string)$sender;
$getUserRequest = file_get_contents('https://graph.facebook.com/v2.6/'.$sender.'/?access_token='.$access_token);
$getUser = json_decode($getUserRequest);

Následne si môžeme získať meno a priezvisko komunikujúceho peknou formou - $getUser->first_name a priezvisko získame $getUser->last_name.
Možností je veľa, čo sa dá s týmto botom robiť. Odporúčam prelistovať celú dokumentáciu aby ste zistili ako môžete odoslať napríklad obrázok, video, či tlačítka na ktoré som sa ja osobne ešte nedostal.

Nezabudnite na celý princíp ako funguje komunikácia s Facebookom.
Človek odošle správu, Facebook nám odošle JSON POST request. My ho spracujeme a pošleme JSON POST request Facebooku ktorý odošle človeku výslednú správu. Z tohto vyplýva, že my môžeme poslať aj 3 správy naraz a takisto môžeme prakticky hocikedy poslať niekomu správu z nášho bota. Avšak netreba to zneužívať na spam lebo to by sa ani vám nepáčilo.

Ako spraviť nášho bota verejným

Jednoduchá záležitosť - stačí nabehnúť na developers.facebook.com/apps/, vybrať svoju aplikáciu, otvoriť produkt Messenger a požiadať o pages_messaging. Následne treba splniť požiadavky ako sú ikona aplikácie alebo Privacy policy a počkať si na vyjadrenie Facebooku. Mojho bota do jedného dňa bez problémov schválili ale keď som ho šiel testovať z iných účtov ako môjho/testerov – nešlo to. A to preto, že treba svojho bota označiť ako Public jednoduchým rozkliknutím menu App Review a následne Make * public? Zakliknúť na Yes. A odteraz váš bot funguje pre širokú verejnosť.

Tak a je hotovo, bot funguje je verejný a je to paráda!
Celkovo možnosti týchto botov sú podľa môjho názoru mocné a viem si ho prestaviť na veľmi veľa vecí, navyše pokiaľ sa niekto posnaží aj o umelú inteligenciu a nie iba prostý model príkaz-odpoveď, bude to paráda.