1. Tổng quan
Kịch bản là một chuỗi hành động mà Bot sẽ thực hiện, nhằm 2 mục đích:
Kịch bản được mô tả dưới dạng máy trạng thái gồm 4 loại. Mỗi trạng thái biểu thị 1 hành động mà BOT sẽ thực hiện:

2. Các bước để tạo một kịch bản
Bước 1: Vào danh sách kịch bản của Bot cần tạo. Có 2 cách:
Cách 1: Click đúp vào một BOT bất kỳ để tới trang danh sách kịch bản của BOT

Cách 2: Lựa chọn Bot qua danh sách các Bot. Sau đó, vào menu chọn tab Kịch bản


Bước 2: Chọn "Tạo kịch bản mới"

- Nhập thông tin vào các trường được hiển thị trên màn hình
Tên kịch bản: Tên kịch bản cần tạo
Mô tả: Mô tả rõ ràng hơn về kịch bản
03 trạng thái để xây dựng một kịch bản hoàn chỉnh:
01. Khi nào kịch bản này được kích hoạt?: Được gọi là các mẫu câu kích hoạt kịch bản. Nơi chứa các câu nói/câu hỏi của người dùng dành cho Bot. Khi người dùng gửi cho Bot một câu nói/câu hỏi nằm trong danh sách này, Bot sẽ kích hoạt kịch bản này để đưa ra các câu trả lời liên quan. Do vậy, Người tạo BOT sẽ phải nhập các câu để giúp BOT có thể học, từ đó nhận diện ra ý định mà người dùng muốn hỏi BOT để chọn kịch bản xử lý tương ứng. Lưu ý là, càng nhiều mẫu câu được nhập thì Bot càng xử lý nhận diện ý định tốt hơn. Cách nhập: Người tạo BOT gõ từng câu kích hoạt vào vị trí "Thêm câu kích hoạt kịch bản" sau đó nhấn ENTER để đưa vào danh sách

02. Các thông tin cần làm rõ: Trong trường hợp người dùng nói chuyện với Bot nhưng thông tin không rõ ràng, Bot sẽ khai thác thêm thông tin từ người dùng thông qua các mẫu câu của bước này.


Thông tin các trường:
Tên thông tin cần hỏi: Tên của câu hỏi/lời nói mà Bot sẽ hỏi lại người dùng để lấy thêm thông tin
Số lần lặp lại: Số lần mà Bot sẽ hỏi lại người dùng câu hỏi/lời nói này. Nếu vượt quá số lần thì kể cả BOT không lấy được thông tin thì cũng sẽ chuyển qua trạng thái khác.
Thông tin bắt buộc: Quy định xem thông tin lấy được ở trạng thái này có phải bắt buộc hay không, không bắt buộc nghĩa là kể cả không có thông tin này, bot vẫn trả lời được và ngược lại.
Câu hỏi dẫn dắt: Các câu hỏi mà Bot cần hỏi để lấy thông tin từ khách hàng
Trường hợp còn lại: Sử dụng khi có ngoại lệ
Kiểu thông tin: Có 2 lựa chọn là Nhóm thực thể và Tùy chọn.
Nhóm thực thể: Lựa chọn các thực thể có trong danh sách thực thể. Là thông tin mà BOT lấy được từ thực thể chứa trong câu hỏi của người dùng. Thực thể này có thể được định nghĩa sẵn (built in) hoặc do người tạo BOT tự định nghĩa ở phần tạo thực thể. Thực thể trong câu hỏi của người dùng có thể đến từ 2 trường hợp:
Dùng danh sách thực thể trực tiếp từ web: Người tạo BOT tự gõ
Dùng danh sách thực thể là các knowledge thông qua các API: Người tạo BOT chọn trong danh sách thực thể mà BOT gợi ý, danh sách này lấy từ knowledge (cách sử dụng knowledge đã được nêu rõ trong các mục trước)
Khi lấy thông tin kiểu này, ta phải chọn kiểu thông tin là "Nhóm thực thể" và chọn loại thực thể tương ứng ở ô bên cạnh.

