10 CÁI NGU PHẢI TRÁNH THÌ ĐỜI MỚI KHÔN

1 - Cho mấy thằng bài bạc mượn tiền. Muốn giúp nó làm lại cuộc đời Nhưng cuối cùng phải kêu nó bằng ông nội rồi suốt ngày quỳ lạy nó mà cũng chẳng lấy được đồng nào.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

Thứ Sáu, 26 tháng 6, 2020

Tạo ChatBot đơn giản hơn với Dialogflow


 Chatbot hay Bot là một chương trình máy tính tương tác trực tiếp với con người một cách tự động. Hôm nay tôi sẽ hướng dẫn chi tiết việc tạo một chú Bot đơn giản trong 5 phút.

Phần 1: Làm quen với Dialogflow. Tạo Bot trong 5 phút.

Phần 2: Liên kết Dialogflow với Facebook Messenger.

Phần 3: Hiểu và sử dụng các công cụ của Dialogflow. Tạo các cuộc trò chuyện có tương tác cao hơn.

Phần 4: Xây dựng webhook cho Bot. Xây dựng server webhook cho Bot để lấy thông tin nhiều hơn với ví dụ trả lời thông tin về thời tiết.

Bot là gì?

Bot là một ứng dụng thô sơ và trực quan nhất của trí tuệ nhân tạo (AI). Bot là kết quả của một hay nhiều kịch bản đã được viết sẳn kèm với một ít Máy Học (Machine Learning). Mục đích của Bot là trả lời các câu hỏi và đưa ra các gợi ý sao cho tự nhiên nhất có thể và chính sác nhất nếu được.

Bạn có thể hình dung Bot như là Siri của Apple hay Cortana của Microsoft. Bot có ngày càng thông minh hay không phụ thuộc vào ít nhất 2 yếu tố cấu thành nên bộ não của nó đó là:
  • Kịch bản dựng sẳn
  • Khả năng học hỏi

Nếu bạn muốn thử hảy ghé qua shop hoa này với dịch vụ đặc hoa tự động. 1-800 Flowers.

Dialogflow là gì?

Dialogflow được đổi tên từ Api.ai sau khi được Google mua lại vào tháng 9 năm 2016. Tiền thân là một công ty nổi tiếng với trợ lý ảo Speaktoit.
Dialogflow hiện tại là miễn phí cho tất cả mọi người. Dialogflow cho phép bạn tạo ra các kịch bản một cách dễ dàng kèm theo đó là Dialogflow cũng được phát triển trên mền Machine Learning nên bạn hoàn toàn có thể dạy cho con Bot của bạn biết cách xử lý các trường hợp, ngữ cảnh khác nhau.

Dialogflow hiện có sẵn các kịch bản và Dialogflow cũng được dạy khá tốt với lượng dữ liệu khá đồ sộ. Chỉ tiết là đa phần Dialogflow làm việc tốt hơn với Tiếng Anh và một số tiếng của các nước đông dân khác.
Ngoài ra Dialogflow còn cho phép bạn liên kết Chatbot của bạn với Messanger hay Skype hay Slack… một cách rất đơn giản.

Tạo Chatbot đơn giản với Dialogflow

1. Tạo tài khoản.
Bạn hãy truy cập vào trang Dialogflow và đăng ký một tải khoản (có thể sử dụng Google account). Sau khi đăng ký xong và đăng nhập vào Dialogflow, giao diện sẽ như sau.

2. Tạo Bot từ Bot có sẳn.
Mặc định bạn sẽ không có con Bot nào cả. Để nhanh chóng tiếp cận Dialogflow, bạn nên tạo 1 con Bot từ Bot đã được xây dựng sẵn.
Chọn Prebuilt Agents sau đó chọn Small Talk và nhấn IMPORT. Một dialog hiện liên, nếu bạn không biết về Google Project thì chỉ việc chọn OK
Và sau đó là hoàn thành việc tạo Bot.
3. Kiểm tra Bot.
Như đã nói đến ở trên, Dialogflow cho phép bạn liên kết ChatBot vừa tạo ra với một số ứng dụng hay dịch vụ khác như Messanger hay Kik… Để đơn giản trước tiên chúng ta sử dụng một trang web giả lập của Dialogflow để kiểm tra con Bot vừa rồi.
Từ thanh menu bênh trái chọn Integration sau đó chọn We Demo và Turn on.
Một dialog sẽ hiện lên và cho bạn hai thông tin.
  1. Tình trạng integration
  2. Liên kết web demo. Bạn có thể sửa phần cuối của link này để dễ nhớ hơn.
