– Conversational Interfaces – [625669]

UNIVERSITATEA „PETRU MAIOR” TÎRGU MUREȘ
FACULTATEA DE ȘTIINȚE ȘI LITERE
Programul de studiu: TEHNOLOGI A INFORMA ȚIEI

LUCRARE DE DISERTAȚIE

– Conversational Interfaces –
Chat Bot pentru eviden ța financiară
personală

COORDONATOR ȘTIINȚIFIC :

Conf. univ. dr. Dumitru Rădoiu

ABSOLVENT: [anonimizat]

2018

Cuprins

SUMMARY OF WORK WITH THE CONVERSATIONAL INTERFACE
THEME
ABREVIERI
CAPITOLUL 1. INTRODUCERE ………………………….. ………………………….. …………. 1
1.1. DESCRIERE ………………………….. ………………………….. ………………………….. ……………………….. 1
1.2. UTILIZĂRI ALE CHATBOT -URILOR ………………………….. ………………………….. ………………. 3
1.2.1. Principalii factori care îi motivează pe oameni să folosească chatbot -uri …………………….. 3
CAPITOLUL 2. INTERFAȚA CONVERSAȚIONALĂ – CHATBOT ……………… 6
2.1. GENERALITĂȚI ………………………….. ………………………….. ………………………….. …………………. 6
2.1.1. Definire chatbot ………………………….. ………………………….. ………………………….. ……………… 6
2.1.2. Perspective ………………………….. ………………………….. ………………………….. …………………….. 6
2.2. MODELE ………………………….. ………………………….. ………………………….. ………………………….. … 7
2.2.1. Modele generatoare ………………………….. ………………………….. ………………………….. ………… 8
2.2.2. Modele bazate pe preluare ………………………….. ………………………….. ………………………….. .. 8
2.2.3. Modele bazat e pe euristica ………………………….. ………………………….. ………………………….. . 9
2.3. GENERATORUL DE RĂSPUNS ………………………….. ………………………….. ………………………. 9
2.3.1. Arhitectură cu răspunsuri predefinite ………………………….. ………………………….. …………… 10
2.3.2. Arhitectură cu selectarea ră spunsului ………………………….. ………………………….. …………… 10
2.3.3. NLU (Natural Language Understanding) ………………………….. ………………………….. ……… 12
2.3.4. NLP (Natural Language Processing) ………………………….. ………………………….. ……………. 12
2.4. ARHITECT URA ………………………….. ………………………….. ………………………….. ………………… 14
2.4.1. Mod de funcționare ………………………….. ………………………….. ………………………….. ……….. 14
2.4.2. Interfața utilizator ………………………….. ………………………….. ………………………….. …………. 14
2.4.3. Platforma ………………………….. ………………………….. ………………………….. …………………….. 16
2.4.4. SDK ………………………….. ………………………….. ………………………….. ………………………….. .. 18
2.4.5 Webhook ………………………….. ………………………….. ………………………….. ………………………. 18
2.5. INTE GRARE ………………………….. ………………………….. ………………………….. ……………………… 18
Medii de integrare ………………………….. ………………………….. ………………………….. ………………….. 18
O clasificare a tipurilor de chatbot ………………………….. ………………………….. ……………………….. 18
Utilitate practic ă a chatbot -urilor ………………………….. ………………………….. ………………………….. 19
Etape generale în dezvoltarea unui chatbot ………………………….. ………………………….. ……………. 20

2.6. ETAPELE CREĂRII UNUI CHATBOT ………………………….. ………………………….. ……………. 21
2.6.1. Componentele proiectului ………………………….. ………………………….. ………………………….. 21
2.6.2. Alegerea Platf ormei NLU ………………………….. ………………………….. ………………………….. . 21
2.6.3. Chatbot -uri ………………………….. ………………………….. ………………………….. …………………… 21
2.6.4. Alegerea platformelor de mesagerie ………………………….. ………………………….. …………….. 22
2.6.5. Platforme NLU ………………………….. ………………………….. ………………………….. …………….. 22
2.6.6. Stabilirea obiectivele cha tbot-ului și planificare ………………………….. ………………………… 22
2.6.7. Designul interacțiunii dintre chatbot și utilizator ………………………….. ……………………….. 22
2.6.8. Conversație și lingvistică ………………………….. ………………………….. ………………………….. .. 22
2.6.9 . Îmbogățirea răspunsului ………………………….. ………………………….. ………………………….. … 23
2.6.10. Autentificare ………………………….. ………………………….. ………………………….. ………………. 23
2.6.11. Design de date ………………………….. ………………………….. ………………………….. ……………. 23
2.6.12. Fullfilment ………………………….. ………………………….. ………………………….. …………………. 23
2.6.13. Analiza conversațiilor ………………………….. ………………………….. ………………………….. ….. 23
2.6.14. Îmbunătățire continuă ………………………….. ………………………….. ………………………….. ….. 23
CAPITOLUL 3. REALIZAREA ȘI TESTAREA PROIECTULUI ………………… 24
3.1. DESCRIEREA PROIECTULUI ………………………….. ………………………….. …………………….. 24
3.2. TEHNOLOGIE UTILIZATĂ ………………………….. ………………………….. ………………………… 24
3.3. MOTIVAȚIA ALEGERII PROIECTULUI ………………………….. ………………………….. …….. 25
3.4. DOCUMENTARE A PROIECTULUI ………………………….. ………………………….. …………….. 25
3.5. PROIECT CHATBOT ………………………….. ………………………….. ………………………….. ……… 26
3.5.1. Concepție și pregătire ………………………….. ………………………….. ………………………….. … 26
3.5.2. Realizare instanță chatbot pe platforma DialogFlow ………………………….. ………………. 27
3.5.3. Webhook (ANEXA 1 – COD WEBHOOK) ………………………….. ………………………….. 43
3.5.4. Testarea și depanarea proiectului ………………………….. ………………………….. …………….. 48
CAPITOLUL 4. CONCLUZII ………………………….. ………………………….. ……………… 54
Interfața conversațională reprezintă viitorul ………………………….. ………………………….. ………………. 54
Posibil itatea tehnologică ………………………….. ………………………….. ………………………….. …………….. 54
BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. …….. 56

SUMMARY OF WORK WITH THE CONVERSATIONAL INTERFACE
THEME

In this paper I am presenting information about the type of computer application called
chatbot and the way in which a chatbot can be realized, which is used with the purpose of
recording the personal financial expenses. To create this chatbot, I used the Dialogflow
platform, made available by Google, an apache server running php and mysql.

The paper is structured in 4 chapters with the corresponding subchapters.
In the first Chapter can be found an introduction to Conversational Interface or Chatbot, their
definitions and classifications, also the detailed uses of chatbots in various fields of activity
and the factors that influence their use.

Chapter 2 describe s technical details. Here is presented the information needed to
understand how chatbots and the components behind their technology are created. The paper
details the types of models: generators, pick -based or heuristic based.
To understand how responses f rom a chatbot are created, details on the types of
architectures for the response generators and also the role of NLP and NLU will be explained.
In this chapter will also be detailed information about intentions, entities, context and essential
components for Chatbot's ability to understand the conversation with the user.
Chapter 2 presents the architecture of the chatbot, what is a user interface and how
many types are there.

Because most existing chatbots are developed on platforms dedicated to this purp ose, a
presentation of the most common platforms for creating chatbots and the benefits they offer to
those who opt for them is made.

Most chatbots need to communicate with the outside to access information stored in
databases or to derive the discussion. For this purpose, a webhook will be used, which, with
API calls, intervenes in the chatbot process by providing information that can not be found on
the platform where it is running.

Also, in order for a chatbot to be widely used, it requires integratio n with Web
applications, Facebook Messenger, Slack, Viber, Twitter, Skype, Telegram, Amazon Alexa,
Microsoft Cortana, or other environments where users have access to it for exploitation.
As technical information, I also introduced the development stages o f a chatbot:
project components, NLU Platform and messaging platforms chosen, setting chatbot
objectives and planning, the interaction between chatbot and user, conversation and
linguistics, enrichment of the answer, authentication, data design and fullfi lment.

Chapter 3 presents the practical process of developing the chatbot, the technology used
and the reason for choosing the project.

I have detailed the design of the database, the structure of the tables used, each step in
creating the chatbot on the DialogFlow platform, creating and setting intentions, actions,
context and answers, and webhook information.
In the closing of chapter 3 I presented ways to test and debug chatbots using the
DialogFlow platform.

Chapter 4 contains some conclusions about the present and the future of chatbots.

ABREVIERI

Chatbot/Chat Bot/Bot – program de calculator care simulează conversația umană
NLP – natural language processing
NLU – natural language understanding
IA/AI – inteligenta artificiala/artificial inteligence
GA – Google Assistant

1
CAPITOLUL 1. INTRODUCERE

În lucrarea de față sunt prezentate informații despre tip ul de aplicație informatică
numită chatbot și modul în care se poate realiza practic un chatbot, utili zat pentru evidenta
cheltuielilor financiare personale.
Pentru realizarea acestui chatbot s -a utilizat platforma Dialogflow, pus ă la dispoziție de
către Google, un server apache care rulează php si mysql .

1.1. DESCRIERE
1.1.1. Conversational Interfaces – Chat Bot
Un chatbot este un program de calculator care simulează conversația umană sau
utilizează inteligența artificială pentru modelarea răspunsurilor transmise.
Chatbot -urile sunt folosit e cel mai des în aplicații cum ar fi serviciul de relații cu
clienții, centrele de apeluri și asistență pe internet. Chatbot -urile folosite în aceste scopuri sunt
de obicei limitate la conversații cu privire la un scop specializat și nu pentru întreaga gam ă de
comunicări umane.
În mod obișnuit, un chatbot va comunica cu o persoană reală, însă sunt dezvoltate
aplicații în care două chatbot -uri pot comunica unul cu celălalt.

1.1.2 Clasificare

Chatbot -urile se pot clasifica după destinație în felul următo r:

a) Destinat conversației
Acest tip de chatbot este axat pe conversație , oferind informații utile utilizatorului,
fiind creativ, evita repetarea acelorași fraze, menține interesul partenerului de discuție .
Acest tip de chatbot utilizează de obicei intelig ența artificială pentru antrenare si
învățare si un procesor pentru limbajul natural (NLP) pentru detectarea intențiilor și trăirilor
interlocutorului.

