Zaawansowany quiz w chatbocie – zarz膮dzanie za pomoc膮 Google Sheets 馃摉

Zaawansowany quiz w chatbocie

W poprzednim wpisie pokaza艂em jak stworzy膰 prosty quiz w chatbocie w narz臋dziu Chatfuel. Dzi艣 chcia艂em p贸j艣膰 krok dalej – poka偶臋 jak stworzy膰 zaawansowany quiz w chatbocie, kt贸ry b臋dzie wykorzystywa艂 Google Sheets, jako baz臋 pyta艅, odpowiedzi i wynik贸w quizu poszczeg贸lnych u偶ytkownik贸w.

Na wst臋pie chc臋 wyja艣ni膰 kilka poj臋膰, element贸w, kt贸re b臋dziemy u偶ywa膰 podczas tworzenia takiego quizu. B臋d膮 to podstawy dla tych, kt贸rzy o nich nie s艂yszeli lub maj膮 o nich ma艂e poj臋cie. Je艣li ni偶ej wymienione elementy s膮 Ci znane, mo偶esz spokojnie opu艣ci膰 ten fragment i przej艣膰 bezpo艣rednio do tworzenia quizu.

Elementy, kt贸re wykorzystam w dzisiejszym poradniku to:

  • Atrybuty w Chatfuel
  • Google Sheet
  • Plugin JSON API w Chatfuel

Atrybuty

Atrybuty to bardzo wa偶ny element chatbot贸w. Mog膮 by膰 one nazywane w r贸偶ny spos贸b w zale偶no艣ci od platformy, na kt贸rej pracujemy. Ja w tym artykule b臋d臋 u偶ywa艂 tej nazwy, poniewa偶 u偶ywana ona jest w Chatfuel, na kt贸rym oparty jest ten poradnik.

A czym s膮 atrybuty? S膮 to zmienne, cechy, warto艣ci, kt贸re mo偶emy ustawia膰 i przypisywa膰 do u偶ytkownik贸w podczas rozmowy z botem.聽 Nadal niejasne? Wyobra藕cie sobie wi臋c, 偶e chcecie odr贸偶ni膰 w jaki艣 spos贸b u偶ytkownik贸w, kt贸rzy chc膮 otrzyma膰 powiadomienia od chatbota, od tych, kt贸rzy tego nie chc膮. Do tego w艂a艣nie mo偶e s艂u偶y膰 atrybut – przypiszemy atrybut o nazwie wantNotifications i warto艣ci true do danego u偶ytkownika je艣li chce otrzymywa膰 powiadomienia, a ustawimy warto艣膰 false je艣li tych powiadomie艅 otrzymywa膰 nie chce.

No ok, spytacie, ale co mo偶e mi to da膰?聽W naszym przypadku da nam to informacje do kogo powinni艣my wys艂a膰 notyfikacj臋. B臋dziemy w stanie stworzy膰 wtedy regu艂臋 typu:

  • Wy艣lij wiadomo艣膰 tym u偶ytkownikom, kt贸rzy maj膮 ustawiony atrybuty o nazwie wantNotifications na warto艣膰 true

Innym zastosowaniem atrybut贸w jest przetrzymywanie tymczasowych danych czy stanu pewnej operacji. I w艂a艣nie tego typu zastosowanie b臋dzie mia艂o miejsce w naszym quizie. Co mam tutaj na my艣li? Podczas rozwi膮zywania testu czy quizu powinni艣my przetrzymywa膰 przynajmniej 2 informacje:

  • numer aktualnego pytania, aby wiedzie膰 jakie b臋dzie kolejne
  • aktualna liczba zdobytych punkt贸w, poprawnych odpowiedzi

B臋d膮 one aktualizowane po ka偶dym pytaniu (chyba, 偶e odpowied藕 u偶ytkownika by艂a z艂a, wtedy nie ma sensu aktualizowa膰 licznika – liczby zdobytych punkt贸w).

Ok, ale jak mog臋 ustawi膰 taki atrybut i gdzie jest on trzymany? U偶ywaj膮c Chatfuel, dodawanie i zarz膮dzanie atrybutami jest bardzo proste. Ustawia膰 atrybut mo偶emy u偶ywaj膮c pluginu Set User Attribute, a przegl膮da膰 je mo偶emy otwieraj膮c zak艂adk臋 People.