Click vào liên kết web demo, bạn sẽ đến với giao diện Bot như sau đây và hãy nhập thử một số câu chào hỏi tiếng Anh xem sao.
Dĩ nhiên chú Bot này chỉ hiểu tiếng Anh mà thôi.
4. Tạo lập kịch bản cho Bot.
Chúng ta sẽ thử hỏi Bot mấy câu tiếng Việt xem sao nhé.
Để tạo các kịch bản cho Bot, bạn chọn Intents ở menu bênh trái sau đó chọn dòng “smalltalk.agent.acquaintance” ở bênh phải.
Một trang mới mở ra, bạn cần nhập câu nói của User vào phần User says. Ví dụ tôi nhập “Chao” và Enter.
Chọn lưu lại và kiểm tra thử Bot đã hiểu chưa bằng cách gõ trực tiếp lên phần bênh phải.(hoặc bằng web demo).
Vậy là sau khi tôi nhấn Save, Bot đã hiểu.

Liên kết Dialogflow với Facebook messenger. Theo bài trước các bạn đã tạo được một Bot đơn giản. Ở bài này mình sẽ hướng dẫn các bạn kết nối Bot của bạn với Facebook Messenger.

Trước tiên để liên kết được DialogFlow các bạn cần một ứng dụng facebook cho Fanpage của mình. Nếu chưa có các bạn có thể tham khảo cách tạo FB app và xét duyệt cho Messenger tại đây.

Để liên kết được với FBM (Facebook Messenger) từ Dialogflow bạn chọn Integrations.

Sau đó chọn Facebook messenger

Ở dialog setting tiếp theo có 3 thông tin quan trọng đó là

  • Callback URL: là web hook URL dành cho FBM để call khi có messsage từ user (Không thể thay đổi).
  • Verify Token: là token dùng để verify các callback đến dialogflow. Dùng cho FBM (Cấu hình cái gì cũng được).
  • Page Access Token: là token của FBM dùng cho Dialogflow gửi response message cho page của bạn (Lấy từ FB application).

Tôi sẽ fill thông tin như sau.

Sau đó bạn quay về trang facebook application để lấy Page Access Token.

Chọn page để lấy token

Nếu có dialog xin xác nhận đăng nhập bạn cứ accept.

Sau đó lấy token và paste vào Page Access Token ở trên Dialogflow và chọn Start.

Tiếp tục các bạn chọn Thiết lập Webhooks

Lấy Callback URL và Verify Token ở trên Dialogflow paste vào dialog setting webhooks của facebook như sau. Lưu ý các option như hình.

Chọn Xác minh và lưu.

Bước cuối cùng kích hoạt webhooks như sau.

Một gợi ý nữa là bạn hãy kích hoạt luôn NLP.

Thế là xong, hãy thử chat với Bot trên Messenger.

Chúc các bạn thành công

Mã OTP Hoạt Động Ra Sao Và Cách Tạo Mã OTP

Trong bài viết này tôi xin khái quát định nghĩa OTP, cách nó hoạt động và thư viện hỗ trợ tạo – kiểm tra OTP. Rất thích hợp cho các bạn làm service trên .NET Core cần bảo mật 2 lớp.

1) Mã OTP là gì?

Chắc ai trong các bạn cũng biết được ứng dụng của mã OTP rồi. Mã OTP – One Time Password, được hiểu là mã chỉ dùng được một lần. Mã này sẽ có thời gian hiệu lực nhất định, thường là 30 giây đến 1 phút. Những đặc tính của OTP như sau:

  • Mã này có thời gian hiệu lực ngắn
  • Mã này thường là lớp mật khẩu cuối cùng
  • Mã này được sinh ra dựa trên một mã bí mật và định danh người dùng kèm thời gian hệ thống

Mã này có thể được tạo ra bằng nhiều cách:

  • SMS OTP: nhà quản lý thông tin cá nhân của bạn sẽ tạo ra mã này dựa trên thông tin đăng nhập (lớp 1) của bạn. Sau đó họ sẽ gửi SMS đến điện thoại của bạn đã đăng ký, nếu bạn nhập đúng thì bạn vượt qua lớp 2.
  • Token: là một thiết bị độc lập có thể tự tạo ra mã OTP (đã được liên kết với tài khoản của bạn trước đó).
  • Smart OTP: là một ứng dụng có thể cài đặt trên điện thoại (hoặc mọi thiết bị có hỗ trợ). Ứng dụng này cũng cần liên kết với tài khoản của bạn.

