Pripravený na novú výzvu? Poď k nám

6 vecí, na ktoré si treba dať pozor pri výrobe Messenger bota

Pomaly sa začína trhať vrece s Messenger botmi a možno by ste si chceli spraviť svojho vlastného aj vy, ešte skôr, kým to bude na úrovni obohratosti facebook appiek, Angry Birds alebo radlerov. Viem, že som sa s analógiou obohratých vecí mohol posnažiť viac, ale je pondelok ráno a ja ich tam nechám tak, ako sú.

Počas toho, ako sme v Triade robili Overbota a iných, sme sa z kadejakých vecí poučili a bola by škoda nechať si poznatky len tak pre seba. Veď my sa všetci v tej reklamnej branži tak ľúbime, že by sme sa najradšej s interným know-how aj rozkrájali.

Nasleduje teda zopár tipov, na čo si dať pozor, keď robíme facebook botov. Je to poväčšinou nerdy talk pre developerov, takže možno by si zvyšní, bežní smrteľníci chceli radšej ísť na internet pozerať obrázky mačiek.

Odhadnite si traffic

Tak, ako je dôležité nepodceniť dobrý hosting pri bežných stránkach, nie je tomu inak ani pri botoch. Výnimkou je ale to, že pre vás tá najpodstatnejšia vec nie je cpu, ram alebo veľkost disku, ale linka. Pokiaľ ide o nejakú malú/internú vec, kam neplánuje pristupovať veľa ľudí naraz, tak na hostingu veľmi nezáleží; ale ak očakávate vysoký traffic, na bežný zdieľaný hosting s obmedzeným počtom konkurentných pripojení sa spoľahnúť nedá. Pri väčších projektoch bude zrejme najlepšie VPS s dedikovanou linkou, nech to proste fičí.

Pokiaľ na pozadí bota nebeží nejaký brutálny algoritmus alebo ak tam zároveň netrénujete nejakého chatbota deep learningom podľa odpovedí, nepotrebujete vôbec preháňať bežné parametre. Len sa uistite, že nebudete obmedzení počtom pripojení a máte dobrú linku.

Hostovanie statického contentu

Keď už sme pri hostingu, treba si dať pozor pri posielaní attachmentov, ako sú napr. statické obrázky, gifká, zvuk, etc. Predstavte si, že jedna z vašich odpovedí je napr. strašne vtipné, 3-megové gifko (messenger API nešpecifikuje podmienky na vtipnosť attachmentov, takže si viem predstaviť, že odpoveďou je aj dosť nevtipné gifko).

Pošlete request s linkom na obrázok na svojom serveri facebooku, ten ho musí celý stiahnuť a až potom vráti response. Človek by si myslel, že „však čo, facebook si taký obrázok stiahne a potom používa svoju lokálnu kópiu“. Ale nie, facebook si zakaždým ťahá statický content znova a znova, nezávisle od toho, či to už niekedy predtým v minulosti stiahol.

Demonstračná ukážka vtipného gifka

Demonštračná ukážka vtipného gifka

Teraz si predstavte, že sa s botom rozpráva naraz 100 ľudí a čo čert nechce, 50 z nich čaká nejakú odpoveď vášho strašne vtipného gifka. To je 150 MB, ktoré musi facebook najprv poťahať z vášho servera, a až potom viete odpovedať ďalej. Jeden z tých chudákov, ktorý dostane odpoveď medzi poslednými, môže na bota čakať naozaj dlho. Pri takom botovi zrejme čakáte, že odpoveď príde do pár sekúnd, a čakať, kým si facebook od vás poťahá desiatky/stovky megabajtov dát nie je cool.

Rozumným riešením je vtedy, samozrejme, použiť nejaké CDNko, čo by odľahčilo váš server od ťahania vysokého loadu dát. Taký terabajt bandwidthu na mesiac si viete kúpiť do 100 USD. Ak si taký veľky kontent generujete dynamicky vy sami na strane servera, pán boh s vami. Alebo iné božstvo. Alebo nejaký load-balancer 🙂 Nám našťastie postačilo CDN.

Iné božstvo


Iné božstvo

Viac správ v jednom requeste

Keď niekto píše botovi, facebook posiela request na váš server. Tých requestov pri vývoji nie je veľa a je ľahké prehliadnuť, že správ môže byť v jednom requeste viac.

{
  "object":"page",
  "entry":[
    {
          ...stuff...
    },
    {
          ...tu može dôjsť aj druhý stuff!...
    }
  ]
}

Takže je potrebné na to pri vývoji frameworku myslieť a ziterovať všetky správy z ‘entry’.

Duplicitné requesty

Toto sa netýka vyššie spomínaných viacerých správ v jednom requeste, ale niekoľkých rôznych requestov s rovnakou správou. Teda zrejme nejaký facebook bug alebo feature, ktorú som nepochopil. Občas sa stane, že facebook pošle niekoľkokrát za sebou správu, ktorá je úplne rovnaká, a má aj rovnaké message id. Niekedy facebook identickú správu pošle dokonca až po tom, čo si s ním vymeníte niekoľko správ nových.

Čo je zrazu celkom nepríjemné, pretože to znamená, že aj v prípade jednoduchých reakčných botov typu „koľko je hodín“, kde ste si ani nechceli ukladať info o užívateľoch, si musíte v databáze pamätať zoznam správ pre konverzáciu s každým užívateľom. Aby ste vedeli ošetriť to, že bot odpovie to isté viackrát za sebou.