Zaawansowany quiz w chatbocie

Tak ustawiony atrybut mo偶emy w prosty spos贸b wykorzysta膰 jako tre艣膰 wiadomo艣ci lub podczas podejmowania decyzji czy dany element powinien by膰 wy艣wietlony danemu u偶ytkownikowi. Np.:

Zaawansowany quiz w chatbocieZak艂adaj膮c, 偶e warto艣膰 atrybutu o nazwie Total jest ustawiona na 5, tekst, kt贸ry zostanie wy艣wietlony u偶ytkownikowi to:

  • Zdoby艂e艣 5 punkt贸w!

Je艣li chcieliby艣cie wi臋cej dowiedzie膰 si臋 o atrybutach, jak mo偶na je wykorzysta膰, jak dok艂adnie dzia艂aj膮, dajcie zna膰 to postaram si臋 przygotowa膰 kompletny artyku艂, kt贸ry po艣wi臋cony by艂by temu elementowi. P贸ki co, na potrzeby tego posta, wiedza, kt贸r膮 przedstawi艂em powinna wystarczy膰 do zrozumienia tematu.

JSON Api

Kolejny element, kt贸ry b臋dzie wykorzystywany w dzisiejszym wpisie to plugin JSON Api, kt贸ry umo偶liwia komunikacj臋 i integracj臋 bota z zewn臋trznym serwisem. Plugin ten to prawdziwa si艂a bot贸w, tworzonych w Chatfuel.

Je艣li przyjmiemy, 偶e rol膮 chatbota jest prezentacja dynamicznych informacji, pozyskiwanie klient贸w, wysy艂anie najnowszych wiadomo艣ci czy zbieranie informacji od u偶ytkownik贸w to musimy si臋 zgodzi膰, 偶e nie da si臋 tych aktywno艣ci wykona膰 bez integracji z zewn臋trznym serwisem, systemem czy baz膮 danych.

  • U偶ytkownik sk艂ada zam贸wienie za po艣rednictwem bota? Powiniene艣 wys艂a膰 do zam贸wienie do zewn臋trznego systemu
  • Chcesz pokaza膰 najnowsze artyku艂y ze strony? Mo偶esz pobra膰 je z bazy danych
  • Zadaniem bota jest t艂umaczenie s艂贸w pomi臋dzy j臋zykami? Musisz odpyta膰 zewn臋trzny serwis o to t艂umaczenie

Plugin ten, poza tym, 偶e potrafi wys艂a膰 request do zewn臋trznego serwisu, potrafi r贸wnie偶 przetworzy膰 odpowied藕, o ile b臋dzie mia艂a ona odpowiedni膮 posta膰. Co to znaczy w praktyce? Je艣li wy艣lemy z zewn臋trznego serwisu odpowiednio zbudowan膮 odpowied藕 mo偶emy wtedy m.in.:

  • wy艣wietli膰 u偶ytkownikowi wiadomo艣膰, przyciski, podpowiedzi
  • wy艣wietli膰 obrazki
  • ustawi膰 atrybut
  • pokaza膰 wideo
  • pokaza膰 galeri臋
  • itp.

Jak powinni艣my zbudowa膰 odpowied藕, aby by艂a zrozumia艂a dla Chatfuel? 呕eby nie powtarza膰 tego, co doskonale wyt艂umaczone jest w oficjalnej dokumentacji – odsy艂am Was TUTAJ.

W dzisiejszym artykule b臋d臋 chcia艂 pokaza膰 zarz膮dzanie quizem za pomoc膮 Google Sheet, kt贸ry b臋dzie pe艂ni艂 rol臋 zewn臋trznej bazy danych. I w艂asnie w celu komunikacji mi臋dzy botem a arkuszem wykorzystywa膰 b臋d臋 plugin JSON API.聽B臋dziemy robi膰 za jego pomoc膮 2 rzeczy:

  • pobiera膰 i wy艣wietla膰 pytania i podpowiedzi
  • zapisywa膰 wyniki quizu poszczeg贸lnych u偶ytkownik贸w

Zaawansowany quiz w chatbocie

PS. Je艣li jeste艣cie ciekawi jak dok艂adnie dzia艂a ten plugin i jak go mo偶ecie wykorzysta膰, polecam kompletny poradnik, kt贸ry mo偶na 艣ci膮gn膮膰 pobieraj膮c go z chatbota Tw贸rcy – Link do bota.

