Voi răspunde mai întâi partea cu privire la modul în care o fac : Eu folosesc o MongoDB. Am cochetat cu ideile le - ați menționat, dar repede barată soluții în memorie (Memcached, Redis) cu același motiv. Soluția mea finală a coborât fie la un DB relationala sau un NoSQL ca MongoDB. Pentru a fi sincer, la scara proiectului meu, eu nu cred că despre compararea performanței între tipurile de robust DB.
Cu mea caracteristică particulară „foaie de parcurs“ , am decis să merg cu Mongo să se apropie de un „OOP“ stil mai mult atunci când se ocupă cu utilizatorul „obiect“ , fără a fi nevoie să se definească în mod explicit o clasă de utilizator, datorită structurii normalizată a Mongo. Am înțeles același lucru ar putea fi făcut pentru MySQL, de asemenea, doar că prelucrarea jsondatelor este mai mult „obiect ca“ pentru mine și flask, de exemplu user = getUserFromMongo, ceea ce îmi dă un dict în Python , atunci eu pot face doar user['first_name']. Codurile belows vor explica această simplitate:
(Într-un fel acest lucru a fost sentimentul ca ... nu fi nevoie să scrie comenzi SQL pentru baze de date interacțiune simplă în Rails)
Datele mele de utilizator obiect pe MongoDB

În cele din urmă, cu privire la modul în care pot gestiona datele introduse de utilizator , am adoptat conceptul de Wit.ai lui context. Nu știu cum o fac exact, dar contextpentru mine este tipul de scop conversație care se întâmplă. L folosesc ca o stivă, și de îndată ce contextul actual se face, pop - l pe datele contextuale ale utilizatorului. Pentru fiecare mesaj bot primește, programul va primi contextul actual și direct fluxul. Ori de câte ori o eroare necunoscută apare (excepții de manipulare), cel mai probabil , deoarece utilizatorul spune ceva bot nu înțelege, am șterge contextdatele, de asemenea.
Partea bună despre MongoDB este că eu pot modela , contextdar vreau si trata doar ca un obiect. Unul simplu este ca {name: yelp-search, stage:ask-for-user-location}și îmi imaginez cele complexe ar putea fi construit pe această structură, de asemenea. Desigur, o implementare stiva contextnu se face cu conversație complexă , cu referire singur cu complex.
Am pus proiectul meu pe Github dacă doriți să aruncați o privire la ea.