2

Exemple de chatbot -uri utilizate pentru conversație :
– https://www.williambot.com/en/
– https://replika .ai/
– https://www.woebot.io/

b) Destinat anumitor acțiuni
Acest tip de chatbot este utilizat in contextul anumitor scenarii unor scenarii, pentru
soluționarea anumitor probleme tehnice, pentru programarea anumitor eve nimente, plasarea
unor comenzi, comportând -se ca niște sisteme expert.

Pentru crearea unor astfel de chatbot -uri, exist ă platforme puse la dispoziție de către
firme ca Google ( Dialogflow ), IBM (Watson), Microsoft (Amazon Alexa, Bot Framework),
Facebook ( Wit), care fac foarte facila rea lizarea de chatbot -uri proprii, adaptate nevoilor
specifice fiecăruia. Acestea pun la dispoziție interfețe pentru personalizarea setului de intenții,
entități și acțiuni. De asemenea toate au și instrumente pentru testarea chatbot -ului realizat.

c) Generali
Acest tip de chatbot -uri sunt antrenați sa răspundă la întrebări generale, funcționând ca
niște rezultate a căutărilor pe internet, dar cu o filtrare unic ă, fiind capabili sa răspundă la
chestionări de genul: “Cate grade vor fi peste o săptămâna ?”, “Cine este Mihai Eminescu?”,
“Care a fost scorul la meciul de ieri dintre A și B?”, etc.
Acest gen de c hatbot-uri sunt greu de perfecționat , deoarece limbajul uman este
versatil, și chatbot -ul necesită cunoștințe despre toate domeniile vieții.
Acest tip de chatbo t-uri se comportă ca niște asistenți personali. Din aceasta categorie
se pot aminti Google Assistant de la Google, Siri de la Apple, Cortana de la Microsoft și
Alexa de la Amazon.

3
d) Specifici
Spre deosebire de agenții generali, agenții specifici oferă informați despre domenii
închise , referitoare la o anumita zona de interes, cum ar fi orientarea vizitatorilor într -un
muzeu, detalii despre exponate, etc.
Cu cât informațiile pe care le oferă sunt mai complexe, necesita o tot mai mai mare
amploare a imple mentării lor, tinzând spre complexitatea celor generali.

1.2. UTILIZĂ RI ALE CHATBOT -URILOR
1.2.1. Principalii factori care îi motivează pe oameni să folosească chatbot -uri
• Productivitate.
Chatbot -urile oferă asistență sau acces la informații rapid și eficient.
• Divertisment.
Chatbot -urile amuza oamenii oferindu -le sfaturi amuzante, de asemenea, ajuta la
petrecerea timpului liber.
• Factori sociali și relaționali.
Chatbot -urile sporesc experiențele sociale. Discuțiile cu roboții ajută de asemenea la
evita rea singurătății, oferă o șansă oamenilor de a vorbi fără să fie judecați și îmbunătățește
abilitățile conversaționale.
• Curiozitate.
Noutatea stârnește curiozitatea. Oamenii doresc să -și exploreze abilitățile și să încerce
ceva nou.

1.2.2. Business și ma rketing

În ultima perioadă chatbot -urile au câștigat tot mai mult teren în lumea afacerilor,
devenind ustensile utile în creșterea nivelului vânzărilor companiilor deținătoare și realizând o
mai bună legătură cu clienții.
Chatbot -urile sunt eficiente ș i au costuri mici de întreținere.
Importanta chatbot -urilor în domeniul afacerilor este dată de faptul că:
a) Asigura un neîntrerupt serviciu cu clienții
b) Asigură sortarea volumelor mari de solicitări
c) Analizează tendințele în big data

4
d) Pot oferi analize predic tive

1.2.3. Educație

Un chatbot se pretează excelent pentru asistarea învățării, fiind un profesor răbdător, cu
nelimitate cunoștințe si care poate înțelege starea învățăcelului.
Un cunoscut exemplu de chatbot educațional, Learn Languages Free – Mondly este
utilizat pentru învățarea limbilor străine. Cu ajutorul acestuia “utilizatorii pot interacționa cu o
inteligență artificială care le răspunde și învață. Practic, e ca și cum ai vorbi cu o voce care -ți
răspunde în diverse contexte – la restaurant, la o întâlnire de afaceri, la o primă întâlnire.

Cu Mondly poți învăța 33 de limbi, de la engleză, germană, franceză, spaniolă, dar și
chineză, japoneză, ebraică, arabă și afrikaans. Chatbot -ul va fi disponibil în toate cele 33 de
limbi disponibile. De altfel, atunci când au lansat versiunea arabă, la începutul anului, Mondly
a devenit cea mai descărcată aplicație din zonă, înaintea Facebook, Instagram sau YouTube. În
ianuarie 2016, Apple a numi t Mondly cea mai bună aplicație nouă în Europa.” [1 ]
1.2.4. Divertisment și social

Lumea divertismentului a îmbrățișat chatbot -urile într-o proporție semnificativă .
În acest sens există chatbot -uri care spun glume, oferă citate inspiraționale, sugerea ză
idei de rețete culinare, piese muzicale în funcție de starea emoțională pe care o identifică la
utilizator, etc.
1.2.5. Sănătate

În sfera sănătății chatbot -urile au utilizări diverse.
Woebot este un chatbot de terapie care urmărește starea de spirit a interlocutorului,
învață modele de comportament uman pe baza răspunsurilor și învață tehnici în terapia
comportamentală cognitivă.
MeditateBot este un chatbot cu funcție AI care ajută la crearea și menținerea unei
practici zilnice de meditație .

5
HealthTap este un medic online care răspunde la întrebări medicale. Este un serviciu
medical compatibil HIPAA care se conectează de asemenea cu laboratoarele și farmaciile.
Insomnobot3000 este un chatbot bazat pe text, care vorbește la telefon cu
interlocutorul atun ci când acesta nu poate dormi.
Melody este un chatbot de conversație bazat pe AI, conceput pentru a furniza
informații relevante medicilor și pentru a ajuta cu recomandări și opțiuni de tratament.
ELIZA este un program de conversație în limbi naturale . Este conceput pentru a
reprezenta un psihoterapeut Rogerian.

1.2.6. Știri și vreme

Wall Street Journal oferă știri de la W all Street Journal , iar CNN oferă ultimele știri
când se face click pe pictograma Messenger de pe pagina de Facebook a CNN.

Poncho of eră o previziune meteo personalizată în fiecare dimineață pe baza codului
poștal, împreună cu un comentariu plin de umor despre lucruri aleatorii.

6
CAPITOLUL 2. INTERFAȚA CONVERSAȚIONALĂ – CHATBOT
2.1. GENERALITĂȚI
2.1.1. Definire chatbot

Conform definiției date de către wikipedia “Un chatbot (cunoscut și sub numele de
talkbot, chatterbot, Bot, IM bot, agent interactiv sau Entity Artificial Conversational) este un
program de calculator sau o inteligență artificială care efectuează o conve rsație prin metode
audio sau textuale.” [9]
Conform Oxford Dictionaries, un chatbot este: „A computer program designed to
simulate conversation with human users, especially over the Internet.”
Un chatbot este un asistent care comunică cu noi prin mesaje text, un partener virtual
care se integrează în site -uri, aplicații sau mesagerii instant și ajută antreprenorii să se apropie
de clienți. Un astfel de bot este un sistem automat de comunicare cu utilizatorii.
Un chatbot se pretează foarte bine pentru oper ațiuni cum ar fi eliminarea sarcinilor de
rutină și procesarea simultană a mai multor cereri de la utilizatori. În plus, oferă o viteză
extraordinară de procesare a cererilor utilizatorilor, ceea ce conduce la un ridicat grad de
fidelizare a clienților, of erindu -le un grad de satisfacție sporit.
2.1.2. Perspective
Ca urmare a faptului ca oamenii au început să utilizeze aplicațiile de mesagerie mai
mult decât folosesc rețelele sociale, [7] curentul dezvoltării de chatbot -uri a luat amploare, iar
perspectiva este de a deveni parte firească a tehnologiilor viitoare.
Evoluția inteligenței artificiale se află în plină desfășurare. Astăzi, numărul de
utilizatori ai aplicațiilor de mesagerie precum WhatsApp, Slack, Skype, Facebook Messenger,
etc. este în plină expa nsiune. Numai Facebook Messenger are mai mult de 1,2 miliarde
utilizatori lunari.
Odată cu răspândirea mesagerilor virtuale care imită conversațiile umane pentru
rezolvarea diferitelor sarcini care devin din ce în ce mai solicitate, firmele se orientează tot
mai mult spre transferarea acestor sarcini roboților. Astfel, societățile comerciale economisesc
timp și efort prin automatizarea suportului clienților.

7

Figură 1 Trendul mesageriei în raport cu rețelele sociale [13]

De asem enea chatbot -urile sunt folosite și pentru alte activități comerciale, cum ar fi
colectarea de informații despre utilizatori, contribuția la organizarea întâlnirilor și reducerea
costurilor generale. Nu este de mirare că dimensiunea pieței chatbot -urilor e ste în creștere
exponențială. [6]
2.2. MODELE
Denny Britz în "Deep learning for chatbots", spunea că chatbot -ul poate genera
răspunsuri de la zero pe baza modelelor de învățare automată sau poate folosi ceva euristic
pentru a selecta un răspuns dintr -o bib liotecă de răspunsuri predefinite.
Modelele generatoare de răspunsuri sunt mai greu de construit și instruit. De obicei,
este nevoie de milioane de exemple pentru a pregăti un model de învățare profundă pentru a
obține o calitate decentă a conversației.

8
2.2.1. Modele generatoare
Modelele generatoare sunt viitorul chatbot -urilor, deoarece fac chatbot -urile mai
inteligente.

Figură 2 Model generator

2.2.2. Modele bazate pe preluare
Modelele bazate pe preluare sunt mult mai ușor de construit. Ele oferă, de asemenea,
rezultate mai previzibile. Au o acuratețe mai scăzută, însă asigură garanția răspunsurilor
corecte.

Figură 3 Model bazat pe preluare