Google Sheets

Ostatnim elementem, jaki potrzebny nam b臋dzie do stworzenia zaawansowanego quizu jest us艂uga, zwana聽Google Sheets.聽Zak艂adam, 偶e wi臋kszo艣膰 z Was wie co to jest, ale je艣li nie to na pewno wiecie czym jest聽Excel. Je艣li tak, to Google Sheets jest odpowiednikiem Excela, ale produkcji Google’a.

Do czego nam b臋dzie s艂u偶y艂 Arkusz Google’a?聽B臋dzie pe艂ni艂 rol臋 naszej bazy danych. Mo偶emy w nim przetrzymywa膰 pytania, sugerowane odpowiedzi, a tak偶e zapisywa膰 wyniki jakie osi膮gn臋li u偶ytkownicy.

Ale po co nam zewn臋trzna baza danych?聽Powod贸w jest kilka. Ja wymieni臋 3 z nich:

  • uniezale偶niamy si臋 od narz臋dzie jakim jest Chatfuel
  • 艂atwiej jest zarz膮dza膰 pytaniami edytuj膮c wiersze w arkuszu, ni偶 bloki w Chatfuel
  • maj膮c dane w Arkuszu, mo偶emy je udost臋pnia膰 innym dzia艂om bez konieczno艣ci dawania dost臋pu do Chatfuel

Dla formalno艣ci, aby m贸c korzysta膰 z Google Sheets, wystarczy za艂o偶y膰 konto na Google -> Google Sheets.

Zaczynamy

Zaczniemy nietypowo od Arkusza Google. Tak jak wspomnia艂em, b臋dzie to centralna cz臋艣膰 naszego rozwi膮zania, dlatego warto od niej zacz膮膰. Arkusze Google posiadaj膮 ciekaw膮 opcj臋 publikowania arkusza jako aplikacji webowej. Dzi臋ki temu dostajemy publiczny adres url, kt贸ry pozwala manipulowa膰 oraz pobiera膰 dane z aktualnego arkusza. U偶yjemy tak opublikowanego adresu, aby zintegrowa膰 Chatfuel z Google Sheets za pomoc膮 pluginu JSON API.

Gdybym chcia艂 to co napisa艂em przedstawi膰 na diagramie, mog艂oby to wygl膮da膰 tak:

Zaawansowany quiz w chatbocie

Wyja艣ni臋 teraz jak powinien by膰 zbudowany arkusz, kt贸ry b臋dzie wykorzystywany do budowy quizu. Przygotowa艂em przyk艂adowy szablon, kt贸ry znajduje si臋 TUTAJ. Mo偶ecie na jego podstawie stworzy膰 sw贸j arkusz jako kopi臋 i zacz膮膰 na nim pracowa膰.

Dokument sk艂ada sie z przynajmniej 2 arkuszy:

  • Q&A
  • Results

Zaawansowany quiz w chatbocie

Arkusz Q&A b臋dzie s艂u偶y艂 do przetrzymywania pyta艅, sugerowanych odpowiedzi oraz prawid艂owych odpowiedzi, a聽arkusz Results b臋dzie przechowywa艂 wyniki quizu (informacje o u偶ytkowniku + liczba zdobytych punkt贸w).

Arkusz Q&A sk艂ada si臋 z nast臋puj膮cych kolumn:

  • Question
  • Answer1
  • Answer2
  • Answer3
  • Answer4
  • Answer1_NextBlock
  • Answer2_NextBlock
  • Answer3_NextBlock
  • Answer4_NextBlock

Warto wspomnie膰, 偶e arkuszy typu Q&A mo偶emy doda膰 wiele. Ka偶dy z nich b臋dzie odpowiada艂 jednemu quizowi. Warto przy tym odr贸偶ni膰 je nadaj膮c odpowiednie nazwy. W zak艂adce z rezultatami b臋dziemy mogli je odr贸偶ni膰 poprzez dodanie kolumny z nazw膮 quizu.

Na potrzeby tego artku艂u zastosowa艂em tylko jeden arkusz z pytaniami, o nazwie Q&A.

