1.Botsail CE và các chức năng cơ bản #

1.1.Băt đầu với Botsail CE #

Bạn muốn xây dựng một ứng dụng chatbot đơn giản cho riêng mình hoặc cần dựng một hệ thống Chatbot SAAS cho công ty hoặc tổ chức. Botsail cung cấp toàn bộ mã nguồn phiên bản Botsail CE. bạn có thể xây dựng chatbot hoặc cung cấp dịch vụ Chatbot như ChatFuel, ManyChat thông qua phiên bản này.

Dự án đang trong quá trình development để ra version đầu tiên, nếu các bạn dùng thấy có bug/issue hoặc góp ý xin ghi thông tin góp ý vào đây. Mình xin trân trọng mọi ý kiến đóng góp của các bạn : https://docs.google.com/forms/d/1Ro2nMlPK5jcosQEjNDv8rNRb1LiDqQxI58vYKI-Gjs4

Nội dung tài liệu gồm có 3 phần: 

Phần 01: Làm quen Botsail CE và các chức năng cơ bản

  • Cài đặt Botsail trên máy
  • Kiến trúc Botsail CE
  • Tạo và tùy chỉnh Bot trên giao diện đồ họa
  • Giới thiệu về package fbsbot
  • Cài đặt môi trường test với Facebook

Phần 02: (đang thực hiện)

  • Giới thiệu về Package bspatternengine và cách xây dựng Chatbot Engine
  • Xây dựng các tính năng cao cấp với việc nhúng các mã Nodejs
  • Sử dụng các hàm API trong mã nhúng
  • Phân quyền và bảo mật
  • Xây dựng chatbot Trợ lý ảo du lịch
  • Xây dựng chatbot Minigame

Phần 03: (đang thực hiện)

  • Xây dựng pạckage cho riêng bạn
  • . . . . . . .

Hiện tại Botsail CE mới đang cuối giai đoạn phát triển, việc tồn tại những hạn chế như bug, problem là không tránh khỏi. Nếu các bạn phát hiện bug xin vui lòng report cho chúng tôi để Botsail ngày càng hoàn thiện.

Yes No

1.2.Cài đặt #

Hiện tại đã có bộ cài đặt tích hợp Botsail CE + Mongodb + Database được đặt ở mục Download, có bản dành riêng cho WindowsLinux. Nếu các bạn không tự tin trong setup môi trường thì có thể dùng 2 bản sựng sẳn.

1.Thiết lập MongoDB

Các bạn cài đặt bằng cách truy cập vào địa chỉ website https://www.mongodb.com//download-center?jmp=nav sau đó download về. việc cài đặt mongodb không quá phức tạp với dân kỹ thuật nên sẽ không hướng dẫn cụ thể. Các bạn có thể tham khảo các link sau để có thông tin chi tiết về cách cài đặt: https://o7planning.org/vi/10265/huong-dan-cai-dat-va-cau-hinh-database-mongodb.

Sau khi cài đăt Mongodb, nên cài đặt công cụ quản lý database như là NoSQLBooster for MongoDB  Đây là công cụ thuận tiện để bạn quản lý database sau này nếu bạn có nhu cầu tham gia development Botsail hoặc phát triển các Package cho riêng mình.

Kết quả hình ảnh cho NoSQLBooster for MongoDB

Bước tiếp thep, bạn hãy tạo một database là [botsail] để dùng cho hệ thống

 

2. Cài đặt Botsail

Hiện Botsail CE vẫn trong quá trình development, các bạn có thể chạy thử ở https://github.com/botsail/botsailce. File database của dự án được đặt trong folder /temps/Database.zip, các bạn unzip file này rồi dùng mongodb import để import data là có thể chạy được.

Sau khi cài đặt, tiến hành thiết lập các thông số như sau:

Vào file <APP>/config/database.js edit lại connect string đến mongodb