9
Modelele bazate pe preluare sunt mai practice în acest mo ment, mulți algoritmi
predefiniți și API -uri fiind disponibili pentru dezvoltatori.
Chatbot -ul folosește mesajul și contextul conversației pentru a selecta cel mai bun
răspuns dintr -o listă predefinită de mesaj. Contextul poate include poziția curentă în a rborele
de dialog, toate mesajele anterioare din conversație, variabilele salvate anterior. Dacă chatbot –
ul nu folosește contextul, acesta va răspunde numai la cel mai recent mesaj, fără a ține seama
de întreaga istorie a conversației.
2.2.3. Modele bazat e pe euristica
Modelele bazate pe euristică pentru selectarea unui răspuns pot fi proiectate în mai
multe moduri diferite, de la logica condițională la clasificarea mașinilor de învățat. Cea mai
simplă tehnologie este folosirea unui set de reguli cu modele pentru reguli. Acest tip de
modele este foarte popular pentru chatbot -urile de divertisment.
AIML este un limbaj utilizat pe scară largă pentru scrierea de modele și șabloane de
răspuns. Dezvoltatorii de chatbot -uri pot scrie cod în limba aiml, care poa te include mai multe
unități de genul acesta:
<category>
<pattern>WHAT IS YOUR NAME</pattern>
<template>My name is Popescu Ion.</template>
</category>
Când chatbot -ul primește un mesaj, trece prin toate modelele până găsește un tipar care
se potrivește cu mesajul utilizatorului. Dacă potrivirea este făcută, chatbot -ul utilizează
șablonul corespunzător pentru a genera un răspuns.

2.3. GENERATORUL DE RĂSPUNS

Problema m odelelor bazate pe euristică este că modelele ar trebui să fie programate
manual, și nu este o sarcină ușoară, mai ales în cazul în care chatbot -ul trebuie să distingă în
mod corect sute de intenții. Utilizatorii pot exprima în sute de moduri diferite ace eași idee. În
același timp, chatbot -ul ar trebui să răspundă diferit în cazul în care aceleași cuvinte sunt
utilizate într -un alt context.

10
Machine Learning ne permite să instruim un algoritm de clasificare a intențiilor. Este
necesar doar de un set de dat e pentru instruire și de câteva sute sau mii de exemple.
Modelele sau algoritmii de clasificare ai ML ajută la înțelegerea mesajului
utilizatorului.
Când chatbot -ul identifica intenția mesajului, acesta va genera un răspuns.

2.3.1. Arhitectură cu răspun suri predefinite

Cel mai simplu mod este de a răspunde cu un răspuns static pentru fiecare intenție, sau
poate lua un șablon bazat pe intenție.
Mecanismul de generare a răspunsului trebuie să depindă de sarcina ce o are de
rezolvat. Un chatbot medical va utiliza, probabil, un model statistic de simptome și condiții
pentru a decide ce întrebări să adreseze pentru a stabili un diagnostic.
Un chatbot de tip întrebare -răspuns va căuta într -o bază de cunoștințe, generează
răspunsurile potențiale și apoi utilize ază alți algoritmi pentru a clasifica aceste răspunsuri. Un
chatbot pentru informarea meteo va accesa doar un API pentru a obține o prognoza meteo
pentru o anumită locație.
2.3.2. Arhitectură cu selectarea răspunsului
Chatbot -ul poate exprima același mesaj folosind cuvinte diferite. Un bot meteo poate
spune "este o zi ploioasă", sau "probabilitatea de ploaie este de 80%" sau "vă rugăm să vă luați
umbrela". Care răspuns este cel mai bun? Diferiți utilizatori preferă stiluri diferite de răspuns.
Chatbot -ul po ate analiza chat -urile anterioare și să facă măsurători asociate (lungimea
conversației, probabilitatea de vânzare, rating de satisfacție a clienților, etc) pentru a adapta
răspunsurile cele mai bune pentru fiecare utilizator. [3]
Chatbot -ul poate avea mod ule separate de generare a răspunsurilor.

11

Figură 4 Arhitectură cu selectarea răspunsului

Procesarea mesajelor începe de la înțelegerea a ceea ce dorește utilizatorul. Modulul de
clasificare a intențiilor identifică intenția mesajului utilizatorului. De obicei, este selectat unul
dintr -o serie de intenții predefinite, deși chatbot -urile mai sofisticate pot identifica mai multe
intenții dintr -un mesaj. Clasificarea intențiilor poate utiliza informații contextuale, cum ar fi
intențiile mesajelor anterioare, profilul de utilizator și preferințele acestuia.
Selectorul de răspuns clasifică răspunsurile candidate și alege acel răspuns care se
potrivește cel mai bine cu solicitarea utilizatorului. Se pot folosi diferiți algoritmi, se pot apela
câteva API -uri externe, sau chiar se poate cere ajutor suplimentar de la o ființă umană pentru a
ajuta la selectarea răspunsului. Rezultatul acestor calcule este o listă de candidați de răspuns.
Toate aceste răspunsuri ar trebui să fie corecte în funcție de domeniul specific. Selectorul de
răspuns trebuie să utilizeze contextul conversației, precum și intenția și entitățile extrase din

12
ultimul mesaj al utilizatorului, în caz contrar nu poate accepta conversații cu mai multe mesaje
înlănțuite.

2.3.3. NLU (Natural Language Understanding)

Intenția (intent)
Intenția este practic acțiunea pe care chatbot -ul trebuie să o execute când utilizatorul
spune ceva. De exemplu, intenția poate declanșa aceeași acțiune pentru mesajele: "Doresc să
cumpăr un TV LC D", "Aveți TV LCD? Doresc sa comand unu" sau" Ce televizoare LCD
aveți?". Oricare dintre aceste mesaje conduc la concluzia ca intenția utilizatorului este de a
cumpăra un televizor LCD, astfel că va declanșa acțiunea de a afișa opțiunile pentru
televizoare le solicitate.
Entitatea (entity)
Entitatea reprezintă practic un concept. Este un termen sau un obiect care este relevant
pentru intențiile utilizatorului și care oferă un context specific pentru o intenție.
Contextul
Când un algoritm NLU analizează o fr ază, nu are istoricul conversației utilizatorului.
Aceasta înseamnă că dacă acesta primește răspunsul la o întrebare pe care tocmai a adresat -o,
nu-și va aminti întrebarea. Pentru diferențierea fazelor în timpul conversației, statusul acesteia
ar trebui să fie stocate. Cu ajutorul contextului, este posibil să se facă referință cu ușurință la
intențiile anterioare, fără a fi nevoie să se cunoască întrebarea anterioară.

2.3.4. NLP (Natural Language Processing)
În câțiva pași, NLP convertește textul clientulu i în date structurate. Acestea sunt
utilizate pentru a selecta răspunsul corelat. Etapele de procesare a limbajului natural sunt:
Analiza sentimentului
Chatbot -ul încearcă să învețe dacă utilizatorul are o experiență bună sau în cazul în
care, după un anumit punct, ar trebui ca discuția să fie transferată către un operator uman.

13
Tokenizare
NLP împarte un șir de cuvinte în bucăți sau jetoane (token) care sunt simbol uri
lingvistice.
Recunoaștere entitate
Chatbot -ul caută categorii de cuvinte, cum ar fi numele produsului, numele sau adresa
utilizatorului sau orice tip de dată este solicitată.
Normalizare
Chatbot -ul procesează textul pentru a găsi greșeli comune de ort ografie sau erori
tipografice.
Departajarea dependenței
Chatbot -ul caută obiecte și subiecte -verbe, substantive și fraze comune în textul
utilizatorului pentru a găsi fraze dependente și conexe pe care utilizatorul ar putea încerca să le
transmită.
Ca majo ritatea aplicațiilor, chatbot -ul este conectat la o baza de date. Baza de
cunoștințe este utilizată pentru a alimenta chatbot -ul cu informațiile necesare pentru a oferi un
răspuns adecvat utilizatorului. Datele activităților utilizatorului și dacă chatbot -ul a fost
capabil sau nu să răspundă, este salvat în depozitul de date. NLP traduce limbajul uman în
informații folosind o combinație de modele și texte care pot fi mapate în timp real pentru a
găsi răspunsuri aplicabile.

14
2.4. ARHITECTURA
2.4.1. Mod de funcționare
În imaginea următoare este prezentat modul în care funcționează un chatbot.

Figură 5 Arhitectura unui chatbot
Se pot observa 3 secțiuni principale:
1. Interfața utilizator
2. Platforma
3. API resource server

2.4.2. Interfața utilizator
Interfața este partea sistemului care servește utilizatorului pentru introducerea textelor
ce urmează a fi transmise chatbot -ului.
Modul de comunicare cu chatbot -ul poate fi scris, verbal sau mixt. În funcție de modul
în care utilizatoru l comunică cu chatbot -ul, se pot utiliza interfețe diferite, adaptate fiecărui
mod.
Exist ă interfețe de comunicare doar verbală, cum are de exemplu Siri de la Apple.
Acest tip de interfață necesită doar apăsarea unui buton pentru lansarea în execuție a cha tbot-
ului, după care restul conversației se desfășoară verbal.

15

Figură 6 Interfață SIRI – non-textuală [12]

Alte chatbot -uri utilizează doar interfețe pentru introducerea conversației de la
tastatură, acestea neavând nevoie de interpretoare vocale (voice recognition) pentru
transformarea cuvintelor rostite în cuvinte scrise.
Cea de -a treia categorie este cea care utilizează pentru conversație atât introducerea
textului de la tastatură, cât și introducerea verbală.
În cazul în ca re introducerea textului se face de la tastatură, chatbot -ul are nevoie de o
casetă în care sa fie afișată conversația și o caseta de tip input în care utilizatorul scrie textul.

Figură 7 Interfață textuala și vocală [11]

Interfețele pot diferi pentru fiecare tip de dispozitiv pe care poate rula chatbot -ul, astfel
ca pentru telefon, tableta sau desktop, un chatbot poate utiliza aspecte diferite pentru interfață.

16
2.4.3. Platforma