Kolumna聽Question przechowywa膰 b臋dzie pytanie, jakie zostanie zadane u偶ytkownikowi. Kolumny聽Answer1-Answer4 zawieraj膮 sugerowane odpowiedzi, kt贸re w naszym quizie wy艣wietla膰 b臋dziemy u偶ywaj膮c szybkich odpowiedzi (quick replies). Pozostaj膮 nam kolumny Answer1_NextBlock-Answer4_NextBlock, kt贸re zawieraj膮 list臋 nast臋pnym nazw blok贸w oddzielonych przecinkiem. Pisza膰 bloki, mam tutaj na my艣li bloki w rozumieniu Chatfuela. W praktyce taka informacja b臋dzie oznacza艂a:

  • Po odpowiedzi na pytanie numer X przekieruj u偶ytkownika do blok贸w Y,Z

Wyja艣nieniem poszczeg贸lnych blok贸w oraz ich zawarto艣ci zajm臋 si臋 w kolejnych sekcjach. Na t膮 chwil臋 powinna Wam wystarczy膰 informacja, 偶e blok o nazwie聽Question odpowiada za wy艣wietlenie pytania, blok聽Right Answer, zwi臋ksza liczb臋 punkt贸w u偶ytkownika, a blok聽Summary to blok znajduj膮cy si臋 na ko艅cu quizu, kt贸rego rola to podsumowanie wyniku quizu.

Przyk艂adowy arkusz z pytania mo偶e wygl膮da膰 nast臋puj膮co:

Zaawansowany quiz w chatbocie

Przypominam, 偶e przyk艂adowy arkusz, kt贸ry mo偶ecie skopiowa膰 i edytowa膰 nast臋pnie znajduje si臋 TUTAJ.

 

Opublikowanie arkusza

Kiedy mamy ju偶 informacje i szablon naszego quizu, pozostaje nam rzecz najtrudniejsza i najbardziej techniczna z tego poradnika – sprawienie, aby te dane by艂y dost臋pne z poziomu Chatfuel. Tak jak wspomnia艂em wcze艣niej, w sekcji聽JSON API, Chatfuel potrafi integrowa膰 si臋 z zewn臋trznymi serwisami za pomoc膮 zapyta艅 HTTP. Aby takie zapytanie by艂o mo偶liwe musimy udost臋pni膰 taki serwis publicznie.聽

Mo偶emy to osi膮gn膮膰 dzi臋ki us艂udze聽Google Apps Script,聽zintegrowanej z arkuszem, kt贸ra pozwala jednocze艣nie stworzy膰 publicznie dost臋pny endpoint oraz pozwala manipulowa膰 danymi przechowywanymi w arkuszu. Us艂uga polega na implementacji logiki w j臋zyku JavaScript, co oznacza, 偶e bez umiej臋tno艣ci programistycznych wiele tutaj nie ugramy. Dla tych jednak, kt贸rzy s膮 bardziej biznesowi, a mniej techniczni przygotowa艂em taki skrypt, kt贸ry jest gotowy do wykorzystania. Kopiuj膮c arkusz, kt贸ry przygotowa艂em na potrzeby tego artyku艂u, ten kod b臋dziecie ju偶 mieli zintegrowany. Poza tym w dalszej cz臋艣ci zamieszcz臋 藕r贸d艂o do samego skryptu, dla tych kt贸rzy chc膮 us艂ug臋 implementowa膰 samodzielnie.

Aby przej艣膰 do us艂ugi聽Google Apps Script聽nale偶y wej艣膰 w zak艂adk臋 Tools -> Script Editor:

Script Editor

Po klikni臋ciu w聽Script Editor przejdziemy do okna tworzenia skryptu, kt贸ry uruchamiany b臋dzie gdy nasz serwis zostanie odpytany. Aby nie wchodzi膰 w szczeg贸艂y, na potrzeby naszego quizu powinni艣my zaimplementowa膰 2 metody:

  • doGet (GET)
  • doPost (POST)

Co do zasady, zapytania typu GET, powinny s艂u偶y膰 do pobierania danych, dlatego wykorzystam j膮 do pobierania kolejnego pytania i zwr贸cenia JSON’a zrozumia艂ego przez Chatfuel. Metoda typu聽POST powinna zapisywa膰 dane, wi臋c mo偶na j膮 wykorzysta膰 do zapisania wynik贸w quizu.

Metoda doGet