module.exports = {

‘url’ : ‘mongodb://127.0.0.1/botsail’                     // looks like mongodb://<user>:<pass>@mongo.server.net:<port>/<db-name>

};

 

Mở file <APP>/config/constants.js config lại các, đặt biệt cần chú ý đến các tham số quan trọng là:
– host: đây là url có dạng https trỏ đến botsail, dựa vào url này để thiết lập kết nối với Facebook Messenger và các hệ thống khác
– email_smtp_host/email_smtp_port: công thông tin dùng gởi email trong trường hợp user quên passwod

Chú ý: Hệ thống Botsail là một engine và chạy trên port 3000 với giao thức http, nhưng để kết nối với các hệ thống như Facebook Messenger/Skype bạn cần dùng giao thức https (giao thức bảo mật cao). Do đó, bạn cần thiết lập kế nối của nó đến các web server chuyên dụng như Apache hoặc Nginx. Để tìm hiểu cách thiết lập này bạn có thể tham khảo thông tin sau: https://blog.duyet.net/2016/04/deploy-production-nodejs-pm2-nginx.html#.W0d4pNX7TIU

Install database cho Botsail 
File DB được đặt trong folder /temps/Database.zip của sourcecode, trong DB có một số thông tin config của Botsail CE. nếu không cài DB bạn sẽ không chạy được ứng dụng.

Database mặc định là botsailce, khi restore mongodb sẽ tạo 1 DB mới có tên botsailce. Do đó, đảm bảo trong server của bạn Không được có DB nào có tên giống vậy.

Câu lệnh restore data:
 bước 01: unzip file Database.zip thành folder /Database
bước 02: dùng lệnh  mongorestore -v –host <server>:<port> –dir <path-to>\Database –objcheck
(chú ý là nó phải chỉ đến folder /Database  chứ không phải /Database/botsailce nhé)

mongorestore là một lệnh của mongdb, nếu bạn không chạy đượcthì xem lại đường dẫn đến folder mongodb/bin

VD: mongorestore -v –host localhost:27017 –dir D:\temp\Database –objcheck : Khi đó một database mới là botsailce (trùng tên với folder con nằm trong folder /Database đó) sẽ được tạo

URL của Botsail 

Khi quá trình cài đặt hoàn tất, bạn có thể vào website với URL như sau : http://domain-cua-ban.com:3000 hoặc http://localhost:3000 nếu test trên localhost.

Account root

Để quản trị hệ thống, chúng tôi cung cấp acc root để quản trị, hiện các chức năng cho root chưa hoàn thiện nên bạn chauw thấy được.

Đăng ký, đăng nhập
– Bạn đăng ký account theo link http://domain-cua-ban.com:3000/signup

– Đăng nhập: http://domain-cua-ban.com:3000/login

3. Dùng ngork để test
Trong quá trình test hệ thống, sẽ rất khó check lỗi nếu bạn đưa Botsail lên server, có một giải pháp cho vấn đề này là dùng Ngork. Ngrok là gì, đơn giản là công cụ “ánh xạ” localhost của bạn lên Internet.

Làm sao dùng Ngrok: rất đơn giản chỉ cần làm 3 bước sau
1. Đăng ký tìa khoản free
2. Download ngrok về máy, giản nén
3. Vào folder bạn vừa giải nén, chạy câu lệnh ngrok http [port bạn muốn mở] (VD: ngrok http 80)

ngrok forward to localhost

 