Tùy chọn: Bot đưa ra các option để người dùng chọn lựa. Là thông tin được lấy từ tùy chọn mà người tạo BOT định nghĩa sẵn ngay trong kịch bản. Khi lấy thông tin kiểu này, ta phải chọn kiểu thông tin là “Tùy chọn” và nhập các lựa chọn ở ô bên cạnh bằng cách nhập nội dung và nhấn Enter.
Ví dụ: BOT muốn hỏi người dùng ở khu vực nào, mà thông tin khu vực không có trong list thực thể hoặc không lấy được từ knowledge. Lúc này, người tạo BOT sẽ khai báo tên các khu vực này trong chính kịch bản.

Hàm truy vấn nhóm thực thể: Mục này được sử dụng khi BOT dùng Tri thức. Cú pháp của hàm này bao gồm: tên hàm(#biến1,#biến2, ...). Kết quả trả về những thông tin có tích hợp hàm trả về danh sách sẽ hiển thị ra dưới dạng list các button cho người bấm chọn. Ví dụ với kịch bản biển cấm thì hàm truy vấn nhóm thực thể sẽ là traffic_sign_search(#trafficType,#loai_xe)

Điều kiện chuyển trạng thái: Các thông tin sẽ có các tính chất khác nhau, dựa vào tính chất thông tin đó thì bot sẽ chuyển sang các trạng thái tương ứng. Tính chất của thông tin được mô tả bằng biểu thức điều kiện. Chi tiết về biểu thức điều kiện xem tại ĐÂY
03. Các kịch bản trả lời: Dựa vào các thông tin tìm được và điều kiện mà người làm Bot đặt ra, Bot sẽ đưa ra thông tin tương ứng


Thông tin các trường:
Truy vấn kiến thức: Được dùng khi kịch bản sử dụng tri thức

Ví dụ trong trường hợp này khi sử dụng tới tri thức, bot cần đưa ra đường dây nóng CSGT của 1 tỉnh thành nào đó, ta cần khai báo hàm với đầu vào là biến đại diện cho tỉnh thành, như sau: hotline_detail(#province). Hàm này sẽ trả về các thuộc tính của tỉnh thành như:
nameDisplay: tên của tỉnh thành
hotline: đường dây nóng của tỉnh thành
Lúc này câu trả lời sẽ là “Đường dây nóng của tỉnh thành #result.nameDisplay là #result.hotline”
Câu trả lời: Nhập câu trả lời mà Bot sẽ đưa ra cho người dùng
Bước 3: Chọn "Lưu" để lưu lại kịch bản vừa tạo
- Biểu thức điều kiện
Ở các trạng thái lấy thông tin WAIT_A, WAIT_B (02. Các thông tin cần làm rõ), biểu thức điều kiện sẽ cho biết thông tin lấy được đang thỏa mãn điều kiện gì để chuyển qua các trạng thái tiếp theo.
Ở trạng thái RENDER_ANSWER (03. Các kịch bản trả lời), biểu thức điều kiện sẽ cho bot biết với những thông tin lấy được thì đang thỏa mãn điều kiện nào để đưa ra câu trả lời tương ứng.
Điều kiện hợp lệ là điều kiện có:
số lượng dấu đóng mở ngoặc bằng nhau, các dấu này tạo thành cặp
số toán tử so sánh ( ==, !=) nhiều hơn số toán tử logic ( &&, || ) 1 toán tử.
các các thành phần trong biểu thức ( toán tử, toán hạng và các dấu đóng mở ngoặc ) ngăn cách nhau bằng 1 dấu cách.
Ví dụ:
Biểu thức hợp lệ:
#package
!#package && #technology
!#package && (#technology || #packageType)
( #technology == 4g && #package == 4g125 ) && #packageType == dcom
Biểu thức không hợp lệ:
• Các thành phần viêt liền tù tì, không ngăn cách nhau bằng dấu cách
(#technology==4g &&#package == 4g125)&&#packageType==dcom
• Số lượng dấu mở ngoặc nhiều hơn số lượng dấu đóng ngoặc (hoặc ngược lại)
( ( #technology == 4g && #package == 4g125 ) && #packageType == dcom
• Số lượng dấu mở bằng ượng số lượng dấu đóng ngoặc nhưng không tạo thành cặp
) ( #technology == 4g && #package == 4g125 ) ( && #packageType == dcom