Metoda doGet, tak jak wspomnia艂em wcze艣niej, wykorzystana b臋dzie podczas zadawania kolejnych pyta艅. B臋dzie ona cz臋艣ci膮 wi臋kszego procesu i integracji Chatfuel oraz opublikowanego endpointa.

Kroki jakie b臋d膮 mia艂y miejsce wygl膮daj膮 mniej wi臋cej nast臋puj膮co:

  • U偶ytkownik rozpoczyna quiz klikaj膮c przycisk typu „Start”
  • W tym momencie ustawiamy mu za pomoc膮 Chatfuel atrybut聽Total na 0,聽QuestionNumber na 1 i聽QuizName na nazw臋 quizu – taki jak nazwa odpowiedniego arkusza聽(Total聽odpowiada liczbie zdobytych punkt贸w, a聽QuestionNumber numerowi聽 nast臋pnego pytania)
  • U偶ytkownik wchodzi do bloku聽Question,聽kt贸ry zawiera m.in. plugin JSON API
  • Chatfuel, za pomoc膮 pluginu JSON API, wysy艂a do naszego endpointa zapytanie o kolejne pytanie (za艂膮czaj膮c warto艣膰 atrybutu聽QuestionNumber, aby wiadomo by艂o, kt贸re pytanie zwr贸ci膰 oraz QuizName, aby wiedzie膰 do jakiego quizu wys艂a膰 pytania)
  • metoda doGet robi nast臋puj膮ce rzeczy:
    • odczytuje numer nast臋pnego pytania oraz nazw臋 quizu
    • pobiera pytanie oraz sugerowane odpowiedzi z arkusza o takiej nazwie jak nazwa quizu
    • zwi臋ksza o 1 numer kolejnego pytania – zmienna聽QuestionNumber
    • buduje odpowied藕 w formacie zrozumia艂ym dla Chatfuel (zgodna z dokumentacj膮). Dodaje do niej pytanie, sugerowane odpowiedzi (oraz do kt贸rych blok贸w prowadz膮) i ustawia atrybut聽QuestionNumber na warto艣膰 wcze艣niej powi臋kszon膮 o 1
    • wysy艂a odpowied藕
  • Chatfuel, otrzymuj膮c odpowied藕 generuje pytanie oraz potencjalne odpowiedzi lub podsumowuje wyniki quizu (w zale偶no艣ci czy by艂o to ostatnie pytanie, czy nie)

Zajmijmy si臋 wi臋c tworzeniem metody doGet. Otwieramy nasz dokument wcze艣niej stworzony, zawieraj膮cy 2 arkusze聽Q&A聽oraz聽Results.聽Przechodzimy to us艂ugi聽Google Apps Script,聽klikaj膮c聽Tools -> Script Editor聽i jeste艣my teraz w trybie edycji skryptu, p贸ki co pustego.

Wklejamy do, pustego na razie, pliku聽Code.gs nast臋puj膮cy kod (znajdziecie go te偶 TUTAJ):

function doGet(e) {

var questionNumber = parseInt(e.parameter.questionNumber);
var quizName = e.parameter.quizName;


var row = getRows(quizName)[questionNumber];

Logger.log('questionNo: '+questionNumber);
Logger.log('quizName: '+quizName);

var result = {
set_attributes: { QuestionNumber: questionNumber+1 },
messages: [
{ text: row[0], quick_replies: getQuickReplies(row) }
]
};

var output = JSON.stringify(result);

Logger.log('output: '+output);

return ContentService.createTextOutput(output).setMimeType(ContentService.MimeType.JSON);
}

function getRows(quizName){
return SpreadsheetApp.getActive().getSheetByName(quizName).getDataRange().getValues();
}

function getQuickReplies(row){
return [
{title: row[1], block_names: getBlocks(row[5])},
{title: row[2], block_names: getBlocks(row[6])},
{title: row[3], block_names: getBlocks(row[7])},
{title: row[4], block_names: getBlocks(row[8])}
];
}

function getBlocks(blocks){
return blocks.split(',');
}

Kolejnym krokiem jest opublikowanie aplikacji, tak aby sta艂a si臋 ona dost臋pna publicznie. W tym celu klikamy聽Publish -> Deploy as web app:

Po opublikowaniu aplikacji powinni艣my otrzyma膰 adres url do naszego endpoint’a, kt贸ry powinien wygl膮da膰 mniej wi臋cej tak:

  • https://script.google.com/macros/s/xyz/exec , gdzie聽xyz to nasz unikalny klucz