Datorită popularității în creștere a chatbo t-urilor, au apărut tot mai multe platforme
unde utilizatorul își poate crea propriul chatbot.
Cele mai populare dintre ele, fiecare având facilități și nivele de complexitate diferite,
sunt cele puse la dispoziție de giganții actuali ai internetului. În funcție de necesitățile pentru
care utilizatorul creează un chatbot, va opta spre una dintre acestea sau spre altele.
IBM Watson
Acesta este cea mai populară platforma pentru realizarea de chatbot -uri personalizate.
Potrivit unei cercetări realizate de Mi ndbowser în asociere cu revista Chatbots, este platforma
go-to pentru 61% dintre întreprinderi. Watson are capacități inerente de prelucrare a limbajului
natural și poate înțelege mai multe limbi – engleză și japoneză. Asistentul virtual Watson care
vine c u platforma poate fi folosit pentru a răspunde la întrebările spontane ale utilizatorilor și
poate fi personalizat în funcție de nevoile unei afaceri individuale.
IBM Watson furnizează SDK -uri (kituri de dezvoltare software) pentru Node.Js, Java,
Python, i OS și Unity. Dezvoltarea de chatbot -uri este simplă și permite implementarea pe
platforme de mesagerie, dispozitive mobile și chiar și roboți. De asemenea, oferă o integrare
rapidă, cu o gamă largă de rețele, canale și mediu. [4]

Microsoft Bot Framework:

Microsoft Bot Framework are două componente importante: Bot Builder SDK și
Microsoft Language Understanding Service Intelligent (LUIS). Botbuilder este un SDK ce
suportă .NET și Node.js. În timp ce LUIS este motorul NLP / NLU care contextualizează
intrări le utilizatorilor. În prezent, acceptă 30 de limbi și oferă funcții automate de traducere.
Botbuilder este open source și este disponibil pe GitHub.
Bot Builder SDK furnizează API -ul Direct Line REST, care permite găzduirea chatbot –
ului în orice aplicație sau site web. Prin urmare, dezvoltatorii beneficiază de o metodă de
scriere odată ce rulează oriunde. Este, de asemenea, posibil să se includă Cortana pentru API –
urile de voce și Bing pentru căutare, împreună cu LUIS în Builder -ul Bot. De asemenea, LUIS

17
poate fi folosit ca un serviciu independent, cu aplicațiile C # SDK, Python SDK, Node JS
SDK și SDK Android. [4]

Dialogflow
Dialogflow este o platformă de realizare a chatbot -urilor, perfectă pentru chat -urile
bazate pe intenție. Dialogflow utilizează informațiile ca exemple, contexte, adnotări etc.
pentru a se potrivi interogărilor utilizatorului cu intenția potrivită. Apoi re turnează ieșirea ca
obiect de răspuns JSON care se bazează pe datele care pot fi executate în textul interogării.
Acesta are în prezent SDK -uri pentru Android, iOS, Cordova, Unity, Xamarin, HTML,
JavaScript, Node.js, Epson Moverio, Botkit, .NET, C ++, Pyth on, Ruby, PHP și Java. Suportă
14 limbi, inclusiv portugheză braziliană, chineză, engleză, olandeză, franceză, germană,
italiană, japoneză, coreeană, portugheză, rusă, spaniolă și ucraineană.
De asemenea, vine cu un modul de instruire care urmărește solici tările utilizatorului și
îi arată administratorului modul în care acesta corespunde intenției. Administratorul poate
corecta problemele dacă există, iar mașina se recalifică în consecință. Acesta vine cu o licență
gratuită și ediție de întreprindere. Un de zavantaj cu fluxul Dialog este că nu permite găzduirea
propriei instanțe a agentului, deci nu este sigură pentru anumite aplicații de nivel enterprise.
[4]

Amazon Lex
Amazon Lex este tehnologia de fundal utilizată ca motor NLP / NLU pentru Amazon
Alexa. D ezvoltatorii pot să -l folosească pentru a -și crea propriii asistenți personali care au
capacități puternice de învățare. Împreună cu Lex, Amazon oferă de asemenea Polly –
convertorul de vorbire și Rekognition – un sistem de recunoaștere imaginii. Lex folos ește în
mod inerent Lambda pentru îndeplinirea intenției și Cognito pentru autentificarea
utilizatorilor. Toate aceste soluții pot fi combinate pentru a răspunde nevoilor pentru realizarea
de chatbot -uri complexe. Cu ajutorul serviciului Lambda, chatbot -ul poate fi integrat cu multe
ERP și CRM Suites cum ar fi Zendesk, QuickBooks, Salesforce, Microsoft Dynamics,
Marketo și HubSpot.

18
AWS SDK -urile pot fi folosite pentru a dezvolta chatbot -uri pe iOS, Android, Java,
JavaScript, Python, .Net, Java, JS, CLI, Rub y, PHP, Go și C++. Prin urmare, roboții pot fi
implementați pe platforme mobile, web, desktop și chiar IoT. [4]

2.4.4. SDK

În funcție de platforma pe care se realizează chatbot -ul, sunt puse la dispoziție SDK –
uri, pentru utilizarea acestora cu diferite l imbaje de programare , ceea ce permite mutarea unei
părți a logicii de programare pe un webhook.
2.4.5 Webhook
“Un webhook în dezvoltarea web este o metodă de augmentare sau modificare a
comportamentului unei pagini Web sau al unei aplicații web, cu apeluri personalizate.„ [10]

2.5. INTEGRARE

Deoarece destinația chatbot -urile este foarte variată, acestea fiind utilizate în medii
diferite și adresându -se diferitelor categorii de utilizatori, platformele pe care acestea sunt
realizate pun la dispoziția crea torilor lor o varietate foarte largă de modalități de integrare.
Astfel, realizatorii de chatbot -uri își pot integra produsele în unul dintre următoarele
medii :
Medii de integrare
Aplicații Web, Facebook Messenger, Slack, Viber, Twitter, Twilio IP, Twilio (Text
messaging), Skype, Tropo (Text messaging), Telegram, Kik, Cisco Spark, Amazon Alexa,
Microsoft Cortana, și altele.

O clasificare a tipurilor de chatbot
În funcție de modul în care au fost programate chatbot -urile, le putem împărți în două
grupe mar i:
– cu comenzile predefinite (chatbot simplu )

19
– instruite (chatbot inteligent sau avansat).
Chatbot -urile simple funcționează pe baza unor cuvinte cheie predefinite pe care le înțeleg.
Fiecare dintre aceste comenzi trebuie să fie scris e separat de dezvoltat or folosind expresii
regulate. Dacă utilizatorul adresează o întrebare fără a utiliza un cuvânt cheie, chatbot -ul nu
poate înțelege și, de regulă, răspunde la mesaje cu formule de genul: "Îmi pare rău, nu am
înțeles".
Chatbot -urile inteligente se bazează pe inteligența artificială atunci când comunică cu
utilizatorii. În loc de răspunsuri pregătite, robotul răspunde cu sugestii adecvate cu privire la
acel subiect. În plus, toate cuvintele menționate de clienți sunt înregistrate pentru procesarea
ulterioară .

Utilitate practică a chatbot -urilor

Îmbunătățirea serviciului cu clienții.
Este cea mai bună opțiune pentru cei care nu doresc ca clienții lor să aibă parte de
mesaje de tipul:
“Vă rugăm să așteptați pentru a fi preluat de către un operator”, "Vă rugă m să așteptați,
apelul dumneavoastră este foarte important pentru noi", sau “În momentul de față toți
operatorii noștri sunt ocupați . Vă rugăm să reveniți !”
Optimizarea procesului de cumpărături.
Atunci când cumpărătorul scrie ce produs sau produse dorește, chatbot -ul trimite
informațiile la departamentul de vânzări sau poate ghida clientul direct către produsul dorit,
asistându -l pe întregul proces de achiziționare. În plus, chatbot -ul își amintește preferințele și
folosește aceste informații atunci când clientul revine.
Personalizarea comunicării.
Un chatbot răspunde la întrebările specifice ale vizitatorilor, în loc să afișeze o listă
lungă de informații, astfel ca un client percepe că beneficiază de un grad sporit de atenție, fapt
care conduce la o amplificare a dorinței de a cumpăra ceva.

20
Îmbunătățirea ratei de răspuns.
Aproximativ 90% din întrebările trimise de pe paginile de afaceri Facebook rămân fără
răspuns. Chatbot -ul răspunde la 100% din mesaje și convertește mai mulți vizitatori în
cumpăr ători.
Automatizarea sarcinilor repetitive.
Majoritatea clienților doresc să obțină răspunsuri la aceleași întrebări – Când lucrați?
Care este locația dumneavoastră? Faceți livrări? Pentru a nu scrie aceleași răspunsuri de
fiecare dată, firmele utilizează un chatbot, reducând astfel volumul de muncă al angajaților.
Etape generale în dezvoltarea unui chatbot
1. Definirea obiectivelor .
Ce ar trebui să facă chatbot -ul? Indicarea clară a listei cu funcțiile pe care trebuie să le
efectueze chatbot -ul.
2. Alegerea un ui canal pentru interacțiunea cu utilizatorii .
Este de preferat să se opteze pentru canalele preferate ale utilizatorilor – site-ul web,
aplicația mobilă, Facebook Messenger, WhatsApp sau alte platformă de mesagerie.
3. Alegerea modului de creare .
Folosire a platformelor care pun la dispoziție chatbot -uri predefinite sau construirea
unui chatbot personalizat.
4. Crearea, personalizarea și lansarea .
Descrierea algoritmul acțiunilor sale, dezvoltarea unei baze de date cu răspunsuri și
testarea chatbot -ului. Verif icarea chatbot -ului înainte de lansarea lui este esențială.
Crearea de la zero a unui chatbot.
Deoarece această metodă necesită lucrul cu cod, integrarea manuală cu mesagerii și
personalizare, implică un anumit grad de cunoștințe de programare .
Avantajel e acestei abordări sunt:
– deplina conformitate cu necesitățile proprii,
– controlul asupra datelor primite de chatbot,
– posibilitatea de a face corecții cu ușurință,
– varianta cea mai potrivită pentru un chatbot cu care se confruntă clienții.
Această metodă poate necesita investiții financiare și de timp semnificative.

21
Crearea u tilizând platformele pentru realizarea de chatbot -uri.
Se poate crea un chatbot cu ajutorul platformelor care oferă toate funcțiile și integrările
necesare.
Această opțiune este asoci ată cu unele dezavantaje, inclusiv configurația limitată și
dependența de platformă.