Việc liên kết ứng dụng (hay thiết bị) tạo OTP rất đơn giản nhưng cần giữ bí mật. Bạn chỉ cần quét mã QR được tạo ra bởi máy chủ quản lý thông tin của bạn 1 lần duy nhất.
Sau đó mã OTP sẽ được tạo mới định kỳ (sau 30 hoặc 60 giây). Nếu bạn mất điện thoại hoặc thiết bị tạo OTP đó là một hiểm họa cho bạn.
Hãy đổi ngay mật khẩu chính (lớp 1) nếu bạn mất điện thoại hoặc thiết bị tạo OTP (Token).

2) OTP hoạt động thế nào và tại sao cần nó?

Sử dụng OTP khác gì việc tài khoản của bạn có hai mật khẩu?
Bản chất là như nhau nhưng nguy cơ mất an toàn cao hơn nếu cả hai mật khẩu đều do bạn quản lý.

  • Bạn phải nhớ 2 mật khẩu cho một tài khoản
  • Thường các mật khẩu sẽ gắn với những thứ quanh bạn, nếu đoán được mật khẩu lớp 1, có thể đoán được lớp 2
  • Nếu bạn để lộ cả 2 mật khẩu, nghĩa là bạn mất tài khoản (nguy cơ cao)
  • Nếu bạn để lộ mật khẩu lớp 1 và OTP (lớp 2), thông thường bạn chỉ mất tài khoản trong 60 giây (nếu bạn phát hiện kiệp, kẻ gian có ít thời gian để kiệp đánh cắp tài khoản của bạn).

OTP được tạo ra dựa trên một mã bí mật (thường được tạo ngẫu nhiên chỉ thiết bị của bạn và máy chỉ biết), định danh tải khoản (như account id) và Time. Để tăng tính bảo mật, việc tạo mã bí mật cần thuật toán đặc biệt, it nhất là MD5 trên một chuỗi cực kỳ khó trùng lập.
Để liên kết ứng dụng tạo OTP (hoặc Token), bạn cần nhập 3 thông tin trên. Thường là liên kết bằng cách san Qr code. Sau khi đã liên kết, việc tạo mã OTP sẽ coi như là đồng bộ giữa thiết bị bạn giữ và trên máy chủ. Thế nên chúng hoạt động độc lập sau một lần đồng bộ duy nhất.

Giống như việc 2 người cùng đếm tốc độ đều nhau và đếm từ 0 thì họ sẽ đếm tới 10 cùng một lúc. Nếu 2 người không cùng dừng lại ở một số vào một thời điểm thì họ không thuộc một cặp với nhau. Dĩ nhiên việc tạo OTP phức tạo hơn như thế.

3) Cách tạo và kiểm tra mã OTP

Hôm nay tôi sẽ giới thiệu đến bạn thư việc giúp tạo mã OTP là OTP-Sharp.

1
PM> Install-Package OtpSharp

Với thư viện này bạn có thể dùng với 2 ngữ cảnh sau:

  • Server side: dùng để tạo mã nếu bạn muốn send SMS OTP cho Client. Và dùng để verify OTP của Client. Ngoài ra còn tạo mã để Client có thể liên kết.
  • Client side: dùng để tạo mã OTP cho Client (tương tự các ứng dụng hiện tại trên điện thoại)

Trong ứng dụng sau đây tôi có cả 2 ngữ cảnh trên.

OTP-Sharp solution structure

#1 Trước tiên tôi tạo 1 ứng dụng trong thế này.