Adres, kt贸ry uzyskali艣my b臋dziemy wykorzystywa膰 wklejaj膮c go w pluginie JSON API, podczas konfiguracji bota w Chatfuel, wi臋c warto go gdzie艣 zapisa膰.

Tym sposobem stworzyli艣my metod臋, odpowiedzialn膮 za „zadawanie pytania” oraz upublicznili艣my j膮, co umo偶liwi nam zarz膮dzanie pytaniami z poziomu Google Sheets, a nie z poziomu Chatfuel.

Konfiguracja Chatfuel

Teraz przejd藕my do konfiguracji Chatfuel. B臋dziemy potrzebowa膰 nast臋puj膮cych blok贸w:

  • Quiz start – wy艣wietla膰 b臋dzie przycisk umo偶liwiaj膮cy rozpocz臋cie quizu
  • Quiz init – b臋dzie ustawia膰 pocz膮tkowe atrybuty, ewentualnie zerowa膰 istniej膮ce
  • Question – b臋dzie odpowiedzialny za pobieranie z arkusza kolejnego pytania i odpowiedzi
  • Right answer – b臋dzie zwi臋ksza艂 licznik punkt贸w
  • Summary – b臋dzie podsumowywa艂 wynik quizu

Przejd臋 teraz po ka偶dym z ww. blok贸w i poka偶臋 jak je skonfigurowa膰. Zacznijmy od bloku聽Quiz start, kt贸ry pozwoli u偶ytkownikowi podj膮膰 decyzj臋 o rozpocz臋ciu quizu. Po klikni臋ciu w przycisk聽Start 鈻讹笍聽u偶ytkownik zostanie przeniesiony najpierw do bloku聽Quiz init,聽a nast臋pnie do聽pytania, czyli bloku聽Question.

Blok Quiz start

Kolejny blok o nazwie聽Quiz init, b臋dzie odpowiedzialny za ustawianie pocz膮tkowych atrybut贸w. W naszym przypadku ustawimy:

  • QuizName聽na Q&A (przypominam, 偶e odpowiada ta warto艣膰 nazwie arkusza)
  • QuestionNumber聽na 1 (ustawiam wska藕nik na pytanie na 1)
  • Total na 0 (u偶ytkownik rozpoczyna test wi臋c nie ma jeszcze punkt贸w)

Powinien on wygl膮da膰 tak:

Blok Quiz init

Blok聽Right answer odpowiada za zwi臋kszanie liczby punkt贸w w przypadku prawid艂owej odpowiedzi u偶ytkownika. Zawiera jedynie zwi臋kszenie warto艣ci atrybutu聽Total o 1:

Blok Right answer

Teraz zaczyna si臋 magia czyli blok o nazwie聽Question. Tak jak wspomnia艂em s艂u偶y艂 on b臋dzie wy艣wietlaniu kolejnego pytania. B臋dzie mog艂 to zrobi膰 integruj膮c si臋 z arkuszem, kt贸ry wcze艣niej stworzyli艣my za pomoc膮 metody doGet.聽Musimy wi臋c doda膰 do bloku plugin JSON API i wype艂ni膰 go nast臋puj膮cymi warto艣ciami:

  • Type –聽GET
  • URL – Url, kt贸ry skopiowali艣my po opublikowaniu arkusza jako endpoint + atrybuty, kt贸re chcemy przes艂a膰 do metody w postaci element贸w urla. Mo偶ecie skopiowa膰 st膮d podmieniaj膮c na Wasz unikalny adres:
    • https://script.google.com/macros/s/xyz/exec?questionNumber={{QuestionNumber}}&quizName={{QuizName}}

Blok Question

Po wej艣ciu w ten blok Chatfuel odpyta nasz arkusz i w odpowiedzi otrzyma pytanie oraz sugerowane odpowiedzi, jakie powinny zosta膰 wy艣wietlone u偶ytkownikowi. Aby metoda wiedzia艂a, kt贸re pytanie zwr贸ci膰 wysy艂amy dodatkowo informacje o numerze pytania oraz o nazwie quizu.

Na koniec zosta艂 nam blok聽Summary, kt贸ry jest ostatnim elementem quizu i wy艣wietla wynik u偶ytkownika na podstawie warto艣ci atrybutu聽Total.