2.6. ETAPELE CREĂRII UNUI CHATBOT
2.6.1. Componentele proiectului
– Opțiuni platformă
– Obiectivele Bot și planificarea proiectului
– Design interacțiune
– Conversație și lingvi stică
– Dezvoltarea răspunsului
– Autentificare
– Sesiune și design de date
– Fulfillment
– Testarea și asigurarea calității
– Implementare / publicare
– Analiza conversațiilor
– Îmbunătățirea continuă
2.6.2. Alegerea Platformei NLU
Chatbot -urile sunt alimentate în parte de platformele de NLU care înțeleg intențiile
utilizatorului din mesajul acestuia. Cea mai bună alegere a platformei NLU depinde de
proiectul dorit, dar pentru majoritatea proiectelor cele mai bune opțiuni sunt fie DialogFlow de
la Google fie wit.ai de la Facebook. DialogFlow are avantajul unei integrări ușoar e, cu un
singur clic, cu cele mai importante platforme de mesagerie. [8]
2.6.3. Chatbot -uri
Este important de reținut că platformele NLU nu sunt chatbot -uri. Ele nu execută
logică, bazându -se pe webhoo ks pentru a integra funcționalitatea chatbot -ului.

22
2.6.4. Alegerea platformelor de mesagerie
Chatbot -urile trăiesc pe platformele pe care se integrează, iar platforme le oferă diferite
caracteristici pentru integrare. Când se concepe un chatbot este important să se decidă care
platformă sau platforme de mesagerie vor fi utilizate pentru exploatarea chatbot -ului.
2.6.5. Platforme NLU
DialogFlow (Google)
Wit.AI (Fac ebook)
LUIS (Microsoft)
Amazon Lex
IBM Watson
2.6.6. Stabilirea obiectivele chatbot -ului și planificare
Chatbot -urile trebuie să aibă un scop clar. De exemplu, se dorește ajutarea utilizatorilor
să își rezerve întâlnirile de serviciu sau să ach iziționeze produse. Se urmărește focalizarea pe
obiectivele chatbot -ului de la început și se concentrează pe realizarea designului și
funcționalităților acestuia.
2.6.7. Designul interacțiunii dintre chatbot și utilizator
Chatbot -ul necesită un model de in teracțiune foarte diferit de cel necesar pentru
aplicațiile software tradiționale. Deși sugestiile de ajutor și unele sugestii vizuale pot fi
prezentate utilizatorilor, chatbot -urile se bazează pe conversații. Acest lucru necesită un design
atent pentru a ne asigura că utilizatorii reușesc să parcurgă etapele până la obținerea
rezultatului scontat.
2.6.8. Conversație și lingvistică
Chatbot -urile sunt “niște povestitori” și funcționează cel mai bine atunci când sunt
susținuți de autori talentați. Și pentru c ă chatbot -urile trebuie să înțeleagă limbajul natural al
utilizatorului se dorește anticiparea nu numai a ceea ce va spune utilizatorul, ci și a modului în
care o va spune. Din această cauză este recomandat ca pe lângă echipa care dezvolta partea de
progr amare să existe și un lingvist, care să formuleze “povestea” chatbot -ului.

23
2.6.9. Îmbogățirea răspunsului
Chatbot -urile pot răspunde pe unele platforme cu conținut media și conținut interactiv
HTML. Aceste platforme pot adăuga valoare dacă conținutul este foarte concentrat în jurul
obiectivelor centrale ale chatbot -ului. Cu toate acestea, introducerea conținutului îmbogățit
riscă să deruteze utilizatorul și să -l îndepărteze de la conversația primară.
2.6.1 0. Autentificare
Importanța autentificării depinde d e utilizarea chatbot -ului și de tipul platformei de
mesagerie. Unele platforme de mesagerie vă oferă ipoteza unei sesiuni autentice de utilizatori,
iar platformele vocale încep să recunoască voci distincte.
2.6.1 1. Design de date
Chatbot -urile generează o mulțime de date, și de asemenea se și bazează pe surse
externe de date. Acestea au o memorie pe termen scurt. Un design robust și scalabil de date
este esențial pentru succesul proiectului.
2.6.1 2. Fullfilment
Orice chatbot probabil că trebuie să vorbească cu unele sisteme externe. Aceasta poate
constitui o mare parte din domeniul de aplicare al unui proiect, mai ales dacă implică
construirea API -urilor în cauză.
2.6.1 3. Analiza conversațiilor
Analizele web tradiționale nu funcționează pentru chatbot -uri. A nalizarea
conversațiilor necesită instrumente care să ajute la măsurarea sănătății și performanțelor
chatbot -ului, cum ar fi conversia, implicarea și păstrarea. Acestea permit, de asemenea,
găsirea, redarea și analiza conversațiilor.
2.6.1 4. Îmbunătățire c ontinuă
Cele mai multe platforme NLU au un sprijin nativ pentru Machine Learning și nu
există nici o limită a ceea ce poate fi adăugat. Pe măsură ce sunt analizate datele colectate de
către chatbot, acestuia i se pot adăuga date noi, adecvate soluționărilo r problemele cu care s -a
confruntat.

24
CAPITOLUL 3. REALIZAREA ȘI TESTAREA PROIECTULUI
3.1. DESCRIEREA PROIECTULUI

Proiectului dezvoltat este un chatbot utilizat pentru evidența personală a cheltuielilor.
Cu ajutorul acestuia, fiecare cheltuială este înregistrată printr -o comandă vocală sau prin
scriere, într -o bază de date.
Deoarece tipul cheltuielilor este diferit în funcție de moneda de plată, acest chatbot
identifică și operează cu moneda adecvată solicitării.
Chatbot -ul generează rapoarte în func ție de moneda specificată sau de o monedă
implicită, prestabilită.
Cheltuielile sunt înregistrate și categorisite pe baza unor categorii principale și a
subcategoriilor corespondente, chatbot -ul reușind să identifice categoria principală în funcție
de tip ul de cheltuială, iar când nu există nicio categorie adecvată, solicită selectarea uneia
existente sau oferă posibilitatea creării uneia noi. Chatbot -ul este capabil sa genereze rapoarte
în funcție de categoria sau subcategoria specificată.
Fiecare cheltui ală înregistrată în sistem este datată, ceea ce permite extragerea de
rapoarte bazate pe intervale. Chatbot -ul este capabil să identifice perioade fără a -i fi explicit
oferite. Astfel că la o solicitare pentru “luna aceasta”, el va selecta prima și ultima zi a lunii in
curs, generând un raport cu toate cheltuielile efectuate în luna curentă. În mod similar el
identifică perioada in funcție de numele unei luni a anului, sau a anului curent ori a unei luni
dintr -un an precizat.
De asemenea, chatbot -ul poate o feri diferite rapoarte mixte, ținând cont de moneda,
perioada și categoria specificată.

3.2. TEHNOLOGIE UTILIZATĂ

Pentru realizarea proiectului am folosit:
1. Platforma DialogFlow pentru realizarea chatbot -ului, utilizând resursele acestuia
pentru recunoașterea și analiza textului și construirea scheletului pentru chatbot.

25
2. Un server personal, care rulează apache web server, permițând apelarea API -urilor de
comunicare intre platforma chatbot -ului și webhook.
3. O bază de date de tip mysql , pentru colectarea datelor transmise.
4. PHP ca limbaj de programare, pentru scriere codului care permite comunicarea între
chatbot și webhook și interogările în baza de date.

3.3. MOTIVAȚIA ALEGERII PROIECTULUI

Datorită amplorii luate de utilizarea chatbot -urilor, am considerat în primul rând că este
o oportunitate de a învăța despre tehnologia care dă viață acestui concept, care se pare că
devine cu fiecare zi care trece o parte tot mai important ă în activitatea de zi cu zi.
Ideea propriu -zisă de a crea un chatbot pentru evidența financi ară personală a apărut
datorită preocupării mele de a economisi și de a cunoaște oricând care sunt domeniile unde e
nevoie de control asupra cheltuielilor.
Cum ritmul de viață este foarte alert, iar timpul foarte prețios, de multe ori am uitat sau
am omis să îmi înregistrez cheltuielile folosind metodele clasice de înregistrare și evidență a
lor.
Realizarea unui chatbot care sa fie disponibil în orice clipă și în orice loc face posibil
ca evidența să fie păstrată mult mai riguros, astfel că după fiecare ch eltuială este suficient să
rostesc chatbot -ului ce trebuie să înregistreze. De asemenea chatbot -ul face posibil ca în orice
moment să pot afla rapoarte despre situația cheltuielilor.

3.4. DOCUMENTAREA PROIECTULUI

Pentru documentarea proiectului am utilizat re sursele disponibile pe internet, pe
website -uri de specialitate.
În mod special am apelat la documentația pusă la dispoziție de către platforma
DialogFlow, pe care am și realizat chatbot -ul.

26
3.5. PROIECT CHATBOT
3.5.1. Concepție și pregătire

Înainte de a începe par tea practică propriu -zisă de realizarea a chatbot -ului, am
imaginat cea mai mare parte a procesului pe care doream să îl implementez.
Am stabilit care sunt datele pe care doresc să le colectez și formatul pentru fiecare
dintre ele.
Am stabilit metoda pri n care voi comunica cu chatbot -ul, respectiv conversație verbală
și scrisă.
Conceperea și crearea bazei de date

Am stabilit că este necesar să am trei tabele:
Tabela contabil – în care sunt înregistrate cheltuielile și având următoarele câmpuri
• id – indexul tabelei
• date – data efectuării cheltuielii
• type – tipul cheltuielii (inițial intenționam sa adaug și intrările financiare, pentru a
realiza o balanță)
• amount – suma cheltuită
• currency – indexul monedei în care s -a plătit cheltuiala
• category – indexul categoriei principale din care face parte cheltuiala (Food, Drink,
Distraction, etc)
• subcategory – indexul categoriei secundare ( care reprezintă bunul sau serviciul pentru
care s -a plătit – Bread, Beer, Cinema)

Tabela category – în care se înr egistrează denumirile literare ale categoriilor și subcategoriilor
și având următoarele câmpuri:
• id – indexul tabelei
• label – Denumirea categoriei, asa cum doresc sa fie afișata
• alias – denumirea categorie, in format lowercase, utilizată pentru identificar e