Alebo to teda ešte môžete ignorovať a namiesto toho sa venovať zábavnejším veciam.

fun


Zábavnejšie veci

Buttony/templaty sa nezobrazujú všetkým 🙁

Nanešťastie, je to tak. Pri neupdatnutých verziách Messengeru/na iPhone 5 sa stáva, že sa niektorým používateľom nezobrazujú templatové attachmenty. Tým myslím buttony, carrousel template, receipt template a tak. Podobne, „basic view“ mobilnej facebook stránky alebo jednoduchšie telefóny, na ktorých beží java verzia facebooku, o takých veciach ani nesníva (kde sa ale zase dá stále chatovať s botom).

  "message":{
    "attachment":{
      "type":"template",
      "payload":{
        "template_type":"whatever",
        ...
      }
    }
  }

Takže pokiaľ carrousel a buttony netvoria naozaj neoddeliteľnú časť vášho bota, spravte si nejaký aspoň jednoduchý parser aj na odchytávanie textových odpovedí. Napríklad, keď sa bot spýta, či máte radšej mäso alebo sóju, je dobré nespoliehať sa len na button payload (kde sa po kliknutí môže posielať napr. 1, alebo 0), ale tiež hľadať v prichádzajúcej textovej odpovedi nejaký substring alebo šikovný regexp. Teda napr. výskyt „mas“ na začiatku slova alebo regulárny výraz /^soj.*$/. Zároveň banovať ľudí, ktorí odpovedali sója, lebo, come on.

Pri tomto mi napadá, že je dosť pohodlné z vašej aplikačnej logiky odstrániť nielen kapitálky a diakritiku, ale aj písmená ako ä alebo ypsilony a zjednotiť ich na „e“ a „i“, lebo jeden nikdy nevie, s kým si bude bot písať 🙂

Ludovit stur programuje


Yo

Nemeňte Webhook callback URL

Nie, naozaj, je to nejaké zabugované. Keď už raz nastavíte callback url, nehrajte sa s ňou. Vlastne neviem, v akom stave sa tento input field nachádza teraz, ale keď sme to skúšali pred pár týždňami, bolo to celé nejaké cachované, neukladalo sa to, náhodne ignorovalo verify token a všeobecne spôsobilo pár hodín bolesti hlavy.

callback


Tento input field stvoril sám Satan

Schvaľovanie, testovanie a štatistiky

Je dobrý nápad mať paralelne dev verziu bota, a keď už je jeho funkcionalita viac-menej hotová, dať ho na ostrej verzii schvaľovať, kým sa ešte dolaďujú posledné nedostatky (verzia final-5-naozaj-final-2-b). K takému schvaľovaniu si pripravte svoje english skills, pretože budete bota popisovať nejakému chudákovi, ktorý to po vás bude musieť čítať, a je vo vašom záujme, aby to pochopil 🙂 A ešte screen recorder, pretože bot potrebuje na schválenie aj screencap z ukážky fungovania dialógu s užívateľom.

Ajfóny to majú celkom pohodlne zosynchronizované s quicktime-om na macu. Takže, keď máte nejaký iný operačný systém, budete musieť okrem vyššie spomínaných dvoch skillov oprášiť aj skill ďalší, „sociálny“, ktorý je vhodný na požičanie si macu a ajfónu od nejakého kolegu. V reklamke by to problém byť nemusel. Bot sa zvykne schváliť hneď cez noc, takže potom už môžete dolaďovať nedostatky na dev verzii s pokojným svedomím, že si bugfixy a dolaďovačky na ostrú verziu rýchlo updatnete, kedy sa vám zachce, bez nutnosti čakania na ďalšie schvaľovanie.

Keď je počas vývoja funkčná aspoň nejaká časť bota, nebojte sa ho dať otestovať čo najviac užívateľom, ako len viete. Znie to ako poučka z knižky, ale pri botovi to platí dvakrát. Ani by vám vo sne nenapadlo, ako sa dokážu niektorí ľudia správať. A tým nemyslím len na ulici, ale aj počas konverzácie s vaším botovým výtvorom. Nemyslite si, že ste odchytili každú blbosť, čo môže človek spraviť. Neodchytili a ani neodchytíte, ale testovaním si túto množinu značne zúžite.

Posledným dobrým nápadom je ukladať si kompletný chat log (v administrátorskom paneli facebook stránky nie je vždy vidno celý log) a vyselektovať zaujímavé štatistiky na ukladanie, nech sa z toho vie spraviť dobré vyhodnotenie, ale to je skôr tak rada do života ako k botom.

To je všetko

Nemám žiadny kreatívny záver k tomuto článku.

Šikovní ľudia (patria) do TRIADu

FULL-STACK DEVELOPER - Ak si svetový a chceš robiť svetové veci, tak hľadáme Full-stack developera do svetového Kontentina. Klik sem >>

PHP BACKEND DEVELOPER - Máš na boj proti škaredým bugom? Do nášho developerského tímu hľadáme niekoho, kto si už prešiel prácou na viacerých webových projektoch a teda nie je úplný noob. :) Máme projekty na to, aby si sa vrhol hlbšie do riešenia komplexnejších projektov a kolektív, ktorý si zamiluješ! Viac o pozícii >>

Pripravený na novú výzvu?
Hľadáme ťa!
Poď k nám