Tạo OTP bằng ứng dụng c#
#2 Để tạo được một đối tượng OTP, bạn cần những thông tin sau đây:

  • Secret key: mã bí mật của bạn, thường sẽ được sinh ra ngẫu nhiên bởi thuật toán
  • Step: thời gian cho mỗi lần (Step) thay đổi OTP (thời gian hết hạn của OTP)
  • Size: số ký tự cho mã OTP (chỉ hỗ trợ 6 hoặc 8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public partial class MainWindow : Window
{
    private Totp totp;
 
    // Store inputed info from user
    public OTPRequest OTPRequest { get; set; } = new OTPRequest();
 
    // Store OTP info after generating
    public OTP OTP { get; set; } = new OTP();
 
    // Support display QR image
    public Image QRCode { get; set; }
 
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
    }
 
    private void GenerateOTP()
    {
        // Reseting data
        this.OTP.Otp = "";
        this.OTP.RemainingSeconds = 0;
 
        // Get key
        byte[] rfcKey = UTF8Encoding.ASCII.GetBytes(this.OTPRequest.SecretKey);
 
        // Generating TOTP
        this.totp = new Totp(rfcKey, this.OTPRequest.Step,
                                OtpHashMode.Sha1, this.OTPRequest.Size);    
 
        // Show OTP info on UI
        this.UpdateOTPInfo();      
    }
 
    private void UpdateOTPInfo()
    {
        this.OTP.Otp = this.totp.ComputeTotp();
        this.OTP.RemainingSeconds = this.totp.RemainingSeconds();
    }
}

#3 Sau khi tạo được đối tượng OTP, bạn có thể lấy mã OTP, Url (nội dung của QR code, format của url này là chuẩn) để share cho Client (cũng là bí mật) và thời giạn còn lại  (RemainingSeconds) cho Step hiện tại.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
private void GenerateOTP()
{
    // Reseting data
    this.OTP.Otp = "";
    this.OTP.RemainingSeconds = 0;
 
    // Get key
    byte[] rfcKey = UTF8Encoding.ASCII.GetBytes(this.OTPRequest.SecretKey);
 
    // Generating TOTP
    this.totp = new Totp(rfcKey, this.OTPRequest.Step,
                            OtpHashMode.Sha1, this.OTPRequest.Size);
    // Show OTP info on UI
    this.UpdateOTPInfo();
 
    // Generate shared key (QR)
    string url = KeyUrl.GetTotpUrl(rfcKey, this.OTPRequest.SiteId, this.OTPRequest.Step, OtpHashMode.Sha1, this.OTPRequest.Size);
    this.LoadQr(url);
}
 
private void LoadQr(string url)
{
    // downloading image
    string qrUrl = string.Format("http://qrcode.kaywa.com/img.php?s=4&d={0}", HttpUtility.UrlEncode(url));
    Uri urlUri = new Uri(qrUrl);
    var request = WebRequest.CreateDefault(urlUri);
 
    // Rendering image
    Image image = new System.Windows.Controls.Image();
    image.BeginInit();
    image.Source = BitmapFrame.Create(request.GetResponse().GetResponseStream(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
    image.EndInit();
 
    // Show image on UI
    this.QRCode = image;
}
 
private void UpdateOTPInfo()
{
    this.OTP.Otp = this.totp.ComputeTotp();
    this.OTP.RemainingSeconds = this.totp.RemainingSeconds();
}

add OTP into phone

Trên ứng dụng Google Authenticator, bạn tiến hành scan QR code vừa được tạo ra là xong phần liên kết tài khoản.
Scanning OTP shared code
lien ket OTP google authenticator

#4 Để kiểm tra OTP của Client, bạn gọi hàm sau của đối tượng ‘totp’ có chung mã bí mật.

1
2
3
4
5
6
7
8
9
10
private void Verify(string otp)
{
    if (string.IsNullOrWhiteSpace(otp))
    {
        return;
    }
 
    long windowUsed;
    bool isValid = totp.VerifyTotp(otp, out windowUsed, new VerificationWindow(0, 0));
}

Trong đó đối tượng VerificationWindow có 2 thông tin quan trọng:

  • Previous(n): là số step* (n) QUÁ KHỨ được chấp nhận. Vẫn chấp nhận nếu OTP hiện tại của Client trùng với OTP lần thứ ‘<= n’ trước đó. Trường hợp Client CHẬM hơn server.
  • Future(m): là số step* (m) trong TƯƠNG LAI được chấp nhận. Trường hợp Client NHANH hơn server (m lần)

*Step: mỗi lần mã OTP thay đổi xem như 1 step. Step hiện tại trên Server được tính là 0. Nếu Server chấp nhận lệch 2 step ở quá khứ (Previous(2)) nghĩa là Client chỉ được chấp nhận khi cần nhiều nhất 2 lần thay đổi OTP nữa để đuổi kiệp step hiện tại trên Server (ví dụ step dừng lại đợi Client). Mục đích việc này là phòng khi tốc động mạng hoặc tốc dộ gửi/nhận SMS tới/tại Client có độ trễ lớn.

#5 Kết quả.
Toàn bộ code có trên GitHub.


Tìm kiếm