27
• parent – gradul de ierarhie a categoriei, categoriile principale având apartenență 0, iar
subcategoriile având apartenență ID -ul categoriei principale

Tabela currency – tabelul cu tipurile de monede cu care va opera chatbot -ul, având
următoarele câmpuri :
• id – indexul tabelei
• label – codul ISO 4217 a monedei

Scriptul pentru crearea bazei de date se găsește în ANEXA 1 – COD WEBHOOK – pag.1
3.5.2. Realizare instanță chatbot pe platforma DialogFlow

Pașii necesari pentru realizarea unui chatbot pe platforma de la Google:
Crearea unui agent nou

Crearea unui agent nou se face la https://console.dialogflow.com/api –
client/#/newAgent . DialogFlow face din crearea agenților de chat o treab ă foarte simplă,
necesitând doar completarea numelui agentului și asocierea acestuia cu un proiect existent pe
platforma Google.

Figură 8 Creare agent pe DialogFlow

28

Tot aici se selectează limba preferată a proiectului. În cazul meu am optat pentru limba
engleză, deoarece DialogFlow nu are (încă) suport și pentru limba română.
Am creat un nou agent cu numele expenser .
Odată ce avem creat agentul, se observ ă că în lista i ntent -urilor există deja două i ntent -uri
create:
• Default Falback intent – care este apelat atunci când chatbot -ul eșuează în identificarea
acțiunii pe care trebuie să o execute.
• Default Welcome intent – care este apelat imediat după inițierea conversației dacă nu
există prede finită o altă acțiune implicită.

După acest pas, chatbot -ul poate fi deja testat pe simulatorul Google Assistant , DialogFlow
punând la dispoziția dezvoltatorilor o consola proprie cu ustensile pentru testarea și depanarea
chatbot -ului.

Figură 9 Simulator Google Assistant

29
Setarea textului pentru invocarea chatbot -ului

Pe pagina consolei se setează textul de invocare a chatbot -ului. În meniu, la secțiunea
Invocation, am setat textul cu ajutorul căruia comunic lui Google Assistant să inițieze o
conversație cu chatbot -ul meu. După mai multe încercări nereușite datorită combinațiilor
nepotrivite pe care le -am ales, am reușit să stabilesc ca text de invocare expresia: “Talk to my
money”.

Figură 10 Setare frază pentru invocarea chatbot -ului

După testarea funcționalității și primirea răspunsului de bun venit, se poate începe crearea
propriilor i ntent -uri.

Crearea i ntent -urilor inițiale

Creare i ntent -urilor presupune cunoașterea și înțelegerea acți unii pe care dorim să o
inițiem cu ajutorul unor expresii predefinite . Alegerea expresiilor adecvate pentru antrenare
este importantă, deoarece dacă se stabilesc expresii cu aceeași structură sintactică, fără a
stabili un context adecvat, există riscul de a obține o eroare de neidentificare a acțiunii. Când
avem puține i ntent -uri definite, riscul este mai mic, însă acesta creste direct proporțional cu
numărul de acțiuni pe care le includem în chatbot.

30
1. Intent – addExpense

Pentru început am creat i ntent -ul pentru adăugarea cheltuielii, denumit addExpense și am
stabilit un răspuns pentru cazul în care totul funcționează corect.
Pentru acest intent am ales ca set de date pentru antrenare doua expresii asemănătoare,
doar verbul fiind diferit :

• I paid 500 currency -name for expense -type
• I spent 100 currency -name for expense -type

DialogFlow a selectat automat “ 500 currency -name ” și i-a atribuit o variabilă de tipul
@sys.currency. Din păcate atribuirea făcută automat nu îmi era utilă în forma aceasta,
deoarece a m nevoie de o diferențiere clară între sumă și tipul de monedă folosit. Astfel că am
creat doua variabile distincte și adecvate pentru suma și una pentru identificarea tipului de
cheltuială.
• 500 – @sys.number – pentru a permite utilizarea oricărui tip nume ric
• Currency -name – @sys.currency -name – pentru identificarea automată a tipului de
monedă
• Expense -type – @sys.any – pentru introducerea oricărui string

Am formatat un răspuns și l -am setat ca implicit pentru a verifica dacă sunt identificate corect
toate variabilele:

Figură 11 Setare răspuns implicit pentru un intent

In zona de testare am scris fraza: “I spent 5 RON for bread”, iar răspunsul a fost “Did you
spent 5 RON for bread?” confirmând că variabilele sunt identificate corect.

31

2. Intent – addCategory

Pentru că fiecare tip de cheltuială trebuie să se afle într -o categorie, este nevoie de o
procedură de adăugare a acestor categorii.
Am creat un intent nou, numit addCategory și am setat următorul set de date pentru antrenare:

Figură 12 Adăugare fraze pentru antrenare

Termenul category l-am definit ca variabilă $new -category -name de tip @sys.any,
pentru a accepta orice string ca valoare.
Ca răspuns implicit am definit “I will add a new main category, named $new -category –
name!”.
Am verificat dacă variabila $new -category -name este populată corect, introducând
textul “Add Food category”, iar răspunsul primit a fost „I will add a new main category,
named Food!”.

Utilizarea webhook – Fullfilment

După această etapă, deoarece era nevoie să pot salva datele într -o bază de date, am
trecut la scrierea codului API pentru webhook.
Pentru a putea utiliza webhook -ul, este nevoie ca fiecare intent să aibă setat ă o valoare
pentru Action.

32
La intent -ul addCategory adăugăm la secțiunea Action and parameters, ca acțiune
addCategory. Am preferat să utilizez chiar numele i ntent -urilor pentru acțiuni, pentru a le
putea identifica mai ușor și pentru că DialogFlow îmi per mite sa fac acest lucru.

Figură 13 Setarea numelui acțiunii pentru un intent
Apoi ii spunem că rezultatul nu va mai fi cel stabilit implicit ci va trebui sa utilizeze
API-ul nostru. Pentru asta la secțiunea Fullfilment din pagina intent -ului, bifam opțiunea
“Enable webhook call for this intent”

Figură 14 Activare opțiune webhook

Din acest moment, orice apel se face din i ntent -ul addCategory , răspunsul va fi
prelucrat pe serverul local și returnat sub forma de json către DialogFlow care îl va afișa
utilizatorului.
Primele teste

Am introdus în zona de testare “Add Food category”. În acest moment o nouă
categorie a fost salvată în baza de date și am primit mesajul de confirmare.
Următorul pas a fost încercarea de introducere a unei noi cheltuieli, introducând în
zona de testare mesajul “I spent 5 RON for bread ”.
Conform regulilor stabilite pe serverul local, se face o verificare dacă produsul face
parte dintr -o categorie existentă, caz în care se cere confirmarea pentru salvarea produsului în
categoria selectată de algoritm.
În cazul în care produsul nu există și nu este asociat niciunei categorii, răspunsul întors
este sub forma unei liste car e afișează categoriile principale în care poate fi adăugat produsul.

33
De asemenea se sugerează ca în cazul în care produsul nu poate fi asociat niciunei categorii
principale existente, există alternativa de a crea o categorie nouă adecvată.
După întoarcerea răspunsului în care mi se cere sa aleg o categorie dintre cele
existente, lipsea continuarea procesului de confirmare.

3. Intent – selectCategory

Pentru a continua procesul de salvare a cheltuielii, am creat un intent nou, numit
selectCategory, cu ajutorul căruia se confirmă categoria în care doresc să fie înregistrată
cheltuiala.
Utilizarea contextului

Pentru a putea efectua selectarea categoriei și continuarea procesul început prin
acțiunea addExpense, apare nevoia de a cunoaște contextul inițial.
Dialog Flow afișează pentru fiecare intent câte două casete în care se definește
contextul.
Un context de intrare, care preia parametri din acțiunile anterioare și le face
disponibile pentru intent și un context de ieșire, în care sunt setați parametri ce urmează să fie
utilizați la continuarea acțiunii.
Pentru a stabili un context, am revenit la i ntent -ul addExpense, iar la secțiunea Context,
am setat pentru contextul de ieșire addExpense -followup.

Figură 15 Adăugarea unui context de ieșire pentru un intent
Am revenit la i ntent -ul selectCategory, unde am setat la Context, atât ca intrare cât și
ca ieșire contextul stabilit la addExpense, adică addExpense -followup.

34

Figură 16 Adăugare a unui context de intrarea pentru un intent

Pentru setul de date de antrenare am utilizat următoarele fraze.

Figură 17 Fraze de antrenare pentru addCategory

Pentru a utiliza contextul acțiunii anterioare, am setat următorii par ametri să se
populeze cu valorile din context.
Valoarea parametrului selected -category reprezintă termenul category din setul de
antrenare și este de tipul @sys.any
Valoarea celorlalți parametri ce urmează a fi transmiși la apelul acțiunii selectCategory,
sunt preluați din contextul acțiunii anterioare, respectiv:
• amount reprezintă valoarea din #addExpense -followup.amount
• expense -type reprezintă valoarea din #addExpense -followup.expense -type
• currency -name reprezintă valoarea din # addExpense -followup.currency -name

35

Figură 18 Parametri și acțiune pentru selectCategory

De asemenea, pentru a comunica cu serverul, în secțiunea Fullfilment trebuie bifată
opțiunea Enable webhook call for this intent.
Am reluat incercarea de adaugare a unei cheltuieli. La intrebarea în ce categorie doresc
sa salvez produsul Bread, am răspuns cu “use food category”.
Raspunsul a venit sub forma unei noi solicitări de confirmare, pentru a evita înregistrările
greșite
“You spent 5 RON for bread. I will save in Food category! Save expense?”
Alte i ntent -uri

4. Intent – saveExpense

Pentru confirmarea salvării a fost necesară crearea unui intent nou. L -am denumit saveExpens.
Am setat contextul de intrare să utilizeze addExpense -followup, pentru a primi parametri
inițiali, iar la contextul de ieșire am setat să utilizere addExpense -followup.

36
Ca fraze de antrenare am utilizat următoarele expresii:

Figură 19 Setare fraze de antrenare, acțiune și parametri pentru saveExpense

Pentru parametri am utilizat valorile existente în context: expense -type, amount și
currency -name. Acești parametri sunt necesari pentru finalizarea acțiunii inițiate de
addExpense.
Am reluat procesul de testare, iar la ra spunsul primit “You spent 5 RON for bread. I
will save in Food category! Save expense?” am raspuns cu “Save expense”.