Sau khi chạy, Ngrok sẽ thông báo cho bạn địa chỉ URL gồm là sub-domain của Ngrok (VD http://fjh437e.ngrok.io). Chỉ cần copy cái địa chỉ này rồi đưa cho bạn bè là ai cũng thấy được tác phẩm của bạn.

Chỉ có một bát tiện nhỏ, đó là với acc free, mỗi lần chạy bạn sẽ có 1 URL khác nhau. Nhưng đó đâu phải vấn đề, phải không ? !

4. Quyền root của Botsail

Botsail cung cấp quyền quản trị root cao nhất trong toàn hệ thống, khi login bằng quyền root bạn có thể xem và sửa thông tin user bất kỳ, cấu hình hệ thống.

Khi cài đặt xong, pass mặc định của quyền root là [ilovebotsail], khi login vào bạn nên thay đổi pass này nhằm bảo mật hệ thống.

Trường hợp quên pass, bạn có thể dùng lệnh [node root-reset.js] từ console để reset password của root về mặc định là [ilovebotsail].

Yes No

1.3.Kiến trúc Botsail CE #

1.Cấu trúc folder

Botsail được phất triển dựa trên nền ExpressJS, sau khi cài đặt bạn sẽ có cấu trúc folder như sau :

Ý nghĩa các folder:

1.1 /routers

Là một thành phần quan trọng, và cũng là một trong các thành phần đầu tiên tiếp nhận thông tin từ client, Router trong Botsail cũng như Express framwork là một bộ định tuyến giúp cho chúng ta định danh ra các url và hành động kèm theo nó.

Dựa vào URL, nếu bạn muốn biết nó sẽ được chạy từ Controller thì chỉ việc vào đây tìm hiểu.

Botsail CE tổ chức router thành nhiều file khác nhau, khi app khởi động nó sẽ quyets qua folder <app>/routers và load tất cả các routers vào bộ nhớ.

1.1 /app

Botsail xây dựng dựa theo kiến trúc M-V-C là phần coding của nó tập trung ở folder này. Chúng tôi chọn mô hình này vì nó đơn giản, dể nắm bắt và gần như lập trình viên nào cũng biết.

1.2 /config

Nơi lưu những file dùng config như thiết lập kết nối đến database, các thông số hệ thống.

1.3 /core

Phần cơ bản của Botsail,  thông thường các thành phần khác như MVC, package điều sẽ duawh chủ yếu vào phần này để phát triển.

1.4 /packages

Với mong muốn module hóa các tính năng nhằm giúp việc mở rộng của nó được dể dàng, Botsail cho phép cung cấp các tính năng trong hệ thống như những package.

Hệ thống hiện tại cung cấp 2 loại Package là Engine và non-Engine

  • Engine : là các class mở rộng cho hệ thống, Engine có thể có nhiều loại nhưng quan trọng nhất là loại [chatbot engine], đây là Engine cầu nối tiếp nhận thông tin từ hệ thống chat, xử lý dựa vào Database hoặc các API rồi trả kết quả trở về. Hệ thống có thể có nhiều [chatbot engine] nhưng chỉ có 1 engine loại này được active. Botsail CE cung cấp một [chatbot engine] rất cơ bản là BSPatternEngine.
  • non-Engine : là phần mở rộng của MVC, các package dạng này sẽ có một routers dùng để định tuyến cho nó.

Cách tạo Package thế nào sẽ được cung cấp ở phần hướng dẫn nâng cao

1.5 /public

Nơi lưu trử các file ở front-end như js, css, image . . . Ngoài ra với mỗi user và bot khi được tạo, các folder dùng lưu các thông tin cho nó cũng sẽ được khởi tạo ở folder /public/uploads

2. Phần Core

Bao gồm các class quan trọng như Controller/Engine . . . cung cấp một số function cơ bản của hệ thống, khi xậy dựng ứng dụng sẽ phải extends từ các lớp này.

Yes No

1.4.Tạo và tùy chỉnh Bot trên giao diện đồ họa #

Tạo và thay đổi thông tin của Bot

Để tạo một Bot mới bạn vào trang Home, sau đó click vào button Create Bot ở góc trái để vào trang cho tiết. Tại đây, điền các thông tin quan trọng như têt Bot, mô tả, ảnh đại diện . . .  trường hợp nếu bạn không dùng ảnh đại diện Botsail sẽ dùng ảnh mặc định.

Khi tạo Bot thành công, hệ thống sẽ tự động tạo 1 folder với tên folder trùng với id của bot. Folder này dùng lưu trử các resource của Bot, folder đó được tạo ở <APP>/public/upoads/bot/[bot-foder]

Khi tạo xong, hệ thống sẽ tự động quay lại trang Home, tại đây bạn sẽ thấy Bot bạn vừa tạo nằm trên dánh sách Bot. Nếu muốn thay đổi thông tin bạn có thể click vào Butotn [Action] của Bot đó, chon mục Edit.

Để thêm các tính năng cho Bot, bạn click vào nút [Action], chọn [Develop], một thời điểm bạn chỉ được develop một Bot duy nhất. Bot đang trong quá trình develop sẽ có viền màu xanh để phân biệt.

Khi có một Bot được phát triển, menu bên trái sẽ có thếm các hạng mục như Action/Attribute/Block/JSScript/Facebook Connection . . . Các hạng mục này có ý nghĩa như sau:

1. Action :
Thao tác hỏi – trả lời chính của Botsail, mọi đoạn hội thoại chat của member sẽ được Action xử lý. Ứng với mỗi đoạn chat của user bạn có thể thiết lập nhiều câu trả lời khác nhau. Botsail sẽ chọn ngẫu nhiên một câu trả lời để gởi lại member. Action là phần quan trọng để xây dựng kịch bản cho Bot của bạn, Bot bạn thông minh cỡ nào phần lớn do phần này quy định trong phần điền thông tin người hỏi (user say).  Câu trả lời của bạn có thể là một đoạn văn, một hình ảnh hay một Block (nhiều đoạn text, hình ảnh . . .)  thông tin. Với câu trả lời là Block thông tin, Botsail sẽ xử lý đặc biệt trước khi gởi lại user.

Với Botsail bạn có 2 cơ chế điền “user say”, bạn có thể điền những đoạn hội thoại thông thường (một số framework như chatfuel/ manychat . . . vẫn làm), hoặc xử lý thông minh thông qua xử dùng cú pháp regular expression của Javascript. Với việc dùng regular expression cho phép bạn “bắt” nhiều từ có ý nghĩa tương đồng thành một đoạn hội thoại duy nhất, nhờ đó bot của bạn trong thông minh hơn.

Với cách điền “user say” thông thường, tương tự các framework hiện tại bạn chỉ cần điền các câu mà bạn đoán user sẽ dùng, cách nhau bằng dấu phẩy [,].

Bạn cũng có thể dùng cú pháp regular expression của Javascript, khi đó chỉ cần bật chức năng [Use regular expressions].

 

2.Attribute:

Attribute nghĩ là thuộc tính, hay biến trong lập trình dùng lưu các giá trị mà bạn muốn tạo cho Bot đó. Có 2 loại Attribute là Bot Attribute và User Attribute (như biết toàn cục và biến cục bộ).  Với Bot Attribute giá trị của nó trên toàn Bot đó trong khi User Attribute thì thông tin sẽ thay đổi theo từng user.

 

Với loại Bot Attributes, bạn phải thiết lập giá trị cho nó ngay khi khởi tạo

 

Với User Attributes, do giá trị thay đổi theo từng user khác nhau, như giá trị full_name hay gender (giới tính) sẽ khác nhau ở mỗi user khác nhau, nên bạn phải dùng code Nodejs (javascript) để thêm vào. Phần này sẽ được giải thích kỹ hơn ở mục sau.

 

3. Block

Botsail cho phép tổ chức các câu trả lời thành một khối, khi user chat với Botsail căn cứ vào phần action mà Botsail sẽ chọn ra câu trả lời thích hợp. Nếu câu trả lời đó là một Block thì Botsail sẽ trả lời với phần thông là một khối dữ liệu và có thể bao gồm cả các đoạn mã Nodejs.

Ngoài ra, khi trả lời, Botsail sẽ ưu tiên phần action. Nhưng nếu nó không tìm được câu trả lời trong phần action thì Botsail sẽ tìm đến phần Block có tên giống với tên user vừa gõ. Với Block bạn costheer xử dụng Text, thêm Image, thiết lập yêu cầu đến URL nào đó để lấy data rồi đẩy vào Attributes hoặc chạy một đoạn Nodejs JavaScript.

 

Ví dụ sau là một Block [Danh sách khuyến mãi tháng 08], bạn có thể thêm hình ảnh, câu chào hỏi và 1 gallery danh sách các mặt hàng đang khuyến mãi.

Nếu bạn muốn tạo Gallery cho các image, có thể dùng Group ID để nhóm nó lại thành một nhóm (chức năng tạo Gallery chuyên nghiệp như các hệ thống khác đang được phát triển)

 

 

Yes No

1.5.Facebook Connection #

Để Bot đại diện fanpage của bạn trả lời tin nhắn người dùng, Botsail cung cấp một package với rất nhiều chức năng là Facebook Simple Bot (FBSBot). Tùy gọi là Simple (đơn giản) nhưng không phải vì thế mà bạn lo lắn về hạn chế của nó. FBSBot cung cấp các tin năng không thua một ChatBot chuyên nghiệp nào:

  • Kết nối với Facebook, nhận thông tin, xử lý và trả lời các tin nhắn
  • Liệt kê danh sách user đã chat với hệ thống
  • Tag các user vào một nhóm
  • Broadcast tin nhắn đến một nhóm user bất kỳ được tag

Để cài đặt chatbot cho fanpage, bạn thực hiện các bước sau

Bước 1: Tạo một Facebook Page (Có thể bỏ qua nếu bạn đã có Fan page)

  • Đăng nhập vào FB, chọn vào dropdown menu ở góc trên bên phải
  • Click vào Create Page để tạo một trang mới và chọn Company, Organization or Institution
  • Trong mục Choose a Category, chọn Education
  • Điền tên Company Name là “Botsail Demo” sau đó click Get Started
  • Và chúng ta được trang “Botsail test”

 

Bước 2: Tạo account Facebook Developer
Chúng ta sẽ sử dụng Facebook Developer như là một kênh để chỉ đạo message từ Facebook đến chatbot của mình. Vì thế, chúng ta cần kết nối trang FB voiwis Facebook for Developer

Mở trình duyệt và đi đến trang FB Developer: https://developers.facebook.com/

Image description

 

  • Get Started với account FB của bạn
  • Click Create App ID
  • Set Display Name là “Botsail test” và chọn Apps for Messenger on Category
  • Sau khi bạn đăng nhập tài khoản của mình, chọn Messenger ở menu bên trái
  • Tìm mục Token Generation, chọn Botsail Demo ở Page, và kết nối đến tài khoản FB lần nữa
  • Sau đó bạn có thể lấy được Page Access Token. Hãy lưu lại nó để sử dụng sau.

 

Bước 3: cài đặt webhook

Để kết nối với Facebook ta cần các thông số sau:

  • ID Ứng dụng : xem hướng dẫn bên dưới
  • Khóa bí mật : xem hướng dẫn bên dưới
  • Mã truy cập trang : xem phần trên
  • Verify key: từ điền, để facebook verify tới trang bạn, bạn có thể đặt “ilovebotsail”

Tại facebook, vào phần Cài đặt\Thông tin có bản, lấy [ID Ứng dụng] (hay gọi là [App ID]) và [Khóa bí mật của ứng dụng]

 

Vào Botsail, click vào Menu Facebook Conection điền các thông tin đã lấy được ở trên vào

 

Trong mục config của Botsail, copy lại Webhook URL, sau đó vào trang webhook, click vào button [Edit Subscriptions] ở Facebook tiến hành khai báo URL của chatbot. Click xác minh và lưu.

 

Bước 4: Thêm người dùng thử 

Trước khi dùng và công khai Chatbot của bạn, một bước không thể bỏ qua làm kiễm tra. Vì khác với các dịch vụ chatbot khác, Botsail có hỗ trợ coding JSScript nên trong quá trình phát triển có thể tìm ẩn lỗi không mong muốn. Do đó, tốt nhất các bạn nên thiết lập Ngork (xem phần đầu) trỏ đến máy bạn đang develop, rồi test thật kỹ trên đó.

Do Bot chưa được public, nên muốn cho ai chat được với nó bạn phải thêm người đó vào Facebook App bằng cách vào Thiết lập, chọn [Vai trò] rồi thêm user mình muốn add vào.

 

Bước 5: Public chatbot của bạn

Khi chatbot của bạn đã ổn định và như ý, bạn có thể vào Facebook App Review để “nộp đơn” xin public chatbot của bạn. Khi đó những user khác khi ghé thăm mới có thể giao tiếp với chatbot được.

Để yêu cầu Facebook xét duyệt, bạn vào mục [Xét duyệt ứng dụng], khai báo các thông tin cần thiết rồi gởi đi.

Do Facebook ngày càng khó trong việt xét duyệt, bạn có thể xem thêm tài liệu ở đây: https://developers.facebook.com/docs/messenger-platform/app-review

Yes No

2.Bot Development #

2.1.JSRuntime #

Điểm vượt trội của Botsail so với các nền tảng khác là nó vừa cho phép bạn tạo Bot trên UI vừa có thể nhúng code Nodejs javascript vào bên trong Bot. Nhờ vậy, Bot của bạn sẽ mạnh mẽ và linh hoạt hơn so với các nền tảng chỉ dùng toàn UI để tạo Bot. Và code của bạn khi nhúng vào Bot sẽ được thực thi bởi package đặc biệt là JSRuntime.

Tuy vậy, việc dùng mã Nodejs trong BOT cũng có thể là con dao 2 lưỡi, vì nếu bạn build một hệ thống cho nhiều người dùng thì người này có thể tìm cách lấy trộm thông tin người khác vì trong cùng một hệ thống. Do đó, Botsail đã xậy dựng một bộ JSRuntime nhằm ngăn ngừa vấn đề này. Bằng việc dùng JSRuntime để run các đoạn code nhúng của bạn, Botsail giới hạn phần nào sức mạnh của của các đoạn code đó giúp chúng an toàn hơn trong môi trường cloud.

JSRuntime làm cách nào để tăng tính bảo vệ cho hệ thống, khi bạn nhúng mã Nodejs javascript  vào BOT, khi thực thi hệ thống sẽ chạy trong bộ NodeVM với resource hạn chế.  Nhằm giúp hệ thống an toàn và tránh các đoạn code của người dùng này muốn truy xuất resource người dùng khác. Trong NodeVM bạn không được access full các resource/package/plugin của nodejs mà chỉ dùng được các package hạn chế được đề cập bên dưới.

Các resource mà bạn được dùng bao gồm
+ Nodejs cơ bản
+ Các package của Botsail : Common, DBQuery, Attribute

 

Yes No

2.2.Common class #

Class này chỉ có các phương thức tỉnh (static function) nên bạn có thể gọi trực tiếp chứ không cần khởi tạo đối tượng cho nó

  1. isset(object) kiễm tra xem object này có giá trị hay không, nếu có thì trả về object đó, còn nếu là [undifined] hoặc [null] thì nó sẽ trả về null
  2. checkIsValidURL(url) : kiểm tra xem chuỗi [url] có phải kiểu url hay không ? nếu đúng trả về true còn ngược lại trả về false
  3. async doRequest(requestData) : xử dụng package [request] của nodejs, gọi đến url được ghi trong [requestData] và trả kế quả về, nếu quá trình thực hiện bị lỗi sẽ trả về một error object.
  4. randomNum(startNum, endNum) : Trả về số ngẩu nhiên trong khoản startNum, endNum
  5. ObjectID(strID) : Tạo Mongo Object ID theo chuổi strID
Yes No

2.3.Database #

Khi tạo và sử dụng chatbot, data được lưu trữ ở các Colection sau:
+ Contents: Nơi lưu trử toàn bộ các dữ liệu trong quá trình xây dựng chatbot như action, block, function, script . . .
+ Medatatas: Lưu những dữ liệu thuộc dùng config bot hoặc các packages
+ Communications: Dữ liệu này sẽ được sinh ra khi guest chat với Bot của bạn, các thông tin của guest (họ tên, ngày sinh, uid . . .) cũng như những dòng chat của guest sẽ được lưu ở đây.

Bảo mật Database: Botsail sẽ cung cấp cho bạn các function để truy xuất dữ liệu trong các Collection, mỗi Bot trong Botsail sẽ có một _id khác nhau. Mỗi Bot trong hệ thống chỉ được quyền truy xuất vào vùng data của riêng Bot đó, không thể động chạm được đến data của Bot khác. API của Botsail sẽ tự động điều hướng câu truy vấn đến vùng dữ liêu riêng của từng Bot, đảm bảo tính bảo mật của hệ thống.

Mongoose : Đây là thư viện mô hình hóa đối tượng (Object Data Model – ODM) cho MongoDB và Node.js, thông qua việc sử dụng các schema để định nghĩa các cấu trúc Document. Sau khi truy vấn, ta sẽ nhận được một object có cấu trúc tương tự cấu trúc schema mà ta đã khai báo.

Các Document Schema: Hệ thống Botsail dùng nhiều shcema tuy nhiên Runtime API chi cung cấp cho các bạn 4 loại Schema cơ bản là

  1. bdata: dành riêng cho user muốn lưu – xử lý data cho bot của mình.
  2. content : lưu trữ nội dung phần Action, thuộc collection [contents]
  3. block: lưu dữ liệu của block, cũng thuộc collection [contents]
  4. metadata: lưu dữ liệu cấu hình hệ thống, cấu hình các package trong Botsail
  5. communication: Lưu trữ các cuộc đàm thoại với guest và thông tin cơ bản của guest đó như họ tên, giới tính . . .

Sau đây là các Schema của Collection trên

1.BData Schema

var bdataSchema = mongoose.Schema({
         bot_id: mongoose.Schema.Types.ObjectId,
         datatype: { type : String , “default” : “bdata” },
         name: { type: String, default: “” },
         data: { type : [Object] , “default” : “[]” },
});

2.Content Schema

var contentSchema = mongoose.Schema({
          bot_id: mongoose.Schema.Types.ObjectId,
          datatype: { type : String , “default” : “content” },
          user_say: String,
          pattern: { type : String , “default” : “no” },
          query: { type : String , “default” : “” },
          answer: { type : Array , “default” : [] },
          lang: { type : String , “default” : “en” },
          updatetime: Number,
          value: { type : [String] , “default” : “[]” }
      });

3. Block Schema

var blockSchema = mongoose.Schema({
          datatype: { type : String , “default” : “block” },
          name: String,
          query: { type : String , “default” : “” },
          bot_id: mongoose.Schema.Types.ObjectId,
          value: { type : Array , “default” : [] },
          lang: { type : String , “default” : “en” },
          updatetime: Number,
      });

4. Metadata Schema

      var metadataSchema = mongoose.Schema({
          bot_id: mongoose.Schema.Types.ObjectId,
          name: String,
          system: String,
          content: String,
          data: { type : Array , “default” : [] },
      });

5. Communication Schema

      var communicationSchama = mongoose.Schema({
          type:{type:String, default:’messager’},
          bot_id: mongoose.Schema.Types.ObjectId,
          uid:String,
          fullname:String,
          gender:String,
          data: [{
                   time:Date,
                    who:String,//guest, bot
                   message:String
          }],
          last_message: String,
          last_time_message: Date,
          tags:[String]
      });

Các API dùng truy xuất database

1.BData API

  1. findAllBData(condition) : lấy tất cả Document của BData dựa theo điều kiện condition
  2. findOneBData(condition): trả về một Document của BData
  3. updateBData(condition, data): update data dựa theo điều kiện condition, trả về một object cho biết trạng thái cập nhật thành công hay thất bại
  4. insertBData( data): Thêm 1 document BData vào Database

2. Content API

  1. findAllContent(condition) : lấy tất cả Document của Content dựa theo điều kiện condition
  2. findOneContent(condition): trả về một Document của Content
  3. updateContent(condition, data): update data dựa theo điều kiện condition, trả về một object cho biết trạng thái cập nhật thành công hay thất bại
  4. insertContent( data): Thêm 1 document Content vào Database

3. Block API

  1. findAllBlock(condition) : lấy tất cả Document của Block dựa theo điều kiện condition
  2. findOneBlock(condition): trả về một Document của Block
  3. updateBlock(condition, data): update data dựa theo điều kiện condition, trả về một object cho biết trạng thái cập nhật thành công hay thất bại
  4. insertBlock( data): Thêm 1 document Block vào Database

4. Metadata API

  1. findAllMetadata(condition) : lấy tất cả Document của Metadata dựa theo điều kiện condition
  2. findOneMetadata(condition): trả về một Document của Metadata
  3. updateMetadata(condition, data): update data dựa theo điều kiện condition, trả về một object cho biết trạng thái cập nhật thành công hay thất bại
  4. insertMetadata( data): Thêm 1 document Metadata vào Database

5. Communication API

  1. findAllCommunication(condition) : lấy tất cả Document của Communication dựa theo điều kiện condition
  2. findOneCommunication(condition): trả về một Document của Communication
  3. updateCommunication(condition, data): update data dựa theo điều kiện condition, trả về một object cho biết trạng thái cập nhật thành công hay thất bại
  4. insertCommunication( data): Thêm 1 document Communicationvào Database
Yes No

2.4.Attribute API #

Để truy xuất các Attribute, bạn dùng các method sau:

I. User Attribute : Có giá trị khác nhau với mỗi guest khác nhau, vd khi chat full-name của 1 guest này sẽ khác full-name của guest khác.

  1. createUserAttribute(attribute_name) : tạo UserAttribute có tên [attribute_name], giá trị default là null
  2. addUserAttributes(attribute_name, uid, value): thêm giá trị [value] cho cho guest dựa vào uid
  3. getUserAttributes(attribute_name, uid) : lấy giá trị attribute của uid
  4. delUserAttributes(attribute_name,uid): xóa attribute của uid, các uid khác không ảnh hưởng
  5. updateUserValueAttributes(attribute_name,uid, value) : cập nhật giá trị attribute của uid
  6. updateUserAttributesName(old_name, new_name) : đổi tên attribute
  7. delUserAttributes(attribute_name) : xóa attribute, mọi giá trị của các uid sẽ bị xóa theo

Trường hợp User Attribute có gắn kèm Trigger thì khi giá trị thay đổi, Trigger  đó sẽ được chạy

II. System Attribute : Có giá trị giống nhau trên toàn hệ thống của Bot đó

  1. addBotAttributes(name, value) : Thêm 1 Bot Attributes vào hệ thống, khi thêm phải thiết lập giá trị cho Bot Attributes  đó
  2. getBotAttributes(name): lấy giá trị của Bot Attributes  theo [name]
  3. delBotAttributes(name): xóa Bot Attributes  đó
  4. updateBotvalueAttributes(name, value) : cập nhật giá trị cho  Bot Attributes
  5. updateBotnameAttributes(old_name, new_name) : thay đổi tên cho  Bot Attributes
  6. getListBotAttributes(): lấy danh sách Bot Attributes
Yes No