Blok Summary

 

Zapis wyniku

Na tym etapie powinni艣my mie膰 stworzony dzia艂aj膮cy quiz, kt贸ry mo偶e by膰 uruchomiony przez u偶ytkownika. Warto艣ci膮 dodan膮 dla takiego quizu mog膮 by膰 jednak informacje o jego wynikach – kto go przeszed艂, kiedy czy jaki mia艂 wynik. Aby to zrobi膰 musimy zaimplementowa膰 metod臋 doPost,聽kt贸ra przyjmie takie informacje od Chatfuela (JSON API) i zapisze je we wcze艣niej stworzonym arkuszu聽Results.

Arkusz ten mo偶e zawiera膰 nast臋puj膮ce kolumny:

  • Id (Messenger Id)
  • Name (Mo偶e by膰 imi臋)
  • Date (Data uko艅czenia quizu)
  • QuizName (Nazwa testu)
  • Result (Liczba punkt贸w)

Arkusz Results

Kiedy mamy ju偶 arkusz skonfigurowany, przechodzimy do edytora kodu (Tools -> ScriptEditor)聽i dodajemy metod臋聽doPost nast臋puj膮c膮 (lub wklejcie zawarto艣膰 tego pliku):


function doPost(e){
  
  var data = JSON.parse(e.postData.contents)
  
  var result = parseInt(data.result);
  var quizName = data.quizName;
  var id = data.id;
  var name = data.name;
  
  Logger.log('result: '+result);
  Logger.log('quizName: '+quizName);
  Logger.log('id: '+id);
  Logger.log('name: '+name);
  
  var sheet = SpreadsheetApp.getActive().getSheetByName('Results');
  sheet.appendRow([id,name,new Date(),quizName, result]);
  
  return ContentService.createTextOutput(JSON.stringify({})).setMimeType(ContentService.MimeType.JSON);
}

Po ponownym opublikowaniu endpoint, kt贸ry przyjmuje zapytania typu POST powinien by膰 ju偶 dost臋pny. Ostatnim krokiem jest konfiguracja po stronie Chatfuel. Naszym celem jest wys艂anie ww. informacji po zako艅czeniu quizu. Mo偶emy to zrobi膰 w bloku聽Summary,聽kt贸ry b臋dzie zawiera艂 dodatkowo wys艂anie zapytania do arkusza wraz potrzebnymi informacjami.

Dodajmy wi臋c plugin JSON API z nast臋puj膮cymi warto艣ciami:

  • Type –聽POST
  • URL – Url, kt贸ry skopiowali艣my po opublikowaniu arkusza jako endpoint
  • Send –聽musimy stworzy膰 JSON z informacjami, kt贸re chcemy przes艂a膰. Mo偶e on wygl膮da膰 nast臋puj膮co (istotne s膮 nazwy parametr贸w – musz膮 odpowiada膰 tym nazwom, kt贸rych u偶yli艣my podczas implementacji metody doPost)

{
"id": "{{messenger user id}}",
"name": "{{first name}}",
"quizName": "{{QuizName}}",
"result": {{Total}}
}

Blok Send results

Efekt

Tak skonfigurowany system jest gotowy, aby spe艂ni膰 rol臋 jak膮 sobie za艂o偶yli艣my na pocz膮tku artyku艂u. Po rozpocz臋ciu testu, otrzymujemy po kolei pytania, zliczane s膮 punkty, a na ko艅cu otrzymujemy podsumowanie naszego wyniku, a jednocze艣nie zapisujemy go w osobnym arkuszu. Dzi臋ki temu trzymamy w jednym miejscu, zar贸wno pytania, jak i rezultaty.

Poni偶ej pokazuj臋 jak to wygl膮da i dzia艂a z艂ozone w ca艂o艣膰.

Prezentacja

Przypominam, 偶e mo偶ecie gotowy szablon, kt贸ry budowali艣my w tym artykule pobra膰 z TEGO linku i utworzy膰 na jego podstawie kopi臋 arkusza, na kt贸rym b臋dziecie pracowa膰.

 

Je艣li podoba si臋 Wam artyku艂 i chcieliby艣cie wiecej tego typu tre艣ci lub macie jakie艣 uwagi co do poradnika, zach臋cam do pozostawiania komentarzy.