37
Pentru ca salvarea a decurs cu success, am primit confirmarea că a fost înregistrată
cheltuiala.
Am testat de asemenea alternativa compo rtamentului pentru cazul în care doresc să
salvez cheltuiala într -o categorie inexistentă. Am primit răspunsul similar cazului în care nu
știe cărei categorii să asocieze cheltuiala, procedând așa cum mă așteptam.

5. Intent – askForCategories

Pentru a pute a vedea oricând ce categorii există, am create un intent numit
askForCategories. Este un intent simplu, care nu necesită stabilirea unui context, deoarece
acțiunea se finalizează odată cu răspunsul returnat.
Pentru setul de date de antrenare am utilizat u rmătoarele expresii:

Figură 20 Fraze de antrenare pentru askForCategory

Am setat ca nume pentru acțiune askForCategories, și de asemenea am confirmat
utilizarea Webhook.
Acest intent nu are variabile, fiind necesară și suficient ă rostirea uneia dintre frazele de
antrenament.
Răspunsul returnat este o listă cu categoriile și subcategoriile existente.
Intent -uri Follow -up
DialogFlow pune la dispoziție un mod simplu de a crea înlănțuire de i ntent -uri, având
unele predefinite pentru situațiile cele mai uzuale. De exemplu pentru confirmare sau
infirmare.

38
Pentru a crea o înlănțuire de i ntent -uri, în lista i ntent -urilor actuale se selectează opțiunea
Add follow -up intent, iar din lista de i ntent -uri predefinite care este afișată se alege tipul de
intent ce se dorește.

Figură 21 Utilizarea opțiunii de follow -up pentru i ntent -uri
6. Intent – saveExpense – no
Pentru că sunt situații în care se dorește renunțarea la salvarea chel tuielii, la răspunsul
chatbot -ului de forma: “You spent 5 RON for bread. I will save in Food category! Save
expense?” trebuie oferită alternative de a refuza și de a încheia dialogul. Pentru acest caz am
creat un intent denumit saveExpense -no.
Spre deosebi re ce celelalte i ntent -uri, acesta nu are acces la webhook, răspunsul de returnat
fiind setat pe DialogFlow. De asemenea trebuie bifată opțiunea “Set this intent as end of
conversation”, pentru ca după returnarea răspunsului, chatbot -ul să întrerupă lanțul acțiunilor .

Figură 22 Utilizarea răspunsului implicit cu finalizarea conversației

Ca fraze de antrenare am utilizat următoarele expresii:

39

Figură 23 Fraze de antrenament pentru intent de tipul follow -up-no

7. Intent addCategory – yes

Atunci când se solicită adăugarea unei noi categorii, înainte ca aceasta să fie salvată în
baza de date, este nevoie de o confirmare din partea utilizatorului, pentru ca denumirea
categoriei să fie corectă.
Pentru această confirmare am creat i ntent -ul addCategory – yes, ca follow -up al i ntent -ului
addCategory.
Acest intent este unul mai deosebit, deoarece utilizarea lui poate fi solicitată și în urma
începerii unui proces de adăugare a unei cheltuieli, astfel că dup ă ce noua categorie este
adăugată, procesul inițial trebuie să se finalizeze cu salvarea cheltuielii.
Pentru acest motiv este necesar ca i ntent -ul să preia în contextul de intrare, parametri din
contextul de ieșire ai i ntent -ului addExpense, iar pentru contextul de ieșire să paseze toți
parametri i pe care i -a preluat.

Figură 24 Setare context de intrare și ieșire pentru intent de tipul follow -up-yes

Pentru antrenare am folosit o singură expresie: save category, care va iniția procesul de
salvare a categoriei.

40
Toți parametri existenți în contextul primit, au fost setați pentru a fi transmiși în
continuare.

Figură 25 Utilizarea parametrilor primiți in context

De asemenea am bifat opțiunea “Enable webho ok call for this intent” pentru ca i ntent –
ul să comunice cu serverul propriu.

8. Intent – report

Pentru obținerea rapoartelor despre situația cheltuielilor, am creat i ntent -ul report.
Deoarece este un intent care se apelează direct și nu are de transmis parametri unei acțiuni
ulterioare, acesta nu are nevoie de setarea contextului.
Deoarece am dorit ca acest intent să fie unicul folosit pentru extragerea de rapoarte, în
diferite combinații de date, m -a determinat să setez un număr mai mare de fraze de ant renare,
fiecare dintre ele fiind concepute pentru a obține un anumit tip de rezultat.

41

Figură 26 Lista frazelor de antrenare pentru i ntent -ul report – pag.1

Figură 27 Lista frazelor de antrenare pentru i ntent -ul report – pag.2
Pentru că doresc să obțin rapoarte bazate pe trei tipuri de valori și combinații ale acestor
valori, am utilizat ca parametri:

42
• currency -name – de tip @sys.currency -name pentru identificarea tipului de monedă la
care fac referire
• date-period – de tip @sys.date -period – pentru identificarea perioadei interesate
• category – de tip @sys.any – pentru identificarea categoriei de cheltuieli

Figură 28 Utilizarea variabilelor de sistem pentru identificarea entităților

De asemenea am bifat opțiunea “Enable webhook call for this intent”, pentru a permite
comunicarea cu serverul.
Exemple de interogări și răspunsuri:
“get total for food this month” – “Between 2018 -06-01 and 2018 -06-30 you spent 278.00
RON in food c ategory!” – aici FOOD este categorie principală
“get total for bread this month” – “Between 2018 -06-01 and 2018 -06-30 you spent 23.00
RON in bread category!” – aici BREAD este tip de produs
“total for this year” – “Between 2018 -01-01 and 2018 -12-31 you spe nt 389.00 RON” – aici
sunt însumate toate cheltuielile, indiferent de tipul categoriei
“get total for food” – “You spent 278.00 RON in food category!” – aici avem însumate toate
cheltuielile pentru categoria food
Se poate observa că în interogările de mai sus nu a fost precizat tipul de monedă în care
să se facă raportul. Toate răspunsurile au folosit implicit moneda RON.

43
Pentru a obține informații despre cheltuieli în altă monedă decât cea implicită, este
nevoie de precizarea acesteia în expresia de intero gare.
“total for alcohol in euro ” – “You spent 10.00 EUR in alcohol category!” – aici
raportul extrage doar acele cheltuieli care sunt plătite in Euro.
Avantajul major obținut în cazul acestui intent, este convertirea automată a expresiei
utilizate pentru perioadă într -un format de tip “date”, pe care este facil să îl utilizez în
interogările din baza de date.
3.5.3. Webhook (ANEXA 1 – COD WEBHOOK)
“Un webhook în dezvoltarea web este o metodă de augmentare sau modificare a
comportamentului unei pagini Web sau al unei aplicații web, cu apeluri personalizate.„ [10]
Pentru a fi acceptat de către Google, serverul pe care se află webhook -ul, trebuie sa fie
securizat , neacceptându -se endoint -uri de tip http ci doar https.
Cum serverul meu local nu era securizat, a fost nevoie de obținerea certificatului SSL,
pe care l -am achiziționat gratuit de la https://www.sslforfree.com /.
Serverul utilizat în testarea chatbot -ului este unul personal, care rulează Apache ca
Web Server și mysql pentru baze de date.
Pentru scrierea codului am utilizat PHP.
Structura fișierelor
bot/
├── api.php
├── classes
│ ├── category.php
│ ├── curre ncy.php
│ ├── expense.php
│ ├── operations.php
│ ├── query.php
│ └── report.php
└── index.php
Am creat structura de fișiere de mai sus:
api.php – endpoint -ul. Este responsabil cu comunicarea directă cu DialogFlow:

44
• primește request -ul,
• pasează par ametri i clasei Operations,
• trimite răspunsul către DialogFlow

index.php – l-am utilizat pentru testarea diferitelor funcționalități pe parcursul dezvoltării
codului
În folderul classes:
operations.php – clasa identifică tipului de solicitare și pasează informațiile către clasa
responsabilă de pregătirea răspunsului.
query.php – clasa este responsabilă cu efectuarea interogărilor în baza de date
currency.php – această clasă stabilește moneda implicită și returnează tipul de monedă
în format standardizat. Are un rol similar unei entități de pe platforma chatbot -ului.
category.php – este clasa responsabilă pentru operațiunile legate de categorii și
returnarea răspunsului.
expense.php – este clasa respo nsabilă pentru operațiunile legate de cheltuieli și
returnarea răspunsului.
report.php – este clasa responsabilă pentru operațiunile legate de rapoarte și returnarea
răspunsului.

Endpoint
Este un script simplu, care preia solicitările venite de la Dialog Flow și returnează
răspunsul în format json.
include_once('classes/operations.php');
header('Content -Type: application/json');
ob_start();
$json = file_get_contents('php://input');
$request = json_decode($json, true);
$operation = new Operation($request);
$output = $operation ->dispatch();
ob_end_clean();
echo json_encode($output);

45
Clase, funcții și metode

Class Operations
Clasa Operations preia parametri primiți în request și identifică acțiunea curentă.
În constructor își instanțiază clasele cu care va lucra, apoi pe baza acțiunii identificate,
pasează parametri clasei responsabile.
După ce primește răspunsul, formatează răspunsul final incluzând cheile necesare și îl
întoarce endpoint -ului.
Class Currency
Această clasă simulează funcționalitatea unei entități, verificând dacă parametrul
currency -name este definit, caz în care returnează valoarea ISO 4217 pentru tipul de monedă.
În cazul în care nu este setată nicio monedă, clasa va returna automat ISO 4217 pentru
moneda stabilită ca implicită, în cazu l acesta RON.
Conține următoarele funcții:
• setVariant() – setter pentru parametrul functiei – variant – care conține un array cu
codul ISO 4217 pentru tipurile de monede uzuale aplicației
• getCurrencyType() – getter pentru parametrul actualCurrency, paramet ru setat în
constructorul clasei

Class Category
Clasa responsabilă cu categoriile. Conține următoarele funcții:
• getParentCategory($expenseType) – returnează categoria principală pentru tipul de
cheltuială, iar daca nu există returnează false
• selectedPare ntCategoryExists($alias) – verifică dacă există categoria selectată pentru
salvarea cheltuielii
• listParentsCategory() – generează o listă a categoriilor principale
• getCategoriesTree() – returnează o listă cu categoriile principale și tipurile de cheltuieli
aparținând acestora
• setSaveCategory($expenseType) – pentru ca la un moment dat pot exista trei propuneri
de categorie principală (categorie existenta, categorie nouă solicitată direct, sau
categorie nouă propusă în timpul salvării unei cheltuieli), aceast ă funcție stabilește de
care tip este categoria în care urmează să se facă salvarea

46
• addSubcategory($parentCategoryId, $expenseType) – adaugă un nou tip de cheltuiala,
asociat unei categorii principale
• addCategory() – funcția principală, care inițiază proce sul pentru adăugarea unei noi
categorii și returnează răspunsul către clasa Operations
• saveNewCategory() – pregătește salivarea în baza de date și formatează un răspuns
adecvat în funcție de succesul operațiunii de salvare
• getParents() – cere interogarea î n baza de date pentru obținerea listei cu categoriile
principale
• createNewMainCategory() – este apelată intern de către saveNewCategory() și
transmite clasei Query solicitarea de a salva noua categorie în baza de date.
• returnToOperation($outputtext ) – formatează răspunsul final pentru clasa Operations

Class Expense
Clasa responsabilă cu cheltuielile. Conține următoarele funcții :
• addExpense() – funcția principală pentru inițierea adăugării unei cheltuieli, apelată de
către clasa Operations și care returnează răspunsul care cere confirmarea de a salva
produsul în categoria identificată, de a selecta una dintre categoriile existente sau de a
crea o categorie nouă.
• saveExpense() – dacă se primește confirmarea pentru salvarea cheltuielii, funcția
verifi ca daca există o categorie principală pentru tipul de cheltuială. În cazul că există,
salvează cheltuiala și întoarce răspunsul de succes. În cazul în care nu există o
categorie adecvată, se returnează un răspuns prin care se sugerează crearea unei
categor ii noi.
• setSaveCategory() – în cazul în care se întoarce un răspuns prin care se solicită crearea
unei categorii noi, se setează contextul de returnat către DialogFlow
• saveExpenseToDB() – salvează cheltuiala în baza de date
• setParentCategory() – setter pe ntru proprietatea clasei – parentCategory
• setRealCurrency() – setter pentru proprietatea clasei – realCurrency
• setIDSforSaveExpense() – setter pentru proprietățile următoare: currencyId,
saveCategoryID, subcategoryId

47
• setSelectedParentCategoryExists() – setter pentru proprietatea
selectedParentCategoryExists –
• returnToOperation($outputtext) – formatează răspunsul final pentru clasa Operations

Class Report
Clasa responsabilă cu rapoartele. Conține următoarele funcții :
• getTotal() – funcția principală, apelat ă din clasa Operation pentru acțiunea report. În
cadrul ei se face verificarea dacă este setat ca parametru un interval de timp. Tot
această funcție formatează și răspunsul pe care returnează clasei Operations
• setDate() – setter pentru proprietățile funcți ei: startDate și endDate

Class Query
Este o clasă simplă, responsabilă cu interogările în baza de date și returnarea
rezultatelor acestora către solicitant.
În constructorul ei se instanțiază conexiunea cu baza de date utilizată, restul funcțiilor
efectuând interogări în baza de date.
Conține următoarele funcții :
• getParents() – returnează un array cu categoriile principale
• parentCategory($expenseType) – identifică categoria pentru un tip de cheltuială
• getCategoryId($alias) – returnează cheia prima ră pentru o categorie
• addSubcategory($label, $alias, $parentCategoryId) – inserează în baza de date
un nou tip de cheltuială
• addExpense($amount, $currency, $category, $subcategory) – inserează în baza
de date o cheltuială nouă
• getCurrencyId($label) – retur nează cheia primară pentru un tip de monedă
• addParentCategory($label, $alias) – inserează în baza de date o nouă categorie
principală
• parentCategoryExists($alias) – verifică dacă o categorie exista
• selectByIntervar($startDate, $endDate, $currency, $categor y=false) –
returnează suma coloanei amount pentru un interval de timp dat

48
• selectByCategory($currency, $category) – returnează suma coloane amount
pentru o anumită categorie
• getCategoriesTree() – returnează un array cu categoriile principale și tipurile de
cheltuieli asociate acestora

3.5.4. Testarea și depanarea proiectului

Pentru testarea chatbot -ului am utilizat pe parcursul dezvoltării lui, ustensilele puse la
dispoziție de către platforma DialogFlow. Procesul de depanare este unu simplu, având la
îndemâna cam toate informațiile necesare pentru a putea identifica rapid o eventuală
problemă.
Cu toate că sunt acoperite toate necesitățile pentru depanare, informațiile sunt minimale,
limitate strict la ce este nevoie pentru a putea identifica problemele.

Dialog Flow oferă două alternative pentru testarea și depanarea chatbot -urilor.
Zona de testare di n fereastra de dezvoltare

În zona de testare există un câmp în care se introduce de la tastatură fraza dorită.
Când se trimite fraza, aceasta este transferată în zona Agent pentru a ști subiectul, iar sub
aceasta este afișat răspunsul.
Imediat după răspuns, este afișat contextul sau contextele incluse în conversație, iar apoi sunt
afișați parametri utilizați.

49

Figură 29 Zona de testare

50
DIAGNOSTIC INFO
Acesta pune la dispoziție în doar patru ferestre, informațiile relevante , transparente
procesului conversațional.

Figură 301 Diagnostic Info – RAW API RESPONSE

51

Figură 312 Diagnostic Info – FULLFILMENT RESPONSE

52

Figură 32Diagnostic Info – FULLFILMENT STATUS

Figură 33Diagnostic Info – FULLFILMENT RESPONSE

53
În simulatorul Google Assistant

Figură 34 Depanare și testare în simulatorul Google Assistant

În simulatorul Google Assistant de asemenea se poate testa chatbot -ul, pentru a ști cum
se manifestă pe un dispozitiv care rulează Google Assistant.
În fereastra din stânga se poate vedea întreg flow -ul conversației. În partea dreaptă se
află ustensilele pentru depanare, care oferă informații despre cum se manifestă chatbot -ul în
aplicația de la Google.
Telefon
Pentru testarea conversațiilor vocale, a m utilizat telefonul personal, care rulează
Google Assistant.

54
CAPITOLUL 4. CONCLUZII

Interfața conversațională reprezintă viitorul

Viitorul este acum! În filmele Science -Fiction ale copilăriei, ne minunam atunci când
personajele umane dădeau diferite comenzi mașinăriilor, iar acestea cu o voce robotică,
sintetizată, răspundeau: “Da stăpâne!” după care în clipa imediat următoare execut au comanda
primită sau răspundeau întrebărilor adresate, răsfoind informații bine structurate și la care
aveau acces foarte rapid .
Ideea de Interfață conversațională sau chatbot nu este una recentă ci mai degrabă
implementarea ei reală doar se aliniază vre murilor noastre.
Așa cum roboții mecanici își extind importanța în industrie, în economie și chiar în
viața personală de zi cu zi, suplinind cu succes nevoia de personal calificat pentru muncile
care presupun precizie sau rutină, tot așa și roboții convers aționali tind să acapareze teren pe
toate domeniile umanității , iar r itmul alert impus de tehnologizare ne determină să ne adaptăm
pentru a supraviețui ei și pentru a beneficia de toate “minunile” oferite .
Realizarea de chatbot -uri a devenit o practică tot mai comună și facilă totodată.
Multitudinea de platforme dedicate dezvoltării de chatbot -uri, fiecare dintre ele oferind
posibilități diferite fată de celelalte ne determină să concluzionăm că interesul pe ntru acest
domeniu este în creștere .
Varietatea scopurilor pentru care se realizează chatbot -uri rezidă în tendința de a
implementa această tehnologie în toate domeniile, de la divertisment până la medicină.
Evoluția inteligenței artificiale se află și e a în plină desfășurare , ceea ce facilitează
dezvoltarea de chatbot -uri inteligente .
De asemenea, creșterea numărul ui de utilizatori ai aplicațiilor de mesagerie este în
plină expansiune , devenind mediul propice implementării de interfețe conversaționale.

Posibilitatea tehnologică

Odată cu creșterea puterii de calcul din ultimul deceniu, dezvoltarea de aplicații
interactive a luat și ea amploare.

55
Apariția cloud -ului a favorizat dezvoltarea aplicațiilor web, care nu mai necesită putere
de calcul și spațiu d e stocarea pe calculatoarele personale.
Dezvoltarea inteligenței artificiale este un alt factor tehnic ce conduce spre realizarea
ușoară a chatbot -urilor. Datorită AI s -au putut crea sisteme de procesare a limbii naturale
(NLP ) care cu ajutorul platformelo r pentru înțelegerea limbii naturale (NLU) pot identifica
intențiile, entitățile și contextul dintr -o conversație. Având aceste resurse disponibile, restul
procesului de creare a roboților vorbitori a deveni o posibilitate reală.

56
BIBLIOGRAFIE

[1] https://start -up.ro/primul -chatbot -care-te-invata -33-de-limbi -straine -e-construit -de-
brasovenii -de-la-mondly/
[2] http://www.wildml.com/2016/04/deep -learning -for-chatbots -part-1-introduction/
[3] https://medium.com/@surmenok/chatbot -architecture -496f5bf820ed
[4] https://www.newgenapps.com/blog/top -5-chatbot -platforms -develop -bots-sdk-solution –
tools
[5] https://en.oxforddictionaries.com/definition/chatbot
[6] https://medium.com/swlh/what -is-a-chatbot -and-how-to-use-it-for-your-business –
976ec2e0a99f
[7] https://chatbotsmagazine.com/the -complete -beginner -s-guide -to-chatbots -8280b7b906ca
[8] http://www.m0ther.ai/anatomy -of-a-chatbot -project
[9] https://en.wikipedia.org/wiki/Chatbot
[10] https://en.wikipedia.org/wiki/Webhook
[11] https://www.androidauthority.com/google -assistant -838138/
[12] https://www.cultofmac.com/538703/apple -siri-job-listings/
[13] http://www.businessinsider.com/the -messaging -app-report -2015 -11

